赞
踩
https://blog.csdn.net/unix21/article/details/9991925
gdb可视化调试:gdb -tui -q 可执行文件的名字
gdb编译程序
使用gcc编译程序生成可执行文件的命令中,加上-g参数
启动gdb调试程序
gdb 可执行程序
退出gdb调试
在gdb中输入quit(q)
命令行传参
set args ___ ___ ___
gdb查看源代码:list(l)
[1] listsize显示设置
默认情况下,显示list的上下各10行
list showsize #执行l命令,默认显示几行
set listsize 20 #设置显示的行数为20
[2] list(l)的使用
list 文件名:行号
list 文件名:函数名
设置断点:break(b)
b 文件名:行号
b 文件名:函数名
条件断点
b 行号 if 变量==var
例:b 17 if i==10 表示:在第17行打断点,当i==10条件成立时,程序停在断点处
查看设置过的断点info(i) b
删除断点:del(d) 断点编号Num
del num1 num2 … numN
del numK1-numK2
将断点设为[无效]:disable(dis) 断点编号Num
将断点设为[有效]:enable(ena) 断点编号Num
启动并执行程序,停在程序的第一行:start
启动并执行程序,停在断点break处:run®
查看变量的值:print§ 变量
查看变量的类型:ptype 变量
在程序执行的过程中,实时自动地显示变量的值:dispaly i
取消实时自动地显示变量的值:
info(i) display
undisplay 编号Num
gdb -p {进程号}
① 根据进程名,获取进程号码:pidof {进程名} --> 进程号
② 开启gdb调试:gdb {进程号}
说明:gdb {进程号},会先杀死该进程,然后重启进程&进入gdb调试环境。
打断点技巧
(1) b {代码文件}:函数名,例: b test.c:main
(2) b {代码文件}:行号,例:b test.c 12
查看断点信息:info b
commands:命令列表 (依赖于断点)
每次断点发生时候,想要查看的变量很多时,如果每个变量都手动print则需要浪费很多时间。断点命令可以在断点发生时批量执行gdb命令。
commands的设置步骤
① 打断点
② commands(开启commands)
③ > 命令1
④ > 命令2
⑤ > end (结束commands)
(gdb) l 1 #include <stdio.h> 2 3 int main() 4 { 5 int i; 6 for(i=0;i<100;i++) 7 ; 8 9 } 10 (gdb) b 7 # 打断点 Breakpoint 1 at 0x4004c3: file main.c, line 7. (gdb) i b # 查看断点信息 Num Type Disp Enb Address What 1 breakpoint keep y 0x00000000004004c3 in main at main.c:7 (gdb) commands 1 # 开启commands Type commands for breakpoint(s) 1, one per line. End with a line saying just "end". >p i # commands中的命令行 >end # 结束commands (gdb) i b # 查看断点详情,多了个p i Num Type Disp Enb Address What 1 breakpoint keep y 0x00000000004004c3 in main at main.c:7 p i (gdb)
不依赖于断点
)向下走,程序停在下一个断点:continue©
向下走一步,不会进入函数体:next(n)
向下走一步,会进入函数体:step(s)
跳出函数体:finish
从循环体直接跳出:until
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。