从 .sh 调用时调试 cpp 源文件时无法找到断点
Unable to find breakpoint when debugging a cpp source file when invoked from .sh
我需要在cpp 源文件中设置断点。当前调用 cpp 目标的设置是通过 shell 目标,具有额外的依赖关系,这意味着在 Linux 控制台中直接调用 cpp 目标是不可行的。
我在网上查了一下,大致有两种方式:
- 在 shell
中调用 gdb
- 在cpp中暂停,让gdb连接到进程
我不知道第一种方式怎么做,所以这里选择第二种方式。
我在 cpp 文件中插入 sleep(30),然后在另一个终端中打开 gdb 并连接到 运行 进程。我确认 gdb 可以在 gdb 中的 sleep() 函数处停止。但问题是 gdb 似乎只知道睡眠函数上下文,不知道睡眠函数的调用位置。如果我在主程序中强制设置断点,gdb 不会显示该文件。如果我在 gdb 中继续,它不会在我在 cpp 文件中设置的任何断点处停止。
您需要使用调试符号编译程序。否则 GDB 将只知道动态符号 table 中的符号。关闭优化也有助于调试。所以添加标志 -O0 -g
.
如果这不可能,您将不得不逐步完成反汇编 (Ctrl+X, 2)。
我需要在cpp 源文件中设置断点。当前调用 cpp 目标的设置是通过 shell 目标,具有额外的依赖关系,这意味着在 Linux 控制台中直接调用 cpp 目标是不可行的。 我在网上查了一下,大致有两种方式:
- 在 shell 中调用 gdb
- 在cpp中暂停,让gdb连接到进程
我不知道第一种方式怎么做,所以这里选择第二种方式。 我在 cpp 文件中插入 sleep(30),然后在另一个终端中打开 gdb 并连接到 运行 进程。我确认 gdb 可以在 gdb 中的 sleep() 函数处停止。但问题是 gdb 似乎只知道睡眠函数上下文,不知道睡眠函数的调用位置。如果我在主程序中强制设置断点,gdb 不会显示该文件。如果我在 gdb 中继续,它不会在我在 cpp 文件中设置的任何断点处停止。
您需要使用调试符号编译程序。否则 GDB 将只知道动态符号 table 中的符号。关闭优化也有助于调试。所以添加标志 -O0 -g
.
如果这不可能,您将不得不逐步完成反汇编 (Ctrl+X, 2)。