欢迎来到天天文库
浏览记录
ID:9265994
大小:31.92 KB
页数:23页
时间:2018-04-25
《如何使用gdb调试工具》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、如何使用gdb调试工具 GDB概述GDB是GNU开源组织发布的一个强大的*NIX下的程序调试工具。本文是以前从网上找到的资料中整理出来的,很多内容来自网络,在此对原作者表示感谢。一般来说,GDB主要帮忙你完成下面四个方面的功能: 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2、可让被调试的程序在你所指定的断点处停住。(断点可以是条件表达式) 3、当程序被停住时,可以检查此时你的程序中所发生的事。 4、动态的改变你程序的执行环境。从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB
2、这个调试工具的强大,是*unix下软件开发所必须的工具。 调试示例按照下面的例子跑一遍便可以对gdb有一个感性的认识。源程序:test.c 1#include 2 3intfunc(intn) 4{ 5 intsum=0,i; 6 for(i=0;i3、6 inti; 17 longresult=0; 18 for(i=1;i<=100;i++) 19 { 20 result+=i; 21 } 22 23 printf("result[1-100]=%d",result); 24 printf("result[1-250]=%d",func(250)); 25}编译生成执行文件:(Debian下) $gcc-gtset.c-otest使用GDB调试:4、$gdbtst<----------启动GDBGNUgdb5.1.1Copyright2002FreeSoftwareFoundation,Inc.GDBisfreesoftware,coveredbytheGNUGeneralPublicLicense,andyouarewelcometochangeitand/ordistributecopiesofitundercertainconditions.Type"showcopying"toseetheconditions.ThereisabsolutelynowarrantyforGDB.Type"showwarran5、ty"fordetails.ThisGDBwasconfiguredas"i386-suse-linux"...(gdb)l <--------------------l命令相当于list,从第一行开始例出原码。1 #include23 intfunc(intn)4 {5 intsum=0,i;6 for(i=0;i6、}10 returnsum;(gdb) <--------------------直接回车表示,重复上一次命令11 }121314 main()15 {16 inti;17 longresult=0;18 for(i=1;i<=100;i++)19 {20 result+=i; (gdb)break16 <--------------------设置断点,7、在源程序第16行处。Breakpoint1at0x8048496:filetst.c,line16.(gdb)breakfunc<--------------------设置断点,在函数func()入口处。Breakpoint2at0x8048456:filetst.c,line5.(gdb)infobreak<--------------------查看断点信息。NumType DispEnbAddress What1 breakpoint keepy 0x08048496inmainattst.c:16
3、6 inti; 17 longresult=0; 18 for(i=1;i<=100;i++) 19 { 20 result+=i; 21 } 22 23 printf("result[1-100]=%d",result); 24 printf("result[1-250]=%d",func(250)); 25}编译生成执行文件:(Debian下) $gcc-gtset.c-otest使用GDB调试:
4、$gdbtst<----------启动GDBGNUgdb5.1.1Copyright2002FreeSoftwareFoundation,Inc.GDBisfreesoftware,coveredbytheGNUGeneralPublicLicense,andyouarewelcometochangeitand/ordistributecopiesofitundercertainconditions.Type"showcopying"toseetheconditions.ThereisabsolutelynowarrantyforGDB.Type"showwarran
5、ty"fordetails.ThisGDBwasconfiguredas"i386-suse-linux"...(gdb)l <--------------------l命令相当于list,从第一行开始例出原码。1 #include23 intfunc(intn)4 {5 intsum=0,i;6 for(i=0;i6、}10 returnsum;(gdb) <--------------------直接回车表示,重复上一次命令11 }121314 main()15 {16 inti;17 longresult=0;18 for(i=1;i<=100;i++)19 {20 result+=i; (gdb)break16 <--------------------设置断点,7、在源程序第16行处。Breakpoint1at0x8048496:filetst.c,line16.(gdb)breakfunc<--------------------设置断点,在函数func()入口处。Breakpoint2at0x8048456:filetst.c,line5.(gdb)infobreak<--------------------查看断点信息。NumType DispEnbAddress What1 breakpoint keepy 0x08048496inmainattst.c:16
6、}10 returnsum;(gdb) <--------------------直接回车表示,重复上一次命令11 }121314 main()15 {16 inti;17 longresult=0;18 for(i=1;i<=100;i++)19 {20 result+=i; (gdb)break16 <--------------------设置断点,
7、在源程序第16行处。Breakpoint1at0x8048496:filetst.c,line16.(gdb)breakfunc<--------------------设置断点,在函数func()入口处。Breakpoint2at0x8048456:filetst.c,line5.(gdb)infobreak<--------------------查看断点信息。NumType DispEnbAddress What1 breakpoint keepy 0x08048496inmainattst.c:16
此文档下载收益归作者所有