GDB远程调试

gdb参数选项详解

gdb主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数即可。

gcc -g main.c -o main

要用gdb调试程序,必须在编译时加上-g和-ggdb选项,如果没有-g,将看不见程序的函数名和变量名,代替它们的全是运行时的内存地址。

gdb和gdbserver的编译器类型一致

开发机器安装gdb(x86环境)

gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz下载,其中bin目录下包含编译好的gdb

https://releases.linaro.org/components/toolchain/binaries/7.4-2019.02/arm-linux-gnueabihf/#/

目标程序执行机器(arm)

需要将编译好的gdbserver移动至目标机器安装

make install

编译安装可参考

或者直接使用该压缩包下编译好的gdbserver

https://launchpadlibrarian.net/155358238/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux.tar.xz

gdbserver启动

gdbserver localhost:1234 --attach 891

其中localhost为本机ip地址,或者直接未localhost也可以。

1234为远程调试端口号

891为要调试的进程号。可以通过ps -ef|grep xxx查看对应pid

gdb启动

gdb

gdb开启远程debug

target remote 192.168.123.244:1234

其中192.168.123.244为调试程序目标机器的ip

1234为调试程序开启的端口号,与gdbserver开启的端口号保持一致。

gdb命令使用

2.2 gdb 命令

命令解释示例
file <文本名>加载被调试的可执行程序文件。因为一般都在被调试程序所在目录下执行GDB, 因而文本名不需要带路径。(gdb) file gdb-sample
rRun的简写, 运行被调试的程序。如果此前没有下过断点, 则执行完整个程序; 如果有断点, 则程序暂停在第一个可用断点处。(gdb) r
cContinue的简写, 继续执行被调试程序, 直至下一个断点或程序结束。(gdb) c
b <行号>
b <函数名称>
b *<函数名称>
b *<代码地址>
d [编号]
b: Breakpoint的简写, 设置断点。
可以使用"行号"“函数名称"“执行地址"等方式指定断点位置。
其中在函数名称前面加”*“符号表示将断点设置在"由编译器生成的prolog代码处”。如果不了解汇编, 可以不予理会此用法。
d: Delete breakpoint的简写, 删除指定编号的某个断点, 或删除所有断点。断点编号从1开始递增。
(gdb) b 8
(gdb) b main
(gdb) b *main
(gdb) b *0x804835c
(gdb) d
s, ns: 执行一行源程序代码, 如果此行代码中有函数调用, 则进入该函数;
n: 执行一行源程序代码, 此行代码中的函数调用也一并执行。
s 相当于其它调试器中的"Step Into (单步跟踪进入)";
n 相当于其它调试器中的"Step Over (单步跟踪)"。 这两个命令必须在有源代码调试信息的情况下才可以使用(GCC编译时使用”-g"参数)。
(gdb) s
(gdb) n
si, nisi命令类似于s命令, ni命令类似于n命令。所不同的是, 这两个命令(si/ni)所针对的是汇编指令, 而s/n针对的是源代码。(gdb) si
(gdb) ni
p <变量名称>Print的简写, 显示指定变量(临时变量或全局变量)的值。(gdb) p i
(gdb) p nGlobalVar
display …
undisplay <编号>
display, 设置程序中断后欲显示的数据及其格式。
例如, 如果希望每次程序中断后可以看到即将被执行的下一条汇编指令, 可以使用命令
“display /i $pc” 其中 $pc 代表当前汇编指令, /i 表示以十六进行显示。当需要关心汇编代码时, 此命令相当有用。
undispaly, 取消先前的display设置, 编号从1开始递增。
(gdb) display /i $pc
(gdb) undisplay 1
iinfo的简写, 用于显示各类信息, 详情请查阅"help i"。(gdb) i r
qQuit的简写, 退出GDB调试环境。(gdb) q
help [命令名称]GDB帮助命令, 提供对GDB名种命令的解释说明。
如果指定了"命令名称"参数, 则显示该命令的详细说明; 如果没有指定参数, 则分类显示所有GDB命令, 供用户进一步浏览和查询。
(gdb) help
llist的简写, 列出10行代码, 再次输入则列出往下的10行。若是list 加行号则从该行开始输出10行(gdb) l
watchwatch 为表达式(变量)expr设置一个观察点。变量量表达式值有变化时, 马上停住程序(gdb) watch a*b + c/d
finish运行至当前函数结束, 并打印函数返回时的堆栈地址和返回值及参数值等信息
set args可以修改发送给程序的参数(gdb)set args –b –x
show args查看其缺省参数的列表(gdb) show args
whatis显示某个变量的类型(gdb) whatis p

参考文档

gdb和gdbserver的安装和调试_gdb server 安装-CSDN博客

windows下安装gdb

Windows下如何使用和调试GDB-阿里云开发者社区

GDB调试可视化

https://zhuanlan.zhihu.com/p/563678056?utm_id=0#/

gdb命令使用

一步步教你使用GDB调试程序:从入门到精通的全面指南_gdb教程-CSDN博客

gdb调试命令

Gdb 入门+命令大全 - Iawen's Blog - 我喜欢这样自由的随手涂鸦, 因为我喜欢风......

gdb信息打印

打印内存的值 | 100个gdb小技巧

  • 24
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值