赞
踩
gdb主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数即可。
gcc -g main.c -o main
要用gdb调试程序,必须在编译时加上-g和-ggdb选项,如果没有-g,将看不见程序的函数名和变量名,代替它们的全是运行时的内存地址。
开发机器安装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 localhost:1234 --attach 891
其中localhost为本机ip地址,或者直接未localhost也可以。
1234为远程调试端口号
891为要调试的进程号。可以通过ps -ef|grep xxx查看对应pid
gdb
target remote 192.168.123.244:1234
其中192.168.123.244为调试程序目标机器的ip
1234为调试程序开启的端口号,与gdbserver开启的端口号保持一致。
2.2 gdb 命令
命令 | 解释 | 示例 |
---|---|---|
file <文本名> | 加载被调试的可执行程序文件。因为一般都在被调试程序所在目录下执行GDB, 因而文本名不需要带路径。 | (gdb) file gdb-sample |
r | Run的简写, 运行被调试的程序。如果此前没有下过断点, 则执行完整个程序; 如果有断点, 则程序暂停在第一个可用断点处。 | (gdb) r |
c | Continue的简写, 继续执行被调试程序, 直至下一个断点或程序结束。 | (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, n | s: 执行一行源程序代码, 如果此行代码中有函数调用, 则进入该函数; n: 执行一行源程序代码, 此行代码中的函数调用也一并执行。 s 相当于其它调试器中的"Step Into (单步跟踪进入)"; n 相当于其它调试器中的"Step Over (单步跟踪)"。 这两个命令必须在有源代码调试信息的情况下才可以使用(GCC编译时使用”-g"参数)。 | (gdb) s (gdb) n |
si, ni | si命令类似于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 |
i | info的简写, 用于显示各类信息, 详情请查阅"help i"。 | (gdb) i r |
q | Quit的简写, 退出GDB调试环境。 | (gdb) q |
help [命令名称] | GDB帮助命令, 提供对GDB名种命令的解释说明。 如果指定了"命令名称"参数, 则显示该命令的详细说明; 如果没有指定参数, 则分类显示所有GDB命令, 供用户进一步浏览和查询。 | (gdb) help |
l | list的简写, 列出10行代码, 再次输入则列出往下的10行。若是list 加行号则从该行开始输出10行 | (gdb) l |
watch | watch 为表达式(变量)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
GDB调试可视化
https://zhuanlan.zhihu.com/p/563678056?utm_id=0#/
gdb命令使用
一步步教你使用GDB调试程序:从入门到精通的全面指南_gdb教程-CSDN博客
gdb调试命令
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。