您的位置 首页 软件

运用GDB命令行调试器调试C/C++程序

没有调试器的情况下编写程序时最糟糕的状况是什么?编译时跪着祈祷不要出错?用血祭召唤恶魔帮你运行程序?或者在每一行代码间添加printf(test)语句来

没有调试器的情况下编写程序时最糟糕的情况是什么?编译时跪着祈求不要犯错?用血祭呼唤恶魔帮你运转程序?或许在每一行代码间增加printf(test)句子来定位错误点?如你所知,编写程序时不运用调试器的话是不便利的。幸亏,linux下调试仍是很便利的。大多数人运用的IDE都集成了调试器,但 linux 最著名的调试器是指令行方式的C/C++调试器GDB。但是,与其他指令行东西共同,DGB需求必定的操练才干彻底把握。这儿,我会告知你GDB的基本情况及运用办法。

装置GDB

大多数的发行版库房中都有GDB

Debian 或 Ubuntu

$ sudo apt-get install gdb

Arch Linux

$ sudo pacman -S gdb

Fedora,CentOS 或 RHEL:

$sudo yum install gdb

如果在库房中找不到的话,能够从官网中下载。

示例代码

当学习GDB时,最好有一份代码,着手试验。下列代码是我编写的简略比如,它能够很好的表现GDB的特性。将它复制下来并且进行试验——这是最好的办法。

#include #include int main(int argc, char **argv) { int i; int a=0, b=0, c=0; double d; for (i=0;i100;i++) { a++; if (i>97) d = i / 2.0; b++; } return 0; }

GDB的运用

首要最重要的,你需求运用编译器的 “-g“选项来编译程序,这样可执行程序才干经过GDB来运转。经过下列句子开端调试:

$ gdb -tui [可执行程序名]

运用”-tui“选项能够将代码显现在一个美丽的交互式窗口内(所以被称为“文本用户界面 TUI”),在这个窗口内能够运用光标来控制,一起鄙人面的GDB shell中输入指令。

现在咱们能够在程序的任何地方设置断点。你能够经过下列指令来为当时源文件的某一行设置断点。

break [行号]

或许为一个特定的函数设置断点:

break [函数名]

乃至能够设置条件断点

break [行号] if [条件]

例如,在咱们的示例代码中,能够设置如下:

break 11 if i >97

这样,程序循环97次之后停留在“a++”句子上。这样是十分便利的,避免了咱们需求手动循环97次。

最终但也是很重要的是,咱们能够设置一个“调查断点”,当这个被调查的变量发生变化时,程序会被中止。

watch [变量]

这儿咱们能够设置如下:

watch d

当d的值发生变化时程序会中止运转(例如,当i>97为真时)。

当设置断点后,运用run指令开端运转程序,或按如下所示:

r [程序的输入参数(如果有的话)]

gdb中,大多数的指令单词都能够简写为一个字母。

不出意外,程序会停留在11行。这儿,咱们能够做些风趣的工作。下列指令:

bt

回溯功用(backtrace)能够让咱们知道程序怎么抵达这条句子的。

info locals

这条句子会显现一切的局部变量以及它们的值(你能够看到,我没有为d设置初始值,所以它现在的值是恣意值)。

当然:

p [变量]

这个指令能够显现特定变量的值,而更进一步:

ptype [变量]

能够显现变量的类型。所以这儿能够确认d是double型。

已然现已到这一步了,我么无妨这么做:

set var [变量] = [新的值]

这样会掩盖变量的值。不过需求留意,你不能创立一个新的变量或改动变量的类型。咱们能够这样做:

set var a = 0

如其他优异的调试器相同,咱们能够单步调试:

step

运用如上指令,运转到下一条句子,有或许进入到一个函数里边。或许运用:

next

这能够直接运转下一条句子,而不进入子函数内部。

完毕测验后,删去断点:

delete [行号]

从当时断点持续运转程序:

continue

退出GDB:

quit

总归,有了GDB,编译时不必祈求天主了,运转时不必血祭了,再也不必printf(“test“)了。当然,这儿所讲的并不完好,并且GDB的功用远远不止于此。所以我强烈建议你自己愈加深化的学习它。我现在感兴趣的是将GDB整合到Vim中。一起,这儿有一个备忘录记录了GDB一切的指令行,以供查阅。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/ruanjian/322930.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部