gpt4 book ai didi

c++ - lldb:无法实现:无法获取变量的值

转载 作者:IT老高 更新时间:2023-10-28 12:56:19 24 4
gpt4 key购买 nike

我用这个命令行编译了一个cpp文件:g++ -g test.cpp

它在第 28 行抛出异常。我想通过检查 lldb 中的变量来调查原因。我在第 28 行设置了一个断点并在 lldb 中运行 a.out

(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

为什么会出现错误消息?如何检查变量 s

lldb 版本:lldb-320.4.115.3

g++ 版本:配置为:--prefix=/Applications/Xcode6-Beta5.app/Contents/Developer/usr --with-gxx-include-dir=/usr/包括/c++/4.2.1
Apple LLVM 版本 6.0 (clang-600.0.45.3) (基于 LLVM 3.5svn)
目标:x86_64-apple-darwin13.3.0
线程模型:posix

最佳答案

该错误意味着调试信息确实提到了该变量,但表示它在当前 PC 上没有存储位置。

这可能是因为变量被优化了(不太可能因为您只是在变量上调用函数)或者因为编译器混淆了变量的调试信息并忘记了它的去向。

确保您在 -O0 编译您尝试调试的代码,因为在更高优化级别发出良好调试信息的编译器并不多。如果你在 -O0 编译,这是一个编译器错误。您可能应该将其报告给 gcc 人员。你可以看看你是否有更好的 clang 。否则,您必须阅读函数的程序集以找出变量实际所在的位置,然后告诉调试器打印适当的转换地址。

关于c++ - lldb:无法实现:无法获取变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25335985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com