c++ - 无法设置 gdb 断点

标签 c++ debugging gdb

我在处理包含多个 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/

相关文章:

c++ - 错误: “Control may reach end of non-void function” in c++

c++ - 我需要什么条件才能进一步增加 5% 的折扣?

c++ - 为什么我的简单 map.find(x) 不起作用?

c# - 一个奇怪的 Visual Studio 2010 调试器案例(它不能命中断点)

c++ - 我可以列出核心转储中的所有 VTable 指针吗?

当只有一个观察点时,gdb 会因太多观察点而停止

c++ - QT:QTimeEdit 小部件中 'Up' 和 'Down' 箭头的事件

c++ - 强制引用类型

Xcode - 异常中断,但没有可用的符号

c++ - 继续基于范围的 for 循环不会重新触发断点吗?