【发布时间】:2014-08-01 09:06:00
【问题描述】:
我从具有完整调试信息的源代码构建了 Clang 程序(Clang IIUC 的默认构建类型)。我通过注意到模块中有编译单元来检查可执行文件中是否有调试信息:
$ lldb /opt/bin/clang++
(lldb) script lldb.target.module['/opt/bin/clang++'].GetNumCompileUnits()
1341
我在 Clang 源代码树 lib/Sema/SemaExpr.cpp 中使用了 Sema::DiagnoseAssignmentResult 方法中的 printf 语句(在我的副本中的第 10853 行)检测了一个文件。我知道这个方法在我的测试文件test.cc 上被调用,但是我不能让调试器在这个方法的断点处停止!我试过两种方式设置断点,
$ lldb /opt/bin/clang++
(lldb) breakpoint set -m DiagnoseAssignmentResult
Breakpoint 2: where = clang++`clang::Sema::DiagnoseAssignmentResult(clang::Sema::AssignConvertType, clang::SourceLocation, clang::QualType, clang::QualType, clang::Expr*, clang::Sema::AssignmentAction, bool*) + 87 at SemaExpr.cpp:10858, address = 0x0000000100ab9947
(lldb) process launch -- ./test.cc
<< message from my printf statement >>
... then clang++ runs to completion and exits, no breakpoint hit ...
(lldb)
我注意到lldb 确实在源代码中找到了正确的位置,但在通过方法时并没有停止。我还尝试通过指定文件和行号来设置断点,
(lldb) breakpoint set -f SemaExpr.cpp -l 10853
Breakpoint 3: where = clang++`clang::Sema::DiagnoseAssignmentResult(clang::Sema::AssignConvertType, clang::SourceLocation, clang::QualType, clang::QualType, clang::Expr*, clang::Sema::AssignmentAction, bool*) + 87 at SemaExpr.cpp:10858, address = 0x0000000100ab9947
它再次“工作”,但没有停止。我在这里做一些根本错误的事情吗?如何让断点触发?
【问题讨论】:
标签: lldb