ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:20.11KB ,
资源ID:4254281      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4254281.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(GDB不完全手册.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

GDB不完全手册.docx

1、GDB不完全手册GDB不完全手册巫山霏云使用GDB调试程序必须在被调试程序中间加入调试信息,Free Pascal和GCC都是使用的 g 选项,在命令行下使用如下方法:fpc g temp.pas这样编译出来的程序就带有编译信息咯,可以直接被GDB认出来。p.s. fpc的编译选项中文解释我已经在DRS,OIBH上面公布了,有兴趣的可以去看看,也可以去我的Website查找。在FP的IDE中可以在Option菜单下的mode中间选择Debug模式,然后编译程序,即可使编译后的程序带有调试信息。需要说明的是没人情况下直接按F9编译出来的程序并没有带调试信息,但是当你按F7调试程序时,FP会重新按

2、照编译模式编译一次代码,从而使你可以编译程序。直接使用GDB有两种形式,一种从IDE里面的DeBug菜单中GDB Window进入GDB界面。这样可以直接使用GDB,但是仍然不是很稳定。我不是特别推荐,当然这个也有好处,和IDE结合比较紧密。比较好的方法是在命令行下面输入gdb temp.exe直接进入GDB,如下:D:fpcbinwin32fpc.exe g E:prodataprogramtemptemp.pasFree Pascal Compiler version 2.0.2 2005/12/27 for i386Copyright (c) 1993-2005 by Florian K

3、laempflTarget OS: Win32 for i386Compiling E:prodataprogramtemptemp.pasLinking E:prodataprogramtemptemp.exe99 Lines compiled, 0.1 secD:fpcbinwin32gdb.exe E:prodataprogramtemptemp.exeGNU gdb 6.2.1Copyright 2004 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public Licen

4、se, and you arewelcome to change it and/or distribute copies of it under certain conditions.Type show copying to see the conditions.There is absolutely no warranty for GDB. Type show warranty for details.This GDB was configured as i686-pc-cygwin.(gdb)这样便进入了GDB调试环境。当然你也可以进入GDB后用file再装入要调试的程序:(gdb)fil

5、e temp.exeReading symbols from /cygdrive/e/prodata/program/temp/temp.exe.done.退出呢?quit拉,缩写就是q拉。小心别随便输入哦,不然你设置的断点监视什么的就没有咯,下次就会比较麻烦的咯。(gdb)是提示符,你也可以更改的,使用 set prompt userdefine厄,我比较喜欢GDB:(gdb) set prompt GDBGDB我们可以设置成我们喜欢的提示符,这样看起来更加好看些。进入后你可以查看当前的语言,GDB能够自动识别你所用的编程语言,当然也有可能不能识别,这时你可以设置一下:GDBshow lan

6、guageThe current source language is auto; currently pascal.GDBset language pascalGDBshow languageThe current source language is pascal.GDBset language cGDBshow languageThe current source language is c.GDBset language pascalGDBshow languageThe current source language is pascal.GDB能够自动的识别命令的缩写,这意味着我们可

7、以不必输入冗长的代码,而只需输入部分缩写,例如list可以缩写成l,break可以缩写成b,这样的简写还有很多。你可以在GDB中尝试输入,如果GDB不能自动识别,也会给出所有的可能,然后让你选择。List指令是列出代码的意思:GDBlist1 2 ID:bethune13 LANG: PASCAL4 PROG: beads5 6 Var7 dat:Array1.350Of Char;8 fin,fout:Text;9 count,zoo:Word;10GDBl11 Procedure Init;12 Var13 i:Word;14 Begin15 Assign(fin,beads.in);16

8、 Reset(fin);17 Readln(fin,count);18 FillChar(dat,sizeof(dat),#0);19 For i:=1 To count Do Read(fin,dati);20 Close(fin);List默认列出10行代码,你也可以指定列出哪10行,用list n,这样n上下5行都会列出来,list 则显示上次显示的10行的上面的10行,具体看下面的例子:GDBl57 ko:Boolean;58 i:Word;59 Begin60 ko:=True;61 For i:=1 To count Do62 If datibThen ko:=False;63 I

9、f ko Then Exit(True);64 ko:=True;65 For i:=1 To count Do66 If datiwThen ko:=False;GDBl67 If ko Then Exit(True);68 ko:=True;69 For i:=1 To count Do70 If datirThen ko:=False;71 same:=ko;72 End;7374 Procedure main;75 Var76 i,tmp:Word;GDBl -57 ko:Boolean;58 i:Word;59 Begin60 ko:=True;61 For i:=1 To coun

10、t Do62 If datibThen ko:=False;63 If ko Then Exit(True);64 ko:=True;65 For i:=1 To count Do66 If datiwThen ko:=False;Run命令可以让程序运行,可以简写为r。不过我们是来调试的,当然不要直接运行拉,调试就少不了断点,断点使用b即break来设置,用法是b 行号,譬如 b 12,如果没有行号就是在当前设置断点,这个在进入栈调试时很有用。也可以设置在进入某一个函数时停止,如b find,注意:主程序的断点名称是main,和C里面的一样的名字!Break也有高级应用,如可以条件判断Bre

11、ak if 例如:break if x=1当x=1时,程序会自动暂停!Break find if i=5当find函数中的i=5时,程序会自动暂停。我设置了断点如何查看呢?使用info break就会列出所有的断点详细信息:GDBb 62Breakpoint 1 at $4012c4: file temp.pas, line 62.GDBb mainBreakpoint 2 at $40149c: file temp.pas, line 97.GDBinfo bNum Type Disp Enb Address What1 breakpoint keep y $004012c4 in SAME

12、 at temp.pas:622 breakpoint keep y $0040149c in main at temp.pas:97设置了断点我停是停下来咯,可是我还要继续运行程序啊!当然,我们可以使用c即continue来继续运行程序。厄,设置错误了怎么办?退出重新来呗!嘿嘿,当然不要那么麻烦拉!Del即可!用法:del n (n为断点号)。那如果我要暂时使某个断点不可用怎么办啊?disable n(n为断点号)enable n就是恢复断点的使用拉! GDBdisable 1GDBinfo bNum Type Disp Enb Address What1 breakpoint keep n

13、 $004012c4 in SAME at temp.pas:622 breakpoint keep y $0040149c in main at temp.pas:97GDBenable 1GDBinfo bNum Type Disp Enb Address What1 breakpoint keep y $004012c4 in SAME at temp.pas:622 breakpoint keep y $0040149c in main at temp.pas:97GDBdel 1GDBinfo bNum Type Disp Enb Address What2 breakpoint k

14、eep y $0040149c in main at temp.pas:97厄,断点我是知道使用了,可是只有断点也没有用啊!我又不能查看变量的值,怎么弄啊。呵呵,这个当然要有的拉print x(x为变量名称)。我们先启动程序:GDBRStarting program: /cygdrive/e/prodata/program/temp/temp.exeBreakpoint 2, main () at temp.pas:9797 Init;厄,还得补充点知识,我们在FP IDE中间按F7,F8,时是步进,GDB中F7是什么指令呢?Step!即s n(n 表示前进几步)F8是n 即next,大家自己

15、试试吧。和S一样的属性哦。GDBsINIT () at temp.pas:1515 Assign(fin,beads.in);GDBs16 Reset(fin);GDBs17 Readln(fin,count);GDBprint count$1 = 0GDBs18 FillChar(dat,sizeof(dat),#0);GDBprint count$2 = 29GDBl13 i:Word;14 Begin15 Assign(fin,beads.in);16 Reset(fin);17 Readln(fin,count);18 FillChar(dat,sizeof(dat),#0);19 F

16、or i:=1 To count Do Read(fin,dati);20 Close(fin);21 End;22GDBn19 For i:=1 To count Do Read(fin,dati);GDBn20 Close(fin);GDBn21 End;GDBnmain () at temp.pas:9898 main;Print 使用还是很方便的,我们可以用来输出一个表达式的值,并输出下一行的代码。与P类似的是echo,大家可以输入help echo了解。另外有个output只输出值,而不输出下一行代码,而且不把打印的值记录在历史中间。Display 可以设置一些自动显示的变量,当程序

17、停住时,或是在但不跟踪时,这些变量会自动显示,用法:Display Expr为一个表达式。如果进入一个函数了,我想直接退出怎么办啊,老在里面转很晕呢,OK,没有问题,你可以使用u即until来返回,它将运行到函数返回,除非中间还有别的断点。可是我想用IDE中间的Watch功能呢,厄.当然还是watch拉,而且远比IDE中间的功能强大!Watch exp exp为表达式,我们可以简单的就只要监视变量的值的改变就有咯。而且,当你的程序运行时,倘若监视的变量的值发生了改变,程序会自动暂停下来,并输出值和下一行代码。这样你可以很方便的查看咯!怎么样,比IDE中间的功能强大吧,GDBwatch iHar

18、dware watchpoint 3: IGDBwatch countHardware watchpoint 4: COUNTGDBinfo watchNum Type Disp Enb Address What1 breakpoint keep y $004012c4 in SAME at temp.pas:62 breakpoint already hit 1 time2 breakpoint keep y $0040149c in main at temp.pas:97 breakpoint already hit 1 time3 hw watchpoint keep y I4 hw w

19、atchpoint keep y COUNTGDBinfo breakNum Type Disp Enb Address What1 breakpoint keep y $004012c4 in SAME at temp.pas:62 breakpoint already hit 1 time2 breakpoint keep y $0040149c in main at temp.pas:97 breakpoint already hit 1 time3 hw watchpoint keep y I4 hw watchpoint keep y COUNTGDBcContinuing.Prog

20、ram received signal SIGTRAP, Trace/breakpoint trap.$00401070 in INIT () at temp.pas:1717 Readln(fin,count);GDBprint count$5 = 29GDBcContinuing.Breakpoint 1, SAME () at temp.pas:6262 If datibThen ko:=False;GDBp i$6 = 1GDBcContinuing.Breakpoint 1, SAME () at temp.pas:6262 If datibThen ko:=False;GDBp i

21、$7 = 2删除监视和删除断点一样的方法,直接delete n(n为编号)。GDBinfo bNum Type Disp Enb Address What1 breakpoint keep y $004012c4 in SAME at temp.pas:62 breakpoint already hit 3 times2 breakpoint keep y $0040149c in main at temp.pas:97 breakpoint already hit 1 time4 hw watchpoint keep y COUNTGDBd 1GDBinfo bNum Type Disp E

22、nb Address What2 breakpoint keep y $0040149c in main at temp.pas:97 breakpoint already hit 1 time4 hw watchpoint keep y COUNT另外还有rwatch和awatch,一个是当表达式被读时暂停程序,一个是当表达式被读或写时暂停程序。感觉要的功能差不多了,但是我发现我的程序运行过头了,我想重新运行,怎么办啊?晕死,这还不简单啊,看见那个X咯么?点击就有咯啊!厄,其实可以很简单的,输入k即kill就可以把调试的程序进程cut咯!而且设置的断点什么全部保存咯。不知道程序什么状态?很简

23、单嘛,输入info program 就会显示程序当前状态,运行还是ready。GDBkGDBinfo programThe program being debugged is not being run.好拉,不完全手册到这里就基本结束咯,已经足够我们应付调试程序咯。下面我们再次回顾GDB的常用命令:命令缩写用法作用、备注HelpHH command显示命令的帮助,不懂就要多多使用File无File filename装入要调试的可执行文件InfoIInfo optionoption可以是program,break.RunRR运行要调试的程序StepSS n步进,相当于F7,n为步进次数Next

24、NN n下一步,相当于F8,n为下一步的次数ContinueCC继续执行程序BreakBB optionOption 可以是num或者functioonWatchWW exp监视表达式的值KillKK结束当前调试的程序PrintPP exp打印表达式的值OutputOO exp同print,但是不输出下一行的语句EchoEE e同printPwdPwdPwd显示当前路径,用过linux的人都知道info watch|break显示断点和监视DeleteDD num删除编号为num的断点和监视Show language显示当前语言Set language pascal设置代码语言Disable无

25、Disable n编号为n的断点暂时无效Enable无Enable n 与disable 相反Diplay无Display expr暂停,步进时自动显示表达式的值附我的源代码:ID:bethune1LANG: PASCALPROG: beads/尽管完成咯,可是还不是最佳的Var dat:Array1.350Of Char; fin,fout:Text; count,zoo:Word;Procedure Init; Var i:Word; Begin Assign(fin,beads.in); Reset(fin); Readln(fin,count); FillChar(dat,sizeof

26、(dat),#0); For i:=1 To count Do Read(fin,dati); Close(fin); End;Function find(n:Word):Word; Var k,ok,nk:Word; ch,tmp:Char; did:Boolean; Begin k:=n; ch:=datk; tmp:=ch; did:=False; Repeat Inc(k); If k=n Then Exit(count); If k=count+1 Then If not did Then Begin k:=1;did:=True;End Else Break; ch:=datk;

27、Until (chtmp)And(chw); If tmp=bThen tmp:=r Else tmp:=b; If not did Then ok:=k-n Else ok:=count-n+k; nk:=k; k:=n; did:=False; Repeat Dec(k); If k=nk Then Break; If k=0 Then If not did Then Begin k:=count;did:=True;End Else Break; ch:=datk; Until (chtmp)And(chw); If not did Then Inc(ok,n-k) Else Inc(o

28、k,n+count-k); If ok=count Then Inc(ok); Exit(ok); End;Function same:Boolean; Var ko:Boolean; i:Word; Begin ko:=True; For i:=1 To count Do If datibThen ko:=False; If ko Then Exit(True); ko:=True; For i:=1 To count Do If datiwThen ko:=False; If ko Then Exit(True); ko:=True; For i:=1 To count Do If dat

29、irThen ko:=False; same:=ko; End;Procedure main; Var i,tmp:Word; Begin zoo:=0; If same Then Begin zoo:=count;Exit;End; For i:=1 To count Do Begin tmp:=0; If datiwThen tmp:=find(i); If tmpzoo Then zoo:=tmp-1; End; End;Procedure print; Begin Assign(fout,beads.out); Rewrite(fout); Writeln(fout,zoo); Close(fout); End;Begin Init; main; print;End.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1