使用lldb分析.DSYM文件

时间:2013-12-08 20:48:46

标签: c lldb dsym

我写了一个简单的c程序,它使用assert()调用。我想用lldb分析它。

正在使用的操作系统:OS X Mavericks

用于编译的编译器: Apple LLVM 5.0版(clang-500.2.79)(基于LLVM 3.3svn) 目标:x86_64-apple-darwin13.0.0 线程模型:posix

-g编译器选项生成了.DSYM目录。我想知道如何使用lldb分析这个核心。

PS:我使用-g选项(clang -g test.c

进行了编译

2 个答案:

答案 0 :(得分:1)

启动lldb然后执行命令

target create --core /cores/core.NNNN

其中“/cores/core.NNNN”是您的核心文件。一个简单的例子:

$ lldb

(lldb) target create --core /cores/core.5884
Core file '/cores/core.5884' (x86_64) was loaded.
Process 0 stopped
* thread #1: tid = 0x0000, 0x00007fff8873c866 libsystem_kernel.dylib`__pthread_kill + 10, stop reason = signal SIGSTOP
    frame #0: 0x00007fff8873c866 libsystem_kernel.dylib`__pthread_kill + 10
libsystem_kernel.dylib`__pthread_kill + 10:
-> 0x7fff8873c866:  jae    0x7fff8873c870            ; __pthread_kill + 20
   0x7fff8873c868:  movq   %rax, %rdi
   0x7fff8873c86b:  jmpq   0x7fff88739175            ; cerror_nocancel
   0x7fff8873c870:  ret    

(lldb) bt
* thread #1: tid = 0x0000, 0x00007fff8873c866 libsystem_kernel.dylib`__pthread_kill + 10, stop reason = signal SIGSTOP
    frame #0: 0x00007fff8873c866 libsystem_kernel.dylib`__pthread_kill + 10
    frame #1: 0x00007fff85de835c libsystem_pthread.dylib`pthread_kill + 92
    frame #2: 0x00007fff87554bba libsystem_c.dylib`abort + 125
    frame #3: 0x00007fff8751ea5f libsystem_c.dylib`__assert_rtn + 321
    frame #4: 0x000000010c867f59 a.out`main(argc=1, argv=0x00007fff53398c50) + 89 at prog.c:7
    frame #5: 0x00007fff872b65fd libdyld.dylib`start + 1

(lldb) frame select 4
frame #4: 0x000000010c867f59 a.out`main(argc=1, argv=0x00007fff53398c50) + 89 at prog.c:7
   4    int main(int argc, char **argv)
   5    {
   6        int i = 0;
-> 7        assert(i != 0);
   8        return 0;
   9    }
   10   

(lldb) p i
(int) $0 = 0

答案 1 :(得分:0)

在命令提示符处,在您具有symbols目录的同一目录中,键入

lldb program-name 

然后使用您在此官方gdb中所需的命令到lldb命令映射:

lldb-gdb