使用 GDB 调试程序时,在合适的时机暂停程序的运行是最基本且必须的操作。这里提到的合适时机暂停包括控制程序在哪行暂停、在什么条件下暂停、在收到什么信号时暂停等。
GDB 提供的暂停程序运行的方式包括:断点 (BreakPoint)、观察点 (WatchPoint)、捕捉点 (CatchPoint)、信号 (Signals)、线程停止 (Thread Stops)。
下面具体介绍下几种暂停程序运行的命令和方法。
一、断点设置与查看
断点是调试程序最常用的方式。在 GDB 内部,可以使用 break
命令 (缩写形式 b
) 来设置断点。break
命令的主要使用方式包括:
(1) break
表示程序执行当下一条指令时由 GDB 暂停程序
(2) break +offset
表示当程序执行到当前行后面的 offset 行时由 GDB 暂停程序
(3) break -offset
表示当程序执行到当前行前面的 offset 行时由 GDB 暂停程序
(4) break <linenum>
表示当程序执行到当前文件的第 linenum 行时由 GDB 暂停程序
(5) break filename:linenum
表示当程序执行到源文件名为 filename 的第 linenum 行处由 GDB 暂停程序
(6) break foo
表示当程序执行到函数名为 foo 时的函数时由 GDB 暂停程序 (C++ 使用 namespace::class_name::foo
格式指定函数名
(7) break filename:foo
表示当程序执行到源文件名为 filename 的 foo 函数入口处由 GDB 暂停程序
(8)