没有调试器的情况下编写程序时最糟糕的情况是什么?编译时跪着祈求不要犯错?用血祭呼唤恶魔帮你运转程序?或许在每一行代码间增加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; i<100; i++)
{
a++;
if(i>97)
d = i /2.0;
b++;
}
return0;
}
GDB的运用
首要最重要的,你需求运用编译器的 “-g“选项来编译程序,这样可执行程序才干经过GDB来运转。经过下列句子开端调试:
$ gdb -tui [可执行程序名]
运用”-tui“选项能够将代码显现在一个美丽的交互式窗口内(所以被称为“文本用户界面 TUI”),在这个窗口内能够运用光标来控制,一起鄙人面的GDB shell中输入指令。
现在咱们能够在程序的任何地方设置断点。你能够经过下列指令来为当时源文件的某一行设置断点。
break[行号]
或许为一个特定的函数设置断点:
break[函数名]
乃至能够设置条件断点
break[行号]if[条件]
例如,在咱们的示例代码中,能够设置如下:
break11if i >97
这样,程序循环97次之后停留在“a++”句子上。这样是十分便利的,避免了咱们需求手动循环97次。