gdb基础调试本机可执行文件

gdb基础调试本机可执行文件,第1张

gdb基础调试本机可执行文件,第2张

至于调试本机可执行文件(即不是Java*或perl等。)而言,用gdb是对的。Gdb可用于源代码级调试,也可用于跟踪没有源代码的程序或检查终止程序留下的核心文件。不幸的是,当您从未使用过它,或者有一段时间没有使用它时,它可能很难用于这些工作。

命令描述

文件加载程序

设置断点

r运行

继续

s步(线)

si步骤(机器指令)

n下一步(单步执行函数调用)

完成运行,直到函数返回

显示所有寄存器

显示特定的寄存器

l列表来源

p显示值

set args设置命令行参数

要使用gdb作为源代码级调试器,确保编译程序时包含调试符号;这是gcc的-g选项。要启动gdb,您可以通过输入gdb programname(本例中为gdb simple)来完成,或者单独运行gdb本身并用file命令加载可执行文件。

要设置基本断点,可以在函数名或行号处中断。比如b 27会在当前文件的第27行设置断点。使用函数名有两种方法:b main中断函数main中的第一行可执行代码,b *main在main的入口地址设置断点(如果打算单步执行函数的每条指令,这很有用)。

一旦设置了第一个断点,就可以使用run或r启动程序并运行到第一个断点。您还可以运行程序而不中断任何断点,如果您不知道程序在哪里崩溃,这是很有帮助的。当您遇到断点C或continue时,程序将继续执行,直到遇到下一个断点。

单步调试源代码行。单步执行指令(si)单步执行机器代码行(当您单步执行优化的代码时,si指令可能特别有用,这将在后面描述)。Next的工作方式类似于step,但是它不跟踪传入的函数调用(如果您确实错误地跟踪了传入的函数调用,您可以使用finish来完成函数,然后在函数返回的地方中断)。

独立的info寄存器(i r)本身显示所有寄存器的值(浮点值除外),但是您可以指定一个寄存器名称。在31位系统中,通用寄存器被命名为gpr0、gpr1、gpr2等。在64位系统上,它们被命名为r0、r1、r2等等。浮点寄存器遵循相同的命名约定:fpr0、fpr1、fpr2等。在31位系统上;F0、f1、f2等。在64位系统上。

“L”列出了程序当前停止位置周围的源代码。您还可以指定要开始列出的代码的行号或要列出的函数的名称。打印允许你打印程序中任何变量的值。print的优点之一是它会为你获取一个结构中的所有值,或者允许你直接引用该结构的一部分:

断点1,simple.c:30处的main()

30 boink.boik = & r1

(gdb)打印银行

= {boik = 0x0}

(gdb)打印boink.boik

= (int *) 0x0

最后,set args为程序设置命令行参数。您也可以在运行时指定命令行参数,但是set args将使参数在多次运行中有效。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » gdb基础调试本机可执行文件

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情