启动调试
- 先进入gdb,然后通过file命令进入调试
示例如下:
$ gdb
(gdb) file program_a
- 直接进入调试
示例如下:
$ gdb program_a
直接进入调试又分为以下两种:
- 调试启动无参程序
示例如下:
$ gdb program_a
- 调试启动有参程序
(1)通过命令输入参数
示例如下:
$ gdb --args program_b src_path out_path
(2)通过无参程序方式启动,在进入gdb的控制界面之后再设置程序的参数
示例如下:
$ gdb program_b
(gdb) set args src_path out_path
- 附加到进程
很多情况下,程序出现问题时并不处于调试状态。也就是说,在我们想要调试程序时,程序
已经开始运行。这时,需要通过将gdb附加到进程的方式启动程序,语法如下:
gdb attach <pid>
或
gdb program <pid>
启动程序
启动程序的命令为“run”或者”r”,一般用于调试一个程序。r命令只在使用gdb启动被调试的程序时执行一次。如前例“通过无参程序方式启动”中,运行gdb program_b之后,进入到gdb的调试窗口。此时程序还未启动,可以执行设置启动参数、环境变量、断点等操作。设置完成之后,在gdb中输入run命令启动程序,程序会运行,直到遇到第一个命中的断点为止,程序在断点处会停下来。
另一个启动程序的命令是“start”,与run不同的是,start命令会在程序入口函数main停下来,start 作用等价于run+b main。如果需要在所加载的动态库中设置断点,通过start会很方便,因为 这时动态库及符号已经加载完成,通过tab就可以列举所有相关函数。