Ant*_*ong 28 c++ lldb osx-mavericks
我用这个命令行编译了一个cpp文件: g++ -g test.cpp
它在第28行引发异常.我想通过检查lldb中的变量来调查原因.我在第28行设置了一个断点并a.out
在lldb中运行.
(lldb) n
Process 84233 stopped
* thread #1: tid = 0xa44b86, 0x00000001000017fb a.out`say(s=<unavailable>) + 987 at so.cpp:28, queue = 'com.apple.main-thread', stop reason = step over
frame #0: 0x00000001000017fb a.out`say(s=<unavailable>) + 987 at so.cpp:28
25 }
26 else{
27 s.insert(0, to_string(sz));
-> 28 s.erase(2, sz-1);
29 }
30 return s;
31 }
(lldb) po s
error: Couldn't materialize: couldn't get the value of variable s: variable not available
Errored out in Execute, couldn't PrepareToExecuteJITExpression
Run Code Online (Sandbox Code Playgroud)
为什么出现错误信息?我该如何检查变量s
?
lldb版本:lldb-320.4.115.3
g ++版本:Configured with: --prefix=/Applications/Xcode6-Beta5.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.0 (clang-600.0.45.3) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin13.3.0
Thread model: posix
Jim*_*ham 23
该错误意味着调试信息确实提到了变量,但表示它在当前PC上没有存储位置.
这可能是因为变量被优化了(不太可能,因为你只是在变量上调用一个函数),或者因为编译器为变量添加了调试信息并且丢失了它的去向.
确保您正在编译试图在-O0调试的代码,因为没有多少编译器在更高的优化级别上发出良好的调试信息.如果你在-O0编译,这是一个编译器错误.您应该向gcc人员报告.你可以看看你是否有更好的运气.否则,您必须阅读函数的程序集以确定变量实际存在的位置,然后告诉调试器打印相应的强制转换地址.
Dus*_*inB 12
当我运行RELEASE(vs DEBUG)构建(Product-> Scheme ...-> Edit Scheme ...-> Info,然后将Build Configuration设置为"Debug"时,我看到了这一点.