`
txf2004
  • 浏览: 7040893 次
  • 性别: 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调试和执行分离-示例程序

    1. **构建可调试程序**:确保编译时开启调试信息,例如在C/C++中使用`-g`选项。 2. **启动调试服务器**:在目标机器上运行GDB的server模式,如`gdbserver :1234 my_program`,这里的`:1234`是端口号,`my_program`...

    arm-linux-gdb-gdbserver

    Gdbserver 是 GDB 的轻量级版本,它可以在目标设备上运行,而调试控制台则在宿主机上。这样,开发者无需在目标设备上安装完整的 GDB 环境,只需将编译后的可执行文件传输到目标设备,并通过 gdbserver 进行调试。 ...

    aarch64-linux-android gdb工具

    6. **设置断点**:在GDB控制台中,你可以使用 `break` 命令设置断点,例如 `break main` 将在`main`函数处设置断点。 7. **运行应用**:使用`adb shell` 命令启动你的应用,例如 `adb shell am start -n your....

    windows gdb 可视化 调试 insight mingw

    通过熟练掌握这些基本操作,你可以在Insight中高效地进行GDB调试。在Windows环境下,虽然MinGW和Insight可能不如Visual Studio等IDE直观,但它们提供了更多底层控制和灵活性,特别适合对C和C++代码进行深度调试。 ...

    Linux应用和gdb一些使用汇总。

    在Linux中,用户可以通过终端控制台执行各种操作,包括文件管理、系统设置、网络通信等。对于初学者来说,了解并掌握一些基本的Linux命令至关重要。 1. **Linux安装**: Linux的安装过程通常分为图形化安装和...

    【ASP.NET编程知识】详解VS2017 Linux 上.NET Core调试.docx

    本资源主要介绍了在 VS2017 中使用 SSH 调试 Linux 上的 .NET Core 应用程序的步骤和方法。 一、环境准备 * 开发环境:Win10 x64 Visual Studio 2017 * 部署环境:Ubuntu 14.04 x64 .NET Core SDK 1.0.1 在 ...

    gdb+gdbserver调试使用手册

    它运行在目标机器上,充当目标程序与宿主机上的gdb之间的桥梁,使得开发者能够通过宿主机上的gdb来调试运行在目标机器上的程序。 #### 二、远程调试原理 远程调试环境主要由两部分组成:宿主机上的GDB和目标机上的...

    linux编程调试详解

    使用GDB调试程序时,开发者可以一步地跟踪代码的执行,检查特定时刻程序的状态,从而更好地理解程序的行为。 介绍完调试方法之后,接下来的文本部分将介绍Linux系统下的一个调试工具strace。strace是一个用来监控和...

    Linux应用程序的远程交叉调试.pdf

    在本地调试时,调试器GDB与被调试程序在同一主机上运行。然而,在远程交叉调试中,GDB运行在开发主机上,而程序运行在目标板上。目标板通过gdbserver与主机的GDB通信,实现远程调试功能。这种模型如图1.1所示,GDB...

    window 平台用的gdb

    在Windows上使用这个版本的GDB,开发者可以远程连接到运行在Linux上的目标系统,从而对ARM处理器上的应用程序进行调试。这对于那些在嵌入式设备上工作的开发者来说是非常有用的,因为他们可能无法直接访问硬件设备的...

    基于A33的GDB+KGDB内核调试环境搭建.pdf

    总的来说,搭建基于A33的GDB+KGDB内核调试环境需要对内核配置文件进行修改、对驱动进行验证、对KGDB源码进行必要的调整,并熟练使用GDB调试命令。通过这一系列步骤,开发者可以有效地对基于全志A33的Linux系统进行...

    linux设备驱动详解-源代码

    - **调试技巧**:使用`dmesg`、`strace`、`gdb`等工具进行内核级调试。 宋宝华的书中详细讲解了以上知识点,并通过实例代码帮助读者理解和实践。例如,书中可能会有简单的字符设备驱动示例,逐步解释如何创建设备...

    Linux驱动程序调试的常用方法.pdf

    printk 的功能与我们经常在应用程序中使用的 printf 是一样的,不同之处在于 printk 可以在打印字符串前面加上内核定义的宏,例如 KERN_ALERT、KERN_CRIT 等。这些宏是用来定义需要打印的字符串的级别。值越小,级别...

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

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

    Linux内核的软件调试技术研究.pdf

    - **插桩**:在程序中插入额外代码的一种技术手段,主要用于收集程序运行时的数据,以便于后续的分析和调试。 - **远程调试**:允许开发者在一台计算机上调试运行在另一台计算机上的程序的技术。这对于嵌入式系统...

    Linux调试技术介绍

    - 在Linux环境下,开发人员可以利用多种工具来进行程序调试,如GDB(GNU Debugger)、strace等。 - 本文主要关注的是内核级别的调试,其中最为常用的工具之一就是`printk()`函数。 2. **`printk()`函数**: - `...

    linux 内核调试文档

    #### 十五、使用GDB调试运行中的系统 - 通过网络连接远程主机,使用GDB进行调试。 #### 十六、内核调试选项 - **`INVARIANTS`**:用于检查内核中的不变量,帮助发现潜在的问题。 - **其他调试选项**:如`KDB`、`...

    linux内核调试技术

    假设我们需要调试一个驱动程序中的某个函数,可以在该函数的关键位置添加如下代码: ```c printk(KERN_INFO "Entering function %s\n", __func__); ``` 这将输出一条包含函数名称的信息到内核日志中。 #### 四、...

    嵌入式LINUX操作系统.pdf

    嵌入式 LINUX 操作系统是指在嵌入式系统中使用的 LINUX 操作系统。嵌入式系统是一种专用计算机系统,具有高可靠性、低功耗、低成本、小体积等特点。嵌入式 LINUX 操作系统的特点是可以根据不同的应用场景进行裁剪,...

Global site tag (gtag.js) - Google Analytics