2016-10-21 7 views
0

일단 OS X에 그 소리 빌드 된 바이너리와 lldb에서 :스택 트레이스 내가 리눅스에서 내가 일반적했던 것처럼, 설치된 엑스 코드 명령 행 도구를 사용하여 OS의 X에서 다음을 수행 할 수 있었다 옛적에

vim foo.cpp 
#... write some buggy code that segfaults 
gcc -g foo.cpp 
gdb a.out 
(gdb) bt 

그리고 난을 멋지고 상징적 인 스택 추적을 볼 수 있습니다. 요즘에는 gdb가 lldb로, gcc가 clang으로 바뀌 었습니다. 만약 내가 단지 clang++으로 빌드하고 lldb a.out을하면 나는 심볼이 없다.

나는 dsymutil을 실행 해보고 Mach-O 64-bit dSYM companion file x86_64 유형의 파일을 얻었으며 target symbols add과 함께 lldb에서로드하려고 시도했지만 아직 스택 트레이스에 심볼이 없습니다. 그러나 나는 인정해야한다, 나는 그 중 절반을 포기했다. http://lldb.llvm.org/symbolication.html이 고리들과 루프들을 거치면서 진실 일 수는 없다고 생각하고, 나 자신을 생산하는 바이너리로부터의 스택 추적을 얻는다.

제 질문은 다음과 같습니다. 몇 년 전에 gcc와 gdb를 사용하여 표준 Xcode 도구를 사용하여 최신 OS X 시스템의 명령 행에서 얻은 가장 간단한 방법은 무엇입니까?

포트 또는 홈 브루 등을 사용하여 gcc 및 gdb를 설치하는 옵션이 아니라는 점에 유의하십시오. 표준 Xcode 도구를 사용하여 명령 줄에서 스택 추적을 구해야합니다.

+0

바이너리를 빌드 할 때 "clang -g -O0 foo.cpp"라고 했습니까? 그렇게했다면, lldb를 사용하는 단계는 gdb와 완전히 동일해야합니다. –

답변

0

문제가 해결되었습니다. Jim의 의견에 따르면 완전한예제가 처음부터 만들어졌으며 멋진 상징적 스택 추적으로 설명 된 것처럼 실제로 작동했습니다.

처음에는 lldb의 출력을주의 깊게 읽지 않았습니다. 비 기호화 된 스택 추적은 실제로 내 크래시가 아닌 외부 종속성을 해결할 수없는 dyld 라이브러리 로더에서 발생했습니다.

따라서 답변은 lldbclang이 내가 원하는대로 작동한다는 것입니다. 나는 다음과 같은 출력물로 속아 넘어갔습니다.

dyld: Library not loaded: libbarlib.dylib 
Referenced from: fooexe 
    Reason: image not found 
Process 776 stopped 
* thread #1: tid = 0xec52b9, 0x00007fff5fc01075 dyld`dyld_fatal_error + 1, stop reason = EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0) 
    frame #0: 0x00007fff5fc01075 dyld`dyld_fatal_error + 1 
dyld`dyld_fatal_error: 
-> 0x7fff5fc01075 <+1>: nop  

dyld`dyldbootstrap::start: 
    0x7fff5fc01076 <+0>: pushq %rbp 
    0x7fff5fc01077 <+1>: movq %rsp, %rbp 
    0x7fff5fc0107a <+4>: pushq %r15 
(lldb) bt 
* thread #1: tid = 0xec52b9, 0x00007fff5fc01075 dyld`dyld_fatal_error + 1, stop reason = EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0) 
    * frame #0: 0x00007fff5fc01075 dyld`dyld_fatal_error + 1 
    frame #1: 0x00007fff5fc03f87 dyld`dyld::halt(char const*) + 77 
    frame #2: 0x00007fff5fc05fda dyld`dyld::_main(macho_header const*, unsigned long, int, char const**, char const**, char const**, unsigned long*) + 4174 
    frame #3: 0x00007fff5fc01276 dyld`dyldbootstrap::start(macho_header const*, int, char const**, long, macho_header const*, unsigned long*) + 512 
    frame #4: 0x00007fff5fc01036 dyld`_dyld_start + 54