1、介绍:
gdb是unix即unix-like下的调试工具。你可随心所欲的运行程序、指定断点处停留、程序停住是可查看状态、可以改变程序讲一个bug的影响修正从而调试其他bug。
2、注意事项:必须用-g生成要调试的可执行文件,-g表示带调试信息。
g++ -g gdbtest.cpp –o main
3、基本调试语法:
(1)进入gdb—— gdb/gdb test/gdb test core.3177/
(2)对main文件进行调试
1)可以进入gdb后执行——file mian
2)也可以直接gdb file直接进入gdb。
(3)List当前代码—— list 或 l
1)罗列当前代码—— list 或者 l
2)罗列15行周围代码——list 15
3)罗列func函数的源程序—— list func
4)罗列当前行后面的程序——list
5)罗列当前行前面的程序——list -
(4)设置Breakpoint—— b
1)第k行加断点—— b 13
2)mian函数入口加断点—— b main
3)执行地址加断点—— b 地址
(5)运行代码Run—— r (无断点时game over)
注:必须先执行(Run),否则Step和Next都是没法用的。
(6)单步进入—— s (进入某个函数 s后回车)
(7)下一步Next—— n
(8)查看num变量数值—— print num 或 p num
(9)继续运行(Continue)—— c (无断点时就game over)
(10)查看堆栈—— bt
1)打印全部堆栈—— bt
2)一个个打印堆栈信息—— down 或 up
(11)退出gdb—— quit/q或者Ctrl 。
(12)对于有参数的程序,有三种方法设置运行的参数
1)run 172.25.10.112 12345 即可把ip地址和端口传入。
4、多线程的调试:
(1)info threads:显示所有线程
(2)thread ID :切换线程
(3)set scheduler-locking[off|on|step]:对被调线程外的其他线程进行控制。
1)off:表示不锁定任何线程,即所有线程都可以继续执行。
2)on:表示只有当前被调线程会继续执行。
3)step:表示在单步执行的时候,只有当前线程会执行。
(4)frame num 切换栈
(5)bt 显示线程堆栈信息
(6)info r 显示当前帧的寄存器信息 (每一帧的寄存器信息都是不相同的)