无法设置 gdb 断点
Posted
技术标签:
【中文标题】无法设置 gdb 断点【英文标题】:Not able to set gdb breakpoint 【发布时间】:2013-11-28 18:29:41 【问题描述】:我处理具有多个 C++ 文件的程序。我已经通过 gdb 运行可执行文件以调试分段错误。后来,gdb backtrace
提供了分段错误之前的函数列表。后来,我尝试在特定行号的文件中设置断点。 (指定路径为绝对路径)
(gdb) break /aia/r015/home/sathish/zfs_amr/src/zfslbminterfaced2q9.cpp:100
但是,gdb 给出以下消息:
No source file named /aia/r015/home/sathish/zfs_amr/src/zfslbminterfaced2q9.cpp.
但是,该位置确实存在此特定内容。消息的真正含义是什么?
【问题讨论】:
尝试指定不带完整路径的源文件名,例如(gdb) 中断 zfslbminterfaced2q9.cpp:100 另一个想法:您是否使用调试信息编译程序,即使用 -g 标志? 是的,程序是用-g3和-ggdb编译的 【参考方案1】:消息的真正含义是什么?
该消息表示 GDB 不知道任何名为 /aia/r015/home/sathish/zfs_amr/src/zfslbminterfaced2q9.cpp
的源文件。
出现这种情况的原因有多种:
此文件的调试信息丢失,可能是因为该文件是在没有-g
的情况下编译的,或者是因为后来(可能无意中)删除了调试信息,
上述路径中有一些符号链接,而 GDB 通过完全解析的路径名知道该文件,
该文件实际上根本没有链接到可执行文件中,
共享库的文件部分,以及该共享库的符号尚未加载,
等
正如 Pat 建议的那样,在 zfslbminterfaced2q9.cpp:100
上设置断点更有可能奏效。
如果这不起作用,info sources
会告诉你 GDB 确实知道哪些文件。
更新:
信息来源为空白
这意味着应用程序根本没有任何调试信息。
这通常是由于以下两个原因之一:
您忽略了在 link 行中指定-g
(某些平台在编译和链接时都需要 -g
),
您在链接行的某处有一个“流浪”-s
(它会删除最终的可执行文件)。
【讨论】:
信息源为“已读入符号的源文件:”和“将按需读入符号的源文件:”提供空白信息以上是关于无法设置 gdb 断点的主要内容,如果未能解决你的问题,请参考以下文章