如何让LLDB单步进入std::cout的operator<<?
LLDB无法单步进入std::cout<<的问题处理
这是正常行为吗?
不是,LLDB默认应该支持单步进入标准库函数,出现这种情况通常是调试信息未正确加载、LLDB默认跳过了标准库函数,或者编译优化导致的。
解决办法
确认调试信息加载状态
在LLDB中执行image list,查看输出里是否包含/usr/lib/debug/usr/lib/libc.so.6这类glibc调试库的条目。如果没有,手动设置调试信息搜索路径:settings set target.debug-file-search-paths /usr/lib/debug修改LLDB的单步跳过规则
LLDB默认会通过正则匹配跳过某些函数,先查看当前规则:settings show target.process.thread.step-avoid-regexp如果规则中包含
std::相关的匹配项,清空该设置:settings set target.process.thread.step-avoid-regexp ""若想永久生效,把这条命令写入
~/.lldbinit文件。使用强制单步命令
不用默认的s命令,改用强制单步进入的命令:step -f或者用
si单步到汇编指令级别,确认是否真的有调试信息支持。调整编译选项
编译时添加-O0关闭优化,避免编译器内联std::cout的调用:clang++ -g -O0 hello.cpp同时确保clang版本与已安装的
glibc-debug、gcc-debug版本匹配,版本不兼容会导致调试信息无法识别。
内容的提问来源于stack exchange,提问作者Harumaki
相关产品推荐
相关产品推荐

