我在处理包含多个 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.
但是,这个地方确实存在。该消息的真正含义是什么?
最佳答案
What really the message means?
该消息意味着 GDB 不知道任何名为 /aia/r015/home/sathish/zfs_amr/src/zfslbminterfaced2q9.cpp
的源文件。
出现这种情况的原因有多种:
- 此文件的调试信息丢失,要么是因为该文件是在没有
-g
的情况下编译的,要么是因为稍后(可能无意中)删除了调试信息, - 上述路径中有一些符号链接(symbolic link),GDB 通过完全解析的路径名知道该文件,
- 该文件实际上根本没有链接到可执行文件中,
- 共享库的文件部分和该共享库的符号尚未加载,
- 等等
正如 Pat 所建议的,在 zfslbminterfaced2q9.cpp:100
上设置断点更有可能起作用。
如果这不起作用,信息来源
会告诉您 GDB 知道哪些文件。
更新:
info sources gives blank
这意味着应用程序根本没有任何调试信息。
通常这是出于以下两个原因之一:
- 您忽略了在 link 行上指定
-g
(某些平台在编译和链接时都需要-g
),< - 您的链接行某处有一个“迷路”
-s
(它会剥离最终的可执行文件)。
关于c++ - 无法设置 gdb 断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20272766/