`
nanjingjiangbiao_T
  • 浏览: 2587435 次
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

GDB调试程序6--查看源程序

 
阅读更多

用GDB调试程序(完全手册)

http://blog.chinaunix.net/u2/87718/showart_1726531.html

查看源程序

一、显示源代码

GDB 可以打印出所调试程序的源代码,当然,在程序编译时一定要加上-g的参数,把源程序信息编译到执行文件中。不然就看不到源程序了。当程序停下来以后, GDB会报告程序停在了那个文件的第几行上。你可以用list命令来打印程序的源代码。还是来看一看查看源代码的GDB命令吧。

list <linenum>
显示程序第linenum行的周围的源程序。

list <function>
显示函数名为function的函数的源程序。

list
显示当前行后面的源程序。

list -
显示当前行前面的源程序。

一般是打印当前行的上5行和下5行,如果显示函数是是上2行下8行,默认是10行,当然,你也可以定制显示的范围,使用下面命令可以设置一次显示源程序的行数。

set listsize <count>
设置一次显示源代码的行数。

show listsize
查看当前listsize的设置。


list命令还有下面的用法:

list <first>, <last>
显示从first行到last行之间的源代码。

list , <last>
显示从当前行到last行之间的源代码。

list +
往后显示源代码。


一般来说在list后面可以跟以下这们的参数:

<linenum> 行号。
<+offset> 当前行号的正偏移量。
<-offset> 当前行号的负偏移量。
<filename:linenum> 哪个文件的哪一行。
<function> 函数名。
<filename:function> 哪个文件中的哪个函数。
<*address> 程序运行时的语句在内存中的地址。

二、搜索源代码

不仅如此,GDB还提供了源代码搜索的命令:

forward-search <regexp>
search <regexp>
向前面搜索。

reverse-search <regexp>
全部搜索。

其中,<regexp>就是正则表达式,也主一个字符串的匹配模式,关于正则表达式,我就不在这里讲了,还请各位查看相关资料。

三、指定源文件的路径

某些时候,用-g编译过后的执行程序中只是包括了源文件的名字,没有路径名。GDB提供了可以让你指定源文件的路径的命令,以便GDB进行搜索。

directory <dirname ... >
dir <dirname ... >
加一个源文件路径到当前路径的前面。如果你要指定多个路径,UNIX下你可以使用“:”,Windows下你可以使用“;”。
directory
清除所有的自定义的源文件搜索路径信息。

show directories
显示定义了的源文件搜索路径。

四、源代码的内存

你可以使用info line命令来查看源代码在内存中的地址。info line后面可以跟“行号”,“函数名”,“文件名:行号”,“文件名:函数名”,这个命令会打印出所指定的源码在运行时的内存地址,如:

(gdb) info line tst.c:func
Line 5 of "tst.c" starts at address 0x8048456 <func+6> and ends at
0x804845d <func+13>.

还有一个命令(disassemble)你可以查看源程序的当前执行时的机器码,这个命令会把目前内存中的指令dump出来。如下面的示例表示查看函数func的汇编代码。

(gdb) disassemble func
Dump of assembler code for function func:
0x8048450 <func>: push %ebp
0x8048451 <func+1>: mov %esp,%ebp
0x8048453 <func+3>: sub $0x18,%esp
0x8048456 <func+6>: movl $0x0,0xfffffffc(%ebp)
0x804845d <func+13>: movl $0x1,0xfffffff8(%ebp)
0x8048464 <func+20>: mov 0xfffffff8(%ebp),%eax
0x8048467 <func+23>: cmp 0x8(%ebp),%eax
0x804846a <func+26>: jle 0x8048470 <func+32>
0x804846c <func+28>: jmp 0x8048480 <func+48>
0x804846e <func+30>: mov %esi,%esi
0x8048470 <func+32>: mov 0xfffffff8(%ebp),%eax
0x8048473 <func+35>: add %eax,0xfffffffc(%ebp)
0x8048476 <func+38>: incl 0xfffffff8(%ebp)
0x8048479 <func+41>: jmp 0x8048464 <func+20>
0x804847b <func+43>: nop
0x804847c <func+44>: lea 0x0(%esi,1),%esi
0x8048480 <func+48>: mov 0xfffffffc(%ebp),%edx
0x8048483 <func+51>: mov %edx,%eax
0x8048485 <func+53>: jmp 0x8048487 <func+55>
0x8048487 <func+55>: mov %ebp,%esp
0x8048489 <func+57>: pop %ebp
0x804848a <func+58>: ret
End of assembler dump.

转载声明: 本文转自 http://blog.chinaunix.net/u2/87718/showart_1726582.html

分享到:
评论

相关推荐

    GDB调试程序-入门级

    详细并且全面的GDB入门,易理解。 内容: 一、 GDB概述 二、系统认识GDB 三、GDB的命令概貌 四、GDB中运行UNIX的shell程序 ...八、查看源程序 九、查看运行时数据 十、查看寄存器 十一、改变程序的执行

    GDB调试完整文档

    十二、查看源程序 一、显示源代码 二、搜索源代码 三、指定源文件的路径 四、源代码的内存 十三、查看运行时数据 一、表达式 二、程序变量 三、数组 四、输出格式 五、查看内存 六、自动显示 七、设置...

    UC-linuxGDB调试器

    GDB(GNU Source-Level Debugger)是Linux下调试C/C++源程序的工具。 运行gdb即可启动GDB: [root@localhost zhang]# gdb↙ GDB的提示符为(gdb),在提示符后输入quit或q命令退出。 启动GDB时还可以载入调试的程序名,...

    linux的C++程序gdb调试方法

    GDB(GNU Debugger)是一个功能强大的Unix下的程序调试工具。以下是使用GDB进行调试的基本方法和步骤: 启动GDB 使用gdb命令后跟上你想要调试的程序名来启动GDB。例如: bash gdb myprogram 设置断点 在程序的特定...

    Linux下简单GDB调试教程

    •kill 终止正在调试的程序. •list 列出产生执行文件的源代码的一部分. •next 执行一行源代码但不进入函数内部. •step 执行一行源代码而且进入函数内部. •run 执行当前被调试的程序 •break 在代码里设置断点, ...

    gdb调试器的使用 有助于调试程序

    示和查找程序源代码:list 执行程序和获得帮助:run、help 设置和管理断点:break、info breakpoints、disable、delete、clear 查看和设置变量的值:print、whatis、set 控制程序的执行:continue、kill、next、step

    使用GDB调试linux软件

    gdb 可以让您查看程序的内部结构、打印变量值、设置断点,以及单步调试源代码。它是功能极其强大的工具,适用于修复程序代码中的问题。在本文中,David Seager 将尝试说明 gdb 有多棒,多实用。

    GDB手册(中文整理)

    用GDB调试程序 一:GDB概述 二:一个调试示例 三:使用GDB 四:GDB的命令概貌 五:GDB中运行UNIX的shell程序 六:在GDB中运行程序 七:调试已运行的程序 八:暂停 / 恢复程序运行 九:查看栈信息 十:查看源程序 ...

    Arduino 的源级调试器 - Arduino Uno 中使用 的 Atmega328微控制器的 GDB 存根_C语言_代码_

    Arduino 的源代码级调试器 由 Jan Dolinay 创建,2015 年 6 月 适用于 Arduino Uno、Nano、Pro Mini (ATmega328)、Arduino Mega 以及 AtMega1284(P)。 ARDUINO 图书馆笔记 要将此调试器用作 Arduino 库,请转到 ...

    GDB使用手册.CHM

    用于在Linux下调试C语言,C++等程序.其中包括: GDB常用命令详解 GDB的使用方法 GDB中运行UNIX的shell程序 查看运行时数据 处理源程序 调试已运行的程序 ...用GDB调试程序示例 解说详细,来源于网络,经过本人细心整理.

    gdb6.4.tar.gz

    gdb6.4的源代码,将其复制在Linux操作系统中,解压即可获得源代码,编译即可调试程序。

    使用 GDB 调试 Linux 软件

    gdb 可以让您查看程序 的内部结构、打印变量值、设置断点,以及单步调试源代码。它是功能极其强大的工具,适用 于修复程序代码中的问题。在本文中,David Seager 将尝试说明 gdb 有多棒,多实用。

    浅析C语言调试器GDB和LLDB的使用方法

    调试信息包含:指令地址、对应源代码及行号 指令完成后,回调 LINUX使用GDB MAX使用LLDB 使用说明 // 开始调试testlib程序 lldb testlib // 在main函数的位置打断点 b main dwarfdump testlib 可以直接查看...

    edk2-gdb-server:开源EDK2 GDB服务器

    例如,您可以在具有Python3的任何基于ARM的SoC上运行此程序,并使用Linux USB OTG调试端口小工具通过USB2.0 EHCI调试端口将USB OTG端口直接连接到目标。 然后,您可以从构建框等远程连接到该目标。 这还允许您调整...

    Linux开发入门:使用gdb调试C/C++入门教程

    GDB(GNU symbolic debugger)简单地说就是一个调试工具。...在你调试你的程序之前,当你编译你的源程序时,不要忘了 -g 选项或其它相应的选项,才能将调试信息加到你要调试的程序中。例如:gcc -g -o hello hello.c 。

    嵌入式系统/ARM技术中的Gdb/Armulator 源代码分析

    作者Email: Anti_chen2000@sohu.com 摘要 Gdb/Armulator 是Gdb自带的arm7模拟器,是调试arm程序的一个好工具.而了解它的原码结构对扩展它的IO功能有重要意义.本文介绍了从Armulator的启动到其内部运作和IO扩展的大...

    嵌入式Linux视频教程全套2011新版-国嵌嵌入式培训下载地址

    -国嵌应用班-1-2(GDB程序调试).avi -国嵌应用班-1-3(makefile工程管理).avi -国嵌应用班-1-4(必修实验).avi -第2天(文件时间编程) -国嵌应用班-2-1(系统调用方式访问文件).avi -国嵌应用班-2-2(库函数...

    avatar-gdbstub:GDB存根,允许调试嵌入式设备

    这是非常小的GDB存根实现的源代码。 存根应该通过GDB串行协议或自定义协议(Avatar)与主机GDB通信。 根据串行线的使用方式,您需要一个Multiplexer来为您设置环境并发送所需的任何东西,直到GDB存根运行。 适应您...

    mini2440国嵌视频教程+课件+工具+软件+镜像+教程源码下载地址

    -国嵌应用班-1-2(GDB程序调试).avi -国嵌应用班-1-3(makefile工程管理).avi -国嵌应用班-1-4(必修实验).avi -第2天(文件时间编程) -国嵌应用班-2-1(系统调用方式访问文件).avi -国嵌应用班-2-2(库函数...

    ddd--linux下著名的调试工具

    GNU DDD(Data Display Debugger)是命令行调试程序,如GDB、DBX、WDB、Ladebug、JDB、XDB、Perl Debugger或Python Debugger的可视化图形前端。它特有的图形数据显示功能(Graphical Data Display)可以把数据结构按照...

Global site tag (gtag.js) - Google Analytics