gdb调试方法
2008-06-05 13:48
351 查看
(转载)gdb中汇编调试
我觉得写的挺好!
我觉得写的挺好!
原名 gdb相关(gdb十分钟教程) 本文写给主要工作在Windows操作系统下而又需要开发一些跨平台软件的程序员朋友,以及程序爱好者。 GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 GDB中的命令固然很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调试工作。
j命令 回跳 ret 设置返回值 (例ret 0/ret -1) /add************************************/ 废话不多说,下面开始实践。 先给出一个示例用的小程序,C语言代码,简单的不能再简单了:
下面“gdb”命令启动GDB,将首先显示GDB说明,不管它:
下面使用“file”命令载入被调试程序 gdb-sample(这里的 gdb-sample 即前面 GCC 编译输出的可执行文件):
下面使用“r”命令执行(Run)被调试文件,因为尚未设置任何断点,将直接执行到程序结束:
再次使用“r”命令执行(Run)被调试程序:
上面最后一行信息为:下一条将要执行的源代码为“n = 1;”,它是源代码文件gdb-sample.c中的第19行。 下面使用“s”命令(Step)执行下一行代码(即第19行“n = 1;”):
既然已经执行了“n = 1;”,即给变量 n 赋值为 1,那我们用“p”命令(Print)看一下变量 n 的值是不是 1 :
下面我们分别在第26行、tempFunction 函数开头各设置一个断点(分别使用命令“b 26”“b tempFunction”):
再一次执行“c”命令(Continue),因为后面再也没有其它断点,程序将一直执行到结束:
有时候需要看到编译器生成的汇编代码,以进行汇编级的调试或跟踪,又该如何操作呢? 这就要用到display命令“display /i $pc”了(此命令前面已有详细解释):
并且以后程序每次中断都将显示下一条汇编指定(“si”命令用于执行一条汇编代码——区别于“s”执行一行C代码):
接下来我们试一下命令“b *<函数名称>”。 为了更简明,有必要先删除目前所有断点(使用“d”命令——Delete breakpoint):
下面使用命令“b *main”在 main 函数的 prolog 代码处设置断点(prolog、epilog,分别表示编译器在每个函数的开头和结尾自行插入的代码):
最后一个要介绍的命令是“q”,退出(Quit)GDB调试环境: (gdb) q The program is running. Exit anyway? (y or n) |
相关文章推荐
- GDB中应该知道的几个调试方法
- gdb调试命令及方法
- GDB中应该知道的几个调试方法
- Linux下gdb调试工具的使用方法
- GDB调试方法(下)
- GDB中应该知道的几个调试方法
- gdb调试多进程 gdb 多进程 多线程调试方法 gdb调试
- GDB中应该知道的几个调试方法
- [C++] gdb高级调试方法
- gdb调试方法备忘-文章很好,不得不转
- linux 下 Gdb 调试多进程的方法
- 部分GNU代码片 16、GDB调试多线程的方法
- 部分GNU代码片 17、GDB调试so的方法
- 如何使用gdb调试多进程 (attach方法)
- GDB中应该知道的几个调试方法
- 2012.3.1 linux学习笔记 GDB调试方法
- Android gdb调试方法
- 嵌入式环境下的gdb调试方法
- GDB中应该知道的几个调试方法
- gdb 调试coredump文件中烂掉的栈帧的方法