O melhor tutorial Lua de depuração (Debug) em 2024. Neste tutorial você pode aprender Tipo de depuração,
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:
sethook ([thread,] gancho, máscara [, Contagem]):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. | 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.
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.
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.