gdb命令

gdb调试需在可执行文件中加入源码信息:gcc --o main a.c -g

如果没有调试信息,提示 Reading symbols from main...(no debugging symbols found)...done.

有调式信息 Reading symbols from main...done.

设置程序运行的参数:

1.通过run命令提供程序运行时的参数

2.通过set args命令指定程序的参数

c 复制代码
$ gdb main
(gdb)run para1 para2
Starting program: /home/c/main para1 para2
Hello World para1 para2
[Inferior 1 (process 20084) exited normally]

(gdb) set args para1 para2
(gdb) run
Starting program: /home/c/main para1 para2
Hello World para1 para2
[Inferior 1 (process 20201) exited normally]
c 复制代码
1.(gdb) gdb main //进入gdb
2.(gdb) start //开始执行程序,停在main函数第一行语句前等待输入
3.(gdb) s(step) //执行下一行语句,如果有函数则进入到函数中
4.(gdb) n(next) //单步执行
5.(gdb) c(continue) //继续运行程序直到下一个断点
6.(gdb) display b //显示变量的值

7.断点
(gdb) b 8
break 函数名,在某个函数开头设置断点
break 行号,在某一行设置断点
break filename:linenum
break if i=100 条件断点
disable breakpoint 断点号 //禁用此断点
enable breakpoint 断点号 //启用此断点
(gdb) i(info) breakpoints //显示当前所有断点info
(gdb) delete 3 //删除断点
(gdb) b 9 if a == 2 //条件断点
Breakpoint 5 at 0x400552: file a.c, line 9
(gdb)clear number //清除源文件中某一代码行上的所有断点

1.(gdb) q(quit) //退出gdb调试环境
2.(gdb) set var //修改变量的值
3.(gdb) p /x value //十六进制打印
4.attach: 用gdb调试一个正在运行中的进程

//输出调试信息到文件
1.(gdb) set logging file <文件名>  //设置输出的文件名
2.(gdb) set logging on //打开到指定文件的输出
3.(gdb) set logging off //关闭到指定文件的输出

//多线程调试
1.(gdb) info threads //查看当前进程的线程
2.(gdb) thread <ID> //切换调试的线程为指定ID的线程
3.(gdb) break file.c:100 thread all //在file.c第100行为所有经过的线程设置断点
c 复制代码
//堆栈相关命令
(gdb) bt //调用堆栈:当前函数之前的调用函数列表
#0  0x000000317eee1603 in __select_nocancel () from /lib64/libc.so.6
#1  0x0000000000401005 in main (argc=2, argv=0x7fffffffe378) at client.c:92

info registers 查看寄存器使用
info stack    查看堆栈使用
info args      打印出当前函数的参数
info locals    打印出当前函数中所有局部变量
info catch     打印出当前的函数中的异常处理信息

f(frame) 栈帧号  显示栈帧信息
up/down        栈帧上移/栈帧下移
相关推荐
17(无规则自律)6 小时前
深入浅出 Linux 内核模块,写一个内核版的 Hello World
linux·arm开发·嵌入式硬件
liu****6 小时前
2.深入浅出理解虚拟化与容器化(含Docker实操全解析)
运维·c++·docker·容器·虚拟化技术
中二病码农不会遇见C++学姐6 小时前
Linux下的.run文件
linux
予枫的编程笔记6 小时前
【Linux入门篇】摆脱权限混乱困境:Linux用户组管理+sudo提权,一步到位
linux·linux运维·后端开发·linux用户管理·linux权限配置·chmod命令·sudo配置
A9better6 小时前
C++——不一样的I/O工具与名称空间
开发语言·c++·学习
杜子不疼.6 小时前
Ascend_C自定义算子开发
c语言·开发语言
一个人旅程~6 小时前
Dell n4020双系统分区步骤和linux优化操作
linux·windows·电脑
忆~遂愿6 小时前
CANN metadef 深度解析:动态形状元数据管理、图编译器接口规范与序列化执行机制
大数据·linux
小乔的编程内容分享站6 小时前
C语言笔记之函数
c语言·笔记
予枫的编程笔记6 小时前
【Linux入门篇】Linux文件操作不用记满屏命令,掌握touch/cp/mv核心用法就够了
linux·tar·linux命令·tail·cat·linux文件管理·linux新手教程