3

assert()我编写了一个使用该调用的简单 c 程序。我想使用 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)编译

4

2 回答 2

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
于 2013-12-08T22:07:17.947 回答
0

在命令提示符下,在符号目录所在的同一目录中,键入

lldb program-name 

然后使用你想要的命令,就像在这个官方 gdb 到 lldb 命令映射中一样:

lldb-gdb

于 2013-12-08T20:56:21.420 回答