2017-02-06 4 views
0

Pyinstaller 문제에 대한 이미 좋은 분석을 개선하고 싶습니다. https://github.com/pyinstaller/pyinstaller/issues/2355. 이를 위해 모든 오류를 잡거나 LLDB로 특정 중단 점을 설정해야합니다. 우선 들어 GitHub의 I stated오류가 발생할 때 LLDB를 중지하는 방법

하나는 본질적으로 모든 오류를 포착하고 호출 스택을 덤프 브레이크 포인트가 필요합니다. break set -E C++, breakpoint set --selector __cxa_throw: [...]을 시도했지만 멈추지 않습니다.

실행 즉 정지 브레이크 포인트 if I do b Get 충돌 않지만이 셀렉터가 영향을 너무 많은 기능이 있습니다.

결론 : 실행 파일을 만들려면 http://frightanic.com/misc/hello-world에서 어떻게 할 수 있습니까? 바로 그 오류가 ./src/common/stdpbase.cpp(62)에서 발생하면 중지하십시오.

답변

0

--selector은 ObjC 선택기 이름에서 중단을 지정합니다. 그래서 나는 그 사람이 일하기를 기대하지 않을 것입니다. 이 체크 매크로가 어떻게 작동하는지 모르지만, 트립 된 하나는 비 디버그에서 값을 반환하거나 디버거에서 디버거를 중지하므로 C++ 예외가 발생하면 놀랄 것입니다. C++ 예외 중단 점이 트립되지 않는다는 사실은 그 사실을 증명합니다. 클래스 :: 메서드를 lldb의 중단 점에 지정할 수 있습니다. 따라서 시도해보십시오 :

(lldb) break set -n wxStandardPathsBase::Get 

이렇게하면 중단 점을 줄여야합니다. 물론 wxwidgets에 대한 디버그 정보가 있다면 더 정확하게 될 & 줄 중단 점 파일을 설정할 수 있어야합니다.

+0

통찰력에 감사드립니다. 분명히 제안 된 중단 점은 올바르지 않지만 실행이 중지되지 않습니다. 나는 정말로 혼란 스럽다. 단지 일하기를 원했다. PyInstaller가 생성하는 바이너리에 정확히 어떻게 도달하는지 모르겠습니다. 질문에 링크 된 바이너리에서 무엇이든 파생 될 수 있습니까? –

+0

바이너리가 제거 된 것처럼 보입니다. 그것은 wxWhatever처럼 보이지 않는 어떤 것에도 링크하지 않으므로, hello world 바이너리에 정적으로 링크되어 있다고 가정하지만 심볼 테이블은 제거되었습니다. 너가 너 자신을 위해보고 싶으면 공구 "nm"은 너에게 상징을, 보여줄 것이다. 빌드의 어떤 시점에서 디버거가 중단 될 수있는 심볼이있는 스트라이프 해제 된 바이너리가있었습니다. 포스트 스트립 바이너리가 아닌 그 스테이지를 디버그하고 싶습니다. –

+0

필자는 필자의 분석에서 이것을 처음으로 생각했다 ('nm'에 대해서는 몰랐다.) 그러나 http://pyinstaller.readthedocs.io/en/stable/usage.html에 따르면 심볼 테이블은' --strip'을 PyInstaller로 보내거나'.spec' 파일에서'strip = True'를 사용하십시오. 나는 당신의 분석을 의심하지 않지만 나는 당혹 스럽다. 검색을 계속할 것입니다 ... –

관련 문제