从 .sh 调用时调试 cpp 源文件时无法找到断点

Unable to find breakpoint when debugging a cpp source file when invoked from .sh

我需要在cpp 源文件中设置断点。当前调用 cpp 目标的设置是通过 shell 目标,具有额外的依赖关系,这意味着在 Linux 控制台中直接调用 cpp 目标是不可行的。 我在网上查了一下,大致有两种方式:

  1. 在 shell
  2. 中调用 gdb
  3. 在cpp中暂停,让gdb连接到进程

我不知道第一种方式怎么做,所以这里选择第二种方式。 我在 cpp 文件中插入 sleep(30),然后在另一个终端中打开 gdb 并连接到 运行 进程。我确认 gdb 可以在 gdb 中的 sleep() 函数处停止。但问题是 gdb 似乎只知道睡眠函数上下文,不知道睡眠函数的调用位置。如果我在主程序中强制设置断点,gdb 不会显示该文件。如果我在 gdb 中继续,它不会在我在 cpp 文件中设置的任何断点处停止。

您需要使用调试符号编译程序。否则 GDB 将只知道动态符号 table 中的符号。关闭优化也有助于调试。所以添加标志 -O0 -g.

如果这不可能,您将不得不逐步完成反汇编 (Ctrl+X, 2)。