在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

时间: 2024-09-25 18:40:07

在Linux的控制台中使用GDB调试程序的相关文章

用java实现像linux命令一样在Eclipse控制台中可以输入规定范围内的命令,并显示命令对应的正确内容。

问题描述 最近有一个考题(由于题目在公司拿不出来只有大概介绍一下了),考题附带了一个input.jar包,jar包中input.xml文件的元素(或是文本节点)是实际在Eclipse控制台中可以输入的命令,如果输入这些命令将会显示命令对应的内容.加入该xml有如下命令,addd:softinput.jar---加载成功/加载失败/没有该文件(这是输入该命令后输入的几种结果).removeinput.jar---删除jar包.listinfo----显示jar包中指定的信息(该信息配置在xml中需

C#如何从控制台中读取密码

语言: C# 在登陆Linux系统的时候,体验过在Linux的shell命令行窗口中输入用户密码吗? 下面体验下在Windows控制台中输入密码的方式 Showing  Effect /// <summary> /// Read password from console /// </summary> /// <returns>password</returns> public static string ReadPassword() { char[] re

《Linux C编程从入门到精通》》一2.4 Linux中的调试环境gdb

2.4 Linux中的调试环境gdb Linux C编程从入门到精通 从图2.1中可以看到,在实际开发过程中,程序除了语法正确之外,还必须符合设计者的逻辑意图.如果结果不正确,则可以通过相应的调试环境来跟踪调试,本小节将介绍Linux中最常用的gdb调试环境. Linux包含了一个gdb的调试程序,gdb是一个用来调试C程序的强大的调试器,它使程序员能在程序运行时观察程序的内部结构和内存的使用情况.gdb提供了以下一些功能. 监视程序中变量的值. 设置断点以使程序在指定的代码行上停止执行. 一行

《Linux C编程从入门到精通》——2.4 Linux中的调试环境gdb

2.4 Linux中的调试环境gdb 从图2.1中可以看到,在实际开发过程中,程序除了语法正确之外,还必须符合设计者的逻辑意图.如果结果不正确,则可以通过相应的调试环境来跟踪调试,本小节将介绍Linux中最常用的gdb调试环境. Linux包含了一个gdb的调试程序,gdb是一个用来调试C程序的强大的调试器,它使程序员能在程序运行时观察程序的内部结构和内存的使用情况.gdb提供了以下一些功能. 监视程序中变量的值. 设置断点以使程序在指定的代码行上停止执行. 一行行地执行代码. 在命令行上键入g

用gdb调试程序笔记: 以段错误(Segmental fault)为例

用gdb调试程序笔记: 以段错误(Segmental fault)为例[转] 1.背景介绍2.程序中常见的bug分类3.程序调试器(如gdb)有什么用4.段错误(Segmental fault)介绍5.gdb调试入门  一.背景介绍这个笔记主要介绍开源的程序调试器(gdb)的入门知识,目的是使unix/linux环境的编程新手能够快速学会使用gdb调试程序的方法,同时也是对我使用gdb的一个经验总结.本文假设你能使用简单的unix/linux命令并能用gcc(GNU C Compiler, GN

用GDB调试程序(一)

用GDB调试程序 GDB概述---- GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.所谓"寸有所长,尺有所短"就是这个道理. 一般来说,GDB主要帮忙你完成下面四个方面的功能:     1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序.    2.可让被调试的程序在你所指定的调置的断点处

越界访问 段错误-急急急,用gdb调试程序出现段错误

问题描述 急急急,用gdb调试程序出现段错误 出错的函数如下: NodeTp*Crt(int n,char b[],char jj[]) { int i; NodeTp *p,*h,*last; CreateNode(h); last=h; for(i=0;i { if(jj[i]=='2') { CreateNode(p); if(b[i]=='1') { p->pf[0]=a[i][0]; p->pf[1]=a[i][1]; p->pf[2]=a[i][2]; p->SA=0;

linux下控制帐户过期的方法

linux下控制帐户过期的方法: 企业里一般给无人管理的角色账户或开发人员临时需求等可以设定账户有效期,提升安全! 法一:添加用户时 useradd oldboy -e 01/28/12 或修改下面文件的参数: [root@oldboy skel]# grep EXPIRE /etc/default/useradd     EXPIRE= 实例7:指定参数执行useradd -D -e [root@oldboy ~]# date +%F 2012-01-25 [root@oldboy ~]# u

C#解决在控制台中输入Ctrl+Z的问题

本人在前几天做了一道题如下(在116行中用(int)cki.KeyChar==26解决了C#中在控制台捕捉Ctrl+Z): 解决的方法也是请教了老师,经老师调试过才得出的解决方法.(因在ConsoleKey的枚举中无Ctrl此键) 总结的心得是,单步调试方法确实是有效解决问题的路径. 1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 5 namespace 用CSharp实现DOS命令Copy_c