2012-09-16 2 views
4

스크립트를 효율적으로 디버깅하는 방법을 알지 못합니다. 파이썬과 같은 스택 출력이 필요하지만 기본적으로 Lua/C에는이 기능이 없습니다. 나는 그것을 가능하게하는 방법을 모른다. 또는 단순히 스크립트에서 오류 출력을 얻는 방법은 무엇입니까?스크립트 내에서 Lua 런타임 오류가 발생합니다.

답변

6

아마도 xpcall과 debug.traceback의 조합을 찾고있을 것입니다.

function functionThatMayFail() 
    error('Failed') 
end 
local success, result = xpcall(functionThatMayFail, 
    function(err) return debug.traceback(err) end) 
print(success, result) 

이 코드가 인쇄됩니다 : 당신은 스택 추적을 얻기 위해 그것을 오류 처리기와 사용 debug.traceback을 통과 xpcall 사용할 수 있습니다 내가 구현하기 때문에

false xpcall.lua:2: Failed 
stack traceback: 
    xpcall.lua:6: in function <xpcall.lua:6> 
    [C]: in function 'error' 
    xpcall.lua:2: in function <xpcall.lua:1> 
    [C]: in function 'xpcall' 
    xpcall.lua:5: in main chunk 
    [C]: ? 
+0

둘 이상의 인수가있는 함수를 어떻게 처리 할 수 ​​있습니까? – ekd123

+0

xpcall을 anon func (다른 함수를 호출하도록 함)와 함께 사용하고 있습니다. 이제는 원하는대로 정확하게 작동합니다. 감사! – ekd123

+0

조금 늦었지만 내부 기능이 필요하지 않습니다. 기능 functionThatMayFail() 오류 ('실패') 끝 지역 성공, 결과 = xpcall (functionThatMayFail, debug.traceback) 인쇄 (성공, 결과는) [LUA에 대한 닉 훈제 햄의 좋은 문서에서 마지막 예를 참조하십시오 .] (http://www.gammon.com.au/scripts/doc.php?lua=xpcall) – DelGurth

0

루아 인터프리터는 기본적으로 오류 출력을 생성합니다. 예 :

$ lua random.lua 
lua: random.lua:6: attempt to call global 'xists' (a nil value) 
stack traceback: 
    random.lua:6: in main chunk 
    [C]: ? 

당신이 오류 출력의 측면에서, 당신이 뭘하려는 건지 아니면 더 나은 일이 일어날 것으로 예상한다는 일이되지 않은 것을 명확히 수 : (나는이 스크립트로 오타를 도입)?

+0

이 나를 위해 작동하지 않습니다 메인 프로그램 안의 나의 기능을위한 래퍼. 그것은 프로그램 자체의 외부에서 사용할 수 없습니다. 때로는 너무 많은 오류가 함께 발생하는 경우 대부분 해결하기 쉽기 때문에 게시 할 필요가 없습니다. – ekd123

관련 문제