Lua de depuração (Debug)
Lua fornece biblioteca de depuração para fornecer-nos a criar uma série de funções conversor personalizado. O próprio Lua não tem um governador built-in, mas muitos programadores compartilhem o código Lua governador.
Lua na biblioteca de depuração inclui as seguintes funções:
Não. | Method & Purpose |
---|---|
1. | debug (): Introduza um modo interativo usuário, executando cada cadeia digitada pelo usuário. Usando comandos simples e outras configurações de depuração, o usuário pode rever as variáveis globais e locais, altere os valores das variáveis para calcular um número de expressões, e assim por diante. |
2. | getfenv (objeto): Retorna Object variável de ambiente. |
3. | gethook (thread opcional): Retornos representam três conjuntos de gancho discussão: a função atual gancho, a máscara de ganho corrente ea contagem de gancho atual |
4. | getinfo ([thread,] f [ , que]): Informações sobre a função retorna uma tabela. Você pode fornecer esta função, você também pode usar uma representação digital da função f. função Digital f representa execução no pilha de chamadas do segmento especificado correspondente a níveis: Nível 0 indica a função atual (getinfo si); 1 camada indica que a função de chamada getinfo (a menos que seja o fim da chamada, esta situação não está incluído na pilha); etc. . Se F é uma função do número de actividades do que o número maior, getinfo retorna nil. |
5. | debug.getlocal ([thread,] f, local): Esta função retorna o nome e o valor do índice da pilha de camadas função f para as variáveis locais locais. Esta função só é usado para acessar as variáveis locais definidas explicitamente, incluindo parâmetros, variáveis temporárias. |
6. | getmetatable (valor): Os dados pontos de índice para os valores de elementos de mesa para a pilha. Se o índice for inválido, ou o valor do yuan é nenhuma tabela, a função retorna 0 e não empurrar nada para a pilha. |
7. | getregistry (): tabela de registro de volta, que está fora de uma tabela predefinida pode ser usado para salvar qualquer código C que você deseja salvar valor Lua. |
8. | getupvalue (f, para cima) Esta função retorna os nomes e os valores da função f o primeiro-se em valores. Se isso não acontecer sobre esse valor, ele retorna nulo. |
10. | sethook ([thread,] gancho, máscara [, Contagem]): Ele irá funcionar como um gancho para definir. máscara de corda e a contagem digitais determina o gancho será chamado quando. A máscara é uma combinação dos seguintes caracteres em uma string, cada personagem tem seu próprio significado:
|
11. | (Nível [thread,], setlocal local, valor): Esta função será o primeiro valor local designado para a função de camada primeira pilha local de nível variável. Se você não tem essa variável, a função retorna nil. Se o nível transfronteiriço, lançar um erro. |
12. | setmetatable (valor, a tabela): O valor da tabela do conjunto de elemento de tabela (pode ser nulo). valor de retorno. |
13. | setupvalue (f,-se, value) : Esta função irá primeiro estabelecer um valor sobre o valor da função f. Se você não tem essa função de um valor, retorna nil caso contrário, retorna o nome dos valores anteriores. |
14. | traceback ([thread,] [mensagem [, level]]): Se você tem uma mensagem, e não uma cadeia ou nulo, a função sem qualquer tratamento diretamente de volta mensagem. Caso contrário, ele retorna a pilha de chamada Informações de pilha de rastreamento. string de mensagem opcional é adicionado no início as informações de pilha de rastreamento. nível especificado opções digitais a partir do qual pilha de camadas começaram a recuar (o padrão é 1, que chama onde rastreamento de). |
A tabela é a nossa função de depuração comum, então podemos olhar para alguns exemplos simples:
function myfunction () print(debug.traceback("Stack trace")) print(debug.getinfo(1)) print("Stack trace end") return 10 end myfunction () print(debug.getinfo(1))
Executar os resultados de saída do código acima:
Stack trace stack traceback: test2.lua:2: in function 'myfunction' test2.lua:8: in main chunk [C]: ? table: 0054C6C8 Stack trace end
No exemplo, usamos o rastreamento e getinfo funções de biblioteca de depuração, getinfo função retorna uma informação de função de tabela.
outro exemplo
Muitas vezes precisamos para depurar as variáveis locais dentro de uma função. Podemos usar a função getupvalue para definir essas variáveis locais. Exemplos são os seguintes:
function newCounter () local n = 0 local k = 0 return function () k = n n = n + 1 return n end end counter = newCounter () print(counter()) print(counter()) local i = 1 repeat name, val = debug.getupvalue(counter, i) if name then print ("index", i, name, "=", val) if(name == "n") then debug.setupvalue (counter,2,10) end i = i + 1 end -- if until not name print(counter())
Executar os resultados de saída do código acima:
1 2 index 1 k = 1 index 2 n = 2 11
No exemplo acima, o contador será incrementado cada vez que uma chamada 1. Exemplos usamos função getupvalue para ver o estado atual de variáveis locais. Podemos definir uma variável local para um novo valor. Exemplo, antes de n é 2, utilize a função setupvalue configurá-lo para 10. Agora nós chamamos a função após a execução da produção é de 11 em vez de 3.
Tipo de depuração
- depurador de linha de comando
- depurador gráfico
depurador de linha de comando tem: RemDebug, clidebugger, ctrace, xdbLua, LuaInterface - Debugger, Rldb, ModDebug.
depurador interface gráfica tem: SciTE, Decoda, ZeroBrane Studio, akdebugger, luaedit.