GDB调试总结
2016-11-12 13:55
239 查看
一、core分析
1、查看命令:
ulimit -c
启动命令:
ulimit -c ulimited
查看core文件:
gdb -c core.xxx a.out
2、生成core文件的路径在文件/etc/sysctl.conf中
cat /etc/sysctl.conf
sysctl.conf文件中科院设置的格式符号表格。。。
3、启动整个系统的内核转储功能
二、gdb调试
1、使用gdb调试的文件需要使用-g编译
(1)使用makefile编译,加-g
(2)使用configure,./configure CFLAGs = "-wall -o2 -g"
2、gdb调试
(1)启动:gdb a.out
(2)设置断点: break或者b
break 函数名
break 行号
break 文件名:行号
break 文件名:函数名
break +偏移量
break -偏移量
break *地址
通过info break(info b)查看断点情况
3、显示帧栈:backtrace或者bt(别名:info stack, info s, where)
显示所有帧栈:bt
显示开头N个帧栈: bt N
显示最后N个帧栈: bt full N
4、显示变量: print 变量名(或者p 变量名)
5、显示寄存器:info registers(或者info reg)
6、单步执行:next(n) ,进入函数内部执行step(p),逐条执行汇编指令:nexti stepi
7、继续执行:continue(c)
8、监视点:watch 变量,当发生变化时暂停(awatch被访问和改变时暂停,rwatch被访问是暂停)
9、删除断点和监视点:delete n (d n)
10、改变变量的值:set variable <变量>=<表达式>
11、调试多进程方法
(1)先用ps -A | grep xxx 查看进程xxx的进程ID,然后attach到进程: attach 进程ID,attach 之后就能使用普通的gdb命令,需要将gdb和进程分离时使用detach,进程detach之后会继续运行。
(2)使用调试器选项follow-fork-mode
gdb调试器的选项follow-fork-mode允许我们选择程序在执行fork系统调用后是继续调试父进程还是调试子进程。
其用法如下: set follow-fork-mode mode (mode可选parent或child,分别表示调试父进程和子进程)
12、条件断点:break 断点 if 条件
13、删除禁用断点:clear 文件名:行号
delete 断点编号
disable 断点编号
enable 断点编号
14、断点命令:commands 断点编号
命令
end
15、调试多线程方法
(1)查看进程线程:i thr
切换到相应的线程:thr 123
(2)set scheduler-locking[off|on|step]
调试多线程程序时,默认除了被调试的线程在执行外,其他线程也在继续执行,但有的时候我们希望只让被调试的线程运行。这可以通过这个命令来实现。 该命令设置sceduler-locking的值:
off表示不锁定任何线程,即所有线程都可以继续执行,这是默认值。
on表示只有当前被调试的线程会继续执行。
step表示在单步执行的时候,只有当前线程会执行。
1、查看命令:
ulimit -c
启动命令:
ulimit -c ulimited
查看core文件:
gdb -c core.xxx a.out
2、生成core文件的路径在文件/etc/sysctl.conf中
cat /etc/sysctl.conf
sysctl.conf文件中科院设置的格式符号表格。。。
3、启动整个系统的内核转储功能
二、gdb调试
1、使用gdb调试的文件需要使用-g编译
(1)使用makefile编译,加-g
(2)使用configure,./configure CFLAGs = "-wall -o2 -g"
2、gdb调试
(1)启动:gdb a.out
(2)设置断点: break或者b
break 函数名
break 行号
break 文件名:行号
break 文件名:函数名
break +偏移量
break -偏移量
break *地址
通过info break(info b)查看断点情况
3、显示帧栈:backtrace或者bt(别名:info stack, info s, where)
显示所有帧栈:bt
显示开头N个帧栈: bt N
显示最后N个帧栈: bt full N
4、显示变量: print 变量名(或者p 变量名)
5、显示寄存器:info registers(或者info reg)
6、单步执行:next(n) ,进入函数内部执行step(p),逐条执行汇编指令:nexti stepi
7、继续执行:continue(c)
8、监视点:watch 变量,当发生变化时暂停(awatch被访问和改变时暂停,rwatch被访问是暂停)
9、删除断点和监视点:delete n (d n)
10、改变变量的值:set variable <变量>=<表达式>
11、调试多进程方法
(1)先用ps -A | grep xxx 查看进程xxx的进程ID,然后attach到进程: attach 进程ID,attach 之后就能使用普通的gdb命令,需要将gdb和进程分离时使用detach,进程detach之后会继续运行。
(2)使用调试器选项follow-fork-mode
gdb调试器的选项follow-fork-mode允许我们选择程序在执行fork系统调用后是继续调试父进程还是调试子进程。
其用法如下: set follow-fork-mode mode (mode可选parent或child,分别表示调试父进程和子进程)
12、条件断点:break 断点 if 条件
13、删除禁用断点:clear 文件名:行号
delete 断点编号
disable 断点编号
enable 断点编号
14、断点命令:commands 断点编号
命令
end
15、调试多线程方法
(1)查看进程线程:i thr
切换到相应的线程:thr 123
(2)set scheduler-locking[off|on|step]
调试多线程程序时,默认除了被调试的线程在执行外,其他线程也在继续执行,但有的时候我们希望只让被调试的线程运行。这可以通过这个命令来实现。 该命令设置sceduler-locking的值:
off表示不锁定任何线程,即所有线程都可以继续执行,这是默认值。
on表示只有当前被调试的线程会继续执行。
step表示在单步执行的时候,只有当前线程会执行。
相关文章推荐
- 关于GDB调试工具的学习总结
- gdb调试多线程程序总结
- 使用gdb调试多线程程序总结
- gdb调试Segmentation fault经验总结
- Linux使用GDB调试总结
- [iphonedev] 一句话总结.GDB为啥不输出调试信息了?
- gdb 调试总结
- 基于Linux调试工具strace与gdb的常用命令总结
- 使用gdb调试多线程程序总结
- 使用gdb调试多线程程序总结
- gdb调试命令总结
- 使用gdb调试多线程程序总结
- GDB 调试总结
- 基于Linux调试工具strace与gdb的常用命令总结
- 使用gdb调试多线程程序总结
- GDB调试常用命令总结
- GDB调试从基础到提高(自我总结)
- 用GDB调试程序总结
- GDB调试命令总结
- gdb图形化调试工具总结