Linux GDB使用总结

Linux GDB使用总结参考文献 1 嵌入式 Linux 教程 上册 2 Linux 下 gdb 的安装及使用入门 1 GDB 介绍 GBD theGNUProjec 是 GNU 发布的一个功能强大的 UNIX 程序调试工具 可以调试 C C

大家好,欢迎来到IT知识分享网。


参考文献:

[1]《嵌入式Linux教程(上册)》

[2] Linux下gdb的安装及使用入门


1、GDB介绍

GBD(the GNU Project Debugger)是GNU发布的一个功能强大的UNIX程序调试工具,可以调试C、C++、Pascal等多种语言程序,可以在大多数UNIX和Microsoft windows变种上运行。GDB既可以本地调试也可以远程调试。

通过GDB能够对程序进行如下调试:

  • 运行程序,还可以给程序,还可以给程序加上某些参数,执行程序的行为;
  • 使程序在特定的条件下运行;
  • 检查程序停止时的运行状态;
  • 改变程序的参数,以纠正程序中的错误。

2、GDB基本命令

如果要使用GDB调试,在编译时候需要加上-g参数(在末尾加),例如:

gcc -o gdbtest gdbtest.c -g

编译成功后,使用gdb进行调试,开启命令:

gdb gdbtest

Linux GDB使用总结

在GDB的命令提示符之后,输入help,可以查看GDB的命令分类。

(gdb) help List of classes of commands: aliases -- Aliases of other commands breakpoints -- Making program stop at certain points data -- Examining data files -- Specifying and examining files internals -- Maintenance commands obscure -- Obscure features running -- Running the program stack -- Examining the stack status -- Status inquiries support -- Support facilities tracepoints -- Tracing of program execution without stopping the program user-defined -- User-defined commands 

下表列出来GDB的一些基本命令:

命令 描述
break 设置断点:break 要设置断点的行数
clear

清除断点:clear 要清除断点的行数

delete 用于清除断点和自动显示的表达式的命令
disable 让所设断点暂时失效,如果要让多个编号处的断点失效,可将编号之间用空格隔开
enable 与disable相对应
run 

运行调试程序

kill 终止正在调试的程序
list 列出产生执行文件源代码的一部分
next

执行一行源代码但不进入函数内部

step 执行一行源代码并进入行数内部
quit 终止gdb调试
make

在gdb中重新产生可执行文件

shell  在gdb中执行UNIX Shell命令
watch  监控一个变量而不管它的值何时改变
info break

 查看所有断点信息

info break n 查看第n个断点的信息(n是第几个断点,而不是行数)
print 变量名 查看变量的值

 

3、GDB调试范例

孰能生巧。略

4、GDB远程调试

关于如何远程调试,参考:嵌入式远程调试工具gdbserver

关于如何安装gdbserver,参考:linux应用调试技术之GDB和GDBServer

 

5、GDB图形前端DDD

DDD是一个简洁的GBD图形前端,可以在图形界面下进行GDB调试。如果系统没有DDD,可以输入一下命令进行安装

sudo apt-get install ddd

安装后,在终端输入ddd即可以启动DDD程序,其界面如下所示。

Linux GDB使用总结

Linux GDB使用总结

以一下代码为例 dbgtest.c:

#include <stdio.h> int main(){ int a,b; printf("please input two number:"); scanf("%d %d",&a,&b); int sum = a + b; printf("the sum is %d\n",sum); a = 10; } 

step1:将需要调试的代码编译为可执行文件

gcc -o gdbtest gdbtest.c -g

step2:ddd gdbtest 装在可执行文件,进行调试

 

使用较为简单,略去….


断点命令:

break <source_file_name:line_num> 文件名:行号

break <function_name> 函数名

 

删除断点命令:

delete <break_point>,缩写d

delete 1   删除1号断点

 

查看堆栈命令:

backtrace,缩写bt(打印最内n层:bt n;最外n层:bt -n)

 

查看变量命令:p

p <para_name> 变量名 (可使用p直接修改变量值:p <para_name> ==xx)

 

查看所有的局部变量:info local

 

转到线程命令:thread <thread_number>

 

转到帧命令:frame <frame_number>

 

执行下一步命令:next,缩写n

 

继续运行直到下一个断点:continue,缩写c

 

进入子函数命令:step,缩写s

 

结束子函数返回到调用函数命令:finish,缩写f

 

结束循环命令:until,缩写u

 

监控变量:watch

watch expr:GDB在expr被程序写及其值改变停止;

rwatch expr:在expr被程序读时停止;

awatch expr:GDB在expr被程序读和写时停止;

 

查看所有断点信息:

info break

 

查看第n个断点的信息:

info break n

 

查看变量的值:print/f exp exp 是表达式

print 变量名

printf可以指定打印时候的表达式

 

查看内存地址:examine,缩写x

x/<n/f/u> <addr>

举例:x/10wx addr 查看10个4字节按16进制输出

x/10i addr 查看该地值的10条指令

 

显示所有thread线程(*号代表当前线程)

info thread

 

gdb现场切换到对应线程

thread thread_num

 

让一个或者多个线程执行gdb命令command

thread apply ID1 ID2 command

 

让所有被调试线程执行GDB命令command

thread apply all command

 

只给thread_num这个线程的xxx函数打断点

b xxx thread thread_num

 

set scheduler-locking off|on|step

off不锁定任何线程,也就是所有线程都执行,这是默认值

on只有当前被调试的程序会执行

step:其他线程不会执行,但是用其他命令(比如“next”)调试线程的时候,其他线程也许会执行‘

 

查看所有线程的调用栈(常用)

thread apply all bt


 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/153133.html

(0)
上一篇 2025-03-05 20:15
下一篇 2025-03-05 20:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信