首页 > 网络文摘 > 正文
#include <stdio.h>#include <stdlib.h> 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++; } return 0;}
首先最重要的,你需要使用编译器的 “-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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
可爱穿搭很重要
工藤美樱写真集
斯米兰海水是真不错
海边想拍氛围照
海岛度假
甜妹 ootd 穿搭
在大的理日就子是在海洱边发发呆
7080后儿时集体回忆插画
西安子午峪满山的白杜鹃太美了
职业模特拍摄省事很多
东北花袄
1927年第五次索尔维物理会议
专业摄影师视野是与生俱来的
全球最贵 劳斯莱斯SUV或定名“库利南”
曝快播公司现大量警察 员工只进不出
60后大叔成功求婚90后萝莉
周杰伦的新婚妻子昆凌
冷艳与纯真的美女艺术照
模特精选
亚太比基尼精选
非礼勿视!日本如此变态的成人文化
网红赵喵喵
任由男子手触侧胸 辣妹参加IT公司年会走红
深圳宝安机场一奔驰失控撞向行人 致9死23伤
本拉登谋划911恐怖袭击前"老巢"曝光
李嘉诚年轻中年时照片
老人被轧躺倒路中间 9中学生合力救人将其送医
长春武僧严寒冬日苦练功夫
印度诞生罕见双头女婴 “第二头颅”长在肚子上
马斯克:只要自动驾驶足够给力,特斯拉可以零利润卖车
乌克兰芭比娃美女
中国美女城市排行:哈尔滨第一 北京未入榜
中戏艺考美女PK传媒艺考美女 都百里挑一
车模精选
广西桂平石龙镇的5月22日车祸事故