GDB调试
Posted 朱果果
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GDB调试相关的知识,希望对你有一定的参考价值。
- GDB介绍
- 使用GDB
- 调试命令
GDB介绍
GUN Procject debugger
支持 汇编、C、C++、GO等语言
使用printf调试代码,及其低效耗时,尤其对于工程代码。GDB调试是Linux平台上最为强大的调试工具。
使用GDB
对于C程序来说,需要在编译时加上-g参数,保留调试信息,否则不能使用GDB进行调试,会出现 no debugging symbols found的信息。
Reading symbols from helloWorld...done.表明可调试。
GDB启动调试未运行的程序
1)调试启动无参程序
$ gdb hello
..................
(gdb)run
直接输入run
2)调试带参程序
run + 参数
#include<stdio.h> int main(int argc,char *argv[]) { if(1 >= argc) { printf("usage:hello name\\n"); return 0; } printf("Hello World %s!\\n",argv[1]); return 0 ; }
编译:
gcc -g -o hello hello.c
启动调试并设置参数
3)调试core文件
当程序core dump时,可能会产生core文件,调试core文件能很快定位问题
$ gdb 程序文件名 core文件名
GDB启动调试运行的程序
先找到进程ID
$ ps -ef|grep 进程名 或者 $ pidof 进程名
调试
gdb -p 进程ID 或者 attach 进程ID
单步启动运行 start命令
gdb -tui 文件名 图形界面调试
设置断点
为何要设置断点?
设置断点后,程序运行到断点位置就会暂停,就可以对程序进行更多的操作,比如查看变量内容,堆栈情况等等,以助调试程序
设置程序断点
b 行号
b 文件名:行号
b 函数名
查看已设置的断点
info break
删除断点
delete 1
禁用或启动断点
有些断点暂时不想使用,但又不想删除,可以暂时禁用或启用。例如:
disable #禁用所有断点
disable bnum #禁用标号为bnum的断点
enable #启用所有断点
enable bnum #启用标号为bnum的断点
enable delete bnum #启动标号为bnum的断点,并且在此之后删除该断点
GDB调试--华清直播
https://www.makeru.com.cn/live/4034_2111.html
GDB调试入门指南
https://zhuanlan.zhihu.com/p/74897601
以上是关于GDB调试的主要内容,如果未能解决你的问题,请参考以下文章