gdb调试代码

一 gdb常用操作

1 list(简写 l): 查看源程序代码,默认显示10行,按回车键继续看余下的。

2 print命令的简写形式为p,使用它打印出变量的值。

3 执行“bt”看一下调用栈

调用main()函数

4 b 打断点

5 n 执行下一步 c 程序继续运行

6 info b 查看断点信息

7 layout src 图像化界面,查看源代码

8 u 行数。执行至程序的特定的行。u为until缩写

9 finish,简写fin,执行完某一个函数,并返回函数的执行结果

10 disable [断点标号] 使断点无效

11 able [断点标号] 使断点恢复

break 16          <----------- 设置断点,在源程序第16行处
break func        <----------- 设置断点,在函数func()入口处
info break        <----------- 查看断点信息。
r                 <----------- 运行程序,run命令简写
n                 <----------- 单条语句执行,next命令简写
c                 <----------- 继续运行程序,continue命令简写
p i               <----------- 打印变量i的值,print命令简写
bt                <----------- 查看函数堆栈
q                 <----------- 退出gdb
break *address    <----------- 在程序运行的内存地址处停住
delete n          <----------- 清除n号断点
x/<n/f/u> <addr>  <----------- 查看内存
eg: x/100uh 0x54320:从0x54320读取内容,h双字节为一个单位,100表示3个单位,u
ctrl+c            <----------- 暂停
si/ni             <----------- 单步运行

info registers/b  <----------- 查看当前寄存器和断点            
display /20i $pc  <----------- 查看当前执行及后20行汇编指令

layout split
layout regs
layout asm
print /x var 16进制显示(var)值
print可以指定显示的格式,这里用'/x'表示16进制的格式。 
可以支持的变量显示格式有: 
x  按十六进制格式显示变量。 
d  按十进制格式显示变量。 
u  按十六进制格式显示无符号整型。 
o  按八进制格式显示变量。 
t  按二进制格式显示变量。 
a  按十六进制格式显示变量。 
c  按字符格式显示变量。 
f  按浮点数格式显示变量。 

print x=4 修改运行时候的变量值
layout:用于分割窗口,可以一边查看代码,一边测试。主要有以下几种用法:
layout src:显示源代码窗口
layout asm:显示汇编窗口
layout regs:显示源代码/汇编和寄存器窗口
layout split:显示源代码和汇编窗口
layout next:显示下一个layout
layout prev:显示上一个layout
Ctrl + L:刷新窗口
Ctrl + x,再按1:单窗口模式,显示一个窗口
Ctrl + x,再按2:双窗口模式,显示两个窗口
Ctrl + x,再按a:回到传统模式,即退出layout,回到执行layout之前的调试窗口。

二 gdb调试线程命令

gdb调试Qemu命令

gdb --args  qemu-system-x86_64 -enable-kvm  -m 1024 -hda /home/qemu/Qemu/vm/ubuntu1010.img  -usbdevice tablet

参考链接

  1. [gdb调试命令]https://www.bbsmax.com/A/MyJxOP2Mzn/
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我将为你讲解如何利用 gdb 调试代码。 首先,需要确保你的代码已经被编译成可执行文件,并且在编译时加上了调试信息,例如: ```bash gcc -g -o myprogram myprogram.c ``` 这里的 `-g` 参数表示加入调试信息,`myprogram.c` 是你的源代码文件,`myprogram` 是生成的可执行文件。 接下来,启动 gdb 调试器,将可执行文件作为参数传入,例如: ```bash gdb myprogram ``` 这时,你将看到 gdb 的命令行提示符,输入 `run` 命令运行可执行文件,例如: ```bash (gdb) run ``` 如果程序在某处崩溃, gdb 会显示崩溃的位置和原因,例如: ```bash Program received signal SIGSEGV, Segmentation fault. 0x00000000004004d2 in main () at myprogram.c:6 6 *p = 0; ``` 这表示程序在第 6 行处出现了段错误。 你可以使用 `backtrace` 命令查看函数的调用堆栈,例如: ```bash (gdb) backtrace #0 0x00000000004004d2 in main () at myprogram.c:6 ``` 这表示 `main` 函数是导致程序崩溃的原因。 你可以使用 `print` 命令查看变量的值,例如: ```bash (gdb) print p $1 = (int *) 0x0 ``` 这表示指针变量 `p` 的值是 `0x0`,即空指针。 你可以使用 `break` 命令设置断点,例如: ```bash (gdb) break myprogram.c:8 ``` 这表示在第 8 行处设置一个断点。 你可以使用 `next` 命令执行下一行代码,例如: ```bash (gdb) next ``` 这将执行下一行代码,并在命令行中显示该行代码。 你可以使用 `step` 命令进入函数内部,例如: ```bash (gdb) step ``` 这将进入当前行所调用的函数内部执行。 你可以使用 `watch` 命令监视变量的值,例如: ```bash (gdb) watch p ``` 这将在变量 `p` 的值发生改变时自动暂停程序执行。 最后,使用 `quit` 命令退出 gdb 调试器,例如: ```bash (gdb) quit ``` 这里只是介绍了一些常用的 gdb 命令,还有很多其他的命令可以帮助你调试代码。在使用 gdb 调试代码时,需要对程序的控制流程和变量修改情况进行仔细的观察和分析,以便找到程序的问题所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值