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

 飞翔1 发布于 2022-12-27 16:13

我用这个命令行编译了一个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=) + 987 at so.cpp:28, queue = 'com.apple.main-thread', stop reason = step over
    frame #0: 0x00000001000017fb a.out`say(s=) + 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 ++版本: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

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

    这可能是因为变量被优化了(不太可能,因为你只是在变量上调用一个函数),或者因为编译器为变量添加了调试信息并且丢失了它的去向.

    确保您正在编译试图在-O0调试的代码,因为没有多少编译器在更高的优化级别上发出良好的调试信息.如果你在-O0编译,这是一个编译器错误.您应该向gcc人员报告.你可以看看你是否有更好的运气.否则,您必须阅读函数的程序集以确定变量实际存在的位置,然后告诉调试器打印相应的强制转换地址.

    2022-12-27 16:14 回答
  • 当我从我的应用程序方案中启用"Address Sanitizer"时,我遇到了这个问题.禁用它修复了问题.

    2022-12-27 16:14 回答
  • 当我运行RELEASE(vs DEBUG)构建(Product-> Scheme ...-> Edit Scheme ...-> Info,然后将Build Configuration设置为"Debug"时,我看到了这一点.

    2022-12-27 16:14 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有