gdb调试总结

1、启动调试

进程未启动:gdb  进程名

进程已经启动:gdb attach 进程号

 

2、断点

2.1 在某一行设置断点:break 文件名 :行号

2.2 为函数设置断点:break  函数名

2.3 利用正则表达式设置断点:rb 正则表达式

2.4 条件断点:b xxx if  yyy 

2.5 临时断点:tb 断点

2.6 启用和禁用断点   enable 编号  / disable  编号

2.7 查看断点和删除断点: info b / delete 编号 / delete 

 

3、查看

1、查看当前函数参数:info args

2、查看和修改变量的值: p 变量名  /  print 变量名 = 值

3、查看结构体的值: p * 结构体指针 / p  结构体

4、查看数组:set print array  +  p  数组名

5、查看内存:x /s 字符串    x  /4x  &number    x  /16s  xxx

打印内存的值 | 100个gdb小技巧 (gitbooks.io)

6、查看寄存器:info register 

7、查看调用栈:bt / frame 编号 / info frame 

 

4、多进程多线程调试

1、查看线程信息:info threads

2、切换线程:thread 线程ID

3、为线程设置断点:break 断点 thread  线程ID

4、为线程执行命令:thread apply 线程ID 命令   thread apply all bt (为所有线程执行命令)

5、只允许一个线程执行:set scheduler-locking on

6、调试子进程:set follow-fork-mode child

7、同时调试父子进程:set detach-on-fork off

在使用“set detach-on-fork off”命令后,用“i inferiors”(iinfo命令缩写)查看进程状态,可以看到父子进程都在被gdb调试的状态,前面显示“*”是正在调试的进程。当父进程退出后,用“inferior infno”切换到子进程去调试。

 

posted on 2024-08-17 11:11  轩邈、  阅读(26)  评论(0编辑  收藏  举报

导航