Latest web development tutorials

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:

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.
linha de entrada string contendo unicamente cont termina esta função, de modo que o chamador pode continuar a correr para baixo.

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.
Em '(' (abre parênteses) representam o nome da variável começando com nenhum nome de variável (exceto para depurar as informações bloco de código).

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:

  • ' c ': Sempre que Lua chama uma função, chamar o gancho;
  • ' r ': toda vez que Lua retorna de uma função é chamada quando o gancho;
  • ' l ': toda vez que Lua entra uma nova linha, ligue para o gancho.
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.