GDB调试:GDB调试的是可执行文件,在gcc编译时加入-g参数,告诉gcc在编译时加入调试信息,这样gdb才能调试这个被编译的文件。此外还会加上-Wall参数尽量显示所有警告信息。
GDB命令格式:
1、start:程序在第一行停止;run:遇到断点才停止。
2、continue:继续运行,到下一个断点停止;next:向下执行一行代码(不进入函数体);step:向下单步执行(遇到函数调用可以进入函数体, finish可以跳出函数体);util:可以跳出循环体。
3、print 变量名(打印变量的值);ptype 变量名(打印变量类型)。display 变量名(自动打印指定变量的值,之后每执行一步,都会自动打印这个变量);undisplay 编号(将自动打印的变量关掉);info display:查看当前正在自动打印的变量有什么。
4、list : 从头默认位置显示;list 行号(从指定的行显示,这个行在显示的中间);list 函数名(从指定的函数显示);list 文件名:行号(函数名)从指定文件名的行号或者函数名显示。show listsize :查看显示的行数(默认10行);set listsize 行数:设置显示的行数。
5、break 行号:在指定的行号位置打断点;break 函数名:在指定的函数位置打断点;break 文件名:行号/函数名(在指定的文件中的行号或者函数位置打断点)。info break : 显示所有的断点信息;delete 断点编号:删除断点;disable 断点编号:设置断点无效;enable 断点编号:设置断点生效。break 10 if a == 5 : 在指定行设置条件断点,a == 5时断点生效。
GDB多进程断点调试:
- set follow-fork-mode [parent(默认) | child ] :设置调试父进程还是子进程,默认父进程。
- show follow-fork-mode : 查看调试父进程还是子进程。
- set detach-on-fork [ on | off ] : 设置调试模式。
- show detach-on-fork:查看调试模式。(默认为on,表示调试当前进程的时候,其他进程继续运行;如果为off,调试当前进程的时候,其他进程会被GDB挂起)。
- info inferiors : 查看调试的进程;inferior id :切换当前调试的进程;detach inferiors id :使进程脱离GDB调试。