`
txf2004
  • 浏览: 6831800 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在Linux的控制台中使用GDB调试程序

阅读更多

由于当前的开发是在一个只有Linux内核的特定环境进行的,Java代码可以通过远程调试功能在Windows下进行Debug,而C代码就没有那么幸运了。幸好有同事推荐了GDB,并且教给我了几个简单的命令,发现极其方便,并且功能很强大——虽然只是几个简单的命令,是整个调试过程变得妙趣横生。下面是我在调试应用的几个简单命令及简单过程。
一、简单的几个命令:
1、attach,绑定要调试程序的线程ID,形式:attach 9987
2、dir,绑定运行程序的源文件目录,例如: dir /tmp
3、b,设置断点,形式:b filename:line,例如:b general_parser.c:5695,就是在general_parser.c文件的第5695行设置断点。
4、advance,跳转到某处, 形式:advance line
5、display,显示变量或者表达式的值,在单步调试时会一直显示,形式:display expression
6、cont,继续执行,当运行到一个断点时,使用该命令继续向下执行到下一个断点
7、n,单步执行(Step over),每次执行一句,遇到函数调用时,不会进入到函数内部。如果前面使用display命令设置了要查看的表达式,那么就会在执行后显示出来。
8、s,单步跳入(Step into),也是每次执行一句,但是遇到函数调用时,会进入到函数内部。
9、list,列出产生执行文件的源代码的一部分
10、quit,退出
二、简单的调试过程
1、启动要调试的程序,并获得其线程ID;
2、启动gdb程序;
3、绑定调试程序的形成ID:
gdb\>attach pid
4、设置断点:
gdb\>b general_parser.c:5695
5、继续运行:
gdb\>cont
6、设置要查看的变量值:
gdb\>display currentMsg
7、继续运行:
gdb\>cont
8、等到预期输入时,可以单步调试
gdb\>n
9、遇到函数调用,可以使用s进入,也可以使用advance直接跳转某一行
gdb\>advance 3617
10、继续单步执行
gdb\>n
11、退出gdb。

当然上面的调试过程只时我在工作中的简单过程,并不具有普遍性,但是GDB几个简单的命令,的确是可以解决很大的问题。

下面是一篇关于GDB的文章:
  http://dsec.pku.edu.cn/~yuhj/wiki/gdb.html

分享到:
评论

相关推荐

    GDB调试流程及命令大全

    在使用GDB时,您需要在终端或控制台中启动您的程序,并使用以下命令之一来连接到其进程:`gdb <program>` 或 `gdb --pid <pid>`。一旦连接成功,您就可以使用一系列GDB命令来与程序进行交互,如: - `break` 设置...

    vgdb:适用于C和C ++程序的Visual Studio Code GDB调试适配器

    此扩展正在积极开发中特征在Linux上进行调试(未经测试的Windows和Mac支持) 在集成的Visual Studio Code终端或外部终端中启动目标条件断点调试控制台提示接受本地GDB命令在调试控制台中发出的命令将自动暂停并恢复...

    Linux程序设计 第4版.haozip01

    10.4.1 lint:清理程序中的“垃圾” 376 10.4.2 函数调用工具 378 10.4.3 用prof/gprof产生执行存档 380 10.5 断言 381 10.6 内存调试 383 10.6.1 electricfence函数库 383 10.6.2 valgrind 384 10.7 小结 ...

    《精通Linux 设备驱动程序开发》.(Sreekrishnan).pdf

    12.6 控制台驱动程序265 12.6.1 设备实例:手机266 12.6.2 启动logo270 12.7 调试270 12.8 查看源代码271 第13章 音频驱动程序273 13.1 音频架构273 13.2 linux声音子系统275 13.3 设备实例:mp3...

    Linux程序设计 第4版.haozip02

    10.4.1 lint:清理程序中的“垃圾” 376 10.4.2 函数调用工具 378 10.4.3 用prof/gprof产生执行存档 380 10.5 断言 381 10.6 内存调试 383 10.6.1 electricfence函数库 383 10.6.2 valgrind 384 10.7 小结 ...

    精通LINUX设备驱动程序开发

    247 12.1 显示架构 247 12.2 linux视频子系统 249 12.3 显示参数 251 12.4 帧缓冲api 252 12.5 帧缓冲驱动程序 254 12.6 控制台驱动程序 265 12.6.1 设备实例:手机 266 12.6.2 启动logo 270 12.7 调试 270...

    windows下可编译linux 用insight+bochs源码级调试

    1.赵炯博士已经将汇编程序中引用的C变量(包括嵌入汇编的C变量)的下划线去掉了,但MinGW的gcc可能是为了与其它Windows下的编译器保持兼容,并不能识别这些不带下划线的C变量,因而还得把原先已经在汇编程序中去掉下划线...

    使用Qt开发界面程序控制GPIO

    前言Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用...2014年4月,跨平台集成开发环境QtCreator3.1.0正式发布,实现了对于iOS的完全支持,新增WinRT、Beautifier等插件,废弃了无Python接口的GDB调试支持

    pyOCD:用于编程和调试Arm Cortex-M微控制器的开源Python库

    pyocd命令行工具使您可以使用以下子命令来完全控制设备: gdbserver :GDB远程服务器允许您通过控制台或使用gdb进行。 flash :将各种格式的文件编程到闪存中。 erase :擦除部分或全部MCU的闪存。 pack :管理提供...

    eclipse 开发c/c++

    现在,让我们研究一下如何在实际应用程序中使用这些组件。图 1 显示了 Eclipse 中的 C/C++ 项目: 图 1. 在带有 CDT 插件的 Eclipse 中编辑 C/C++ 项目 安装和运行 CDT 在下载和安装 CDT 之前,首先必需确保 GNU ...

    Python Cookbook

    17.9 用gdb调试动态载入的C扩展 613 17.10 调试内存问题 614 第18章 算法 616 引言 616 18.1 消除序列中的重复 619 18.2 在保留序列顺序的前提下消除其中的重复 621 18.3 生成回置采样 625 18.4 生成无回置...

    LINUX系统开发技术详解---基于ARM

    3.5.2 GDB调试命令.................................................................................................... 61 3.6 Linux 编程库..................................................................

    uboott移植实验手册及技术文档

    本文件中的 nand_init()函数,本例使用后者。fs2410.c代码如下: #if defined(CONFIG_CMD_NAND) typedef enum { NFCE_LOW, NFCE_HIGH } NFCE_STATE; static inline void NF_Conf(u16 conf) { S3C2410_...

Global site tag (gtag.js) - Google Analytics