- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
GDB调试的
GDB 是GNU 开源组织发布的一个强大的UNIX 下的程序调试工具。如果
你是在UNIX 平台下做软件,你会发现GDB 这个调试工具有比VC 、
BCB 的图形化调试器更强大的功能。同时GDB 也具有例如ddd 这样的图
形化的调试端。
一般来说,GDB 主要完成下面四个方面的功能:
(1)启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
(2)可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条
件表达式)
(3)当程序被停住时,可以检查此时你的程序中所发生的事。
(4)动态的改变你程序的执行环境。
兴趣是最好的老师,这里先整理总结一下在调试的过程中经常遇到的问题。
带着这些问题进行学习和实践可以有助于加深印象
(1)如何打印变量的值?(print var)
(2)如何打印变量的地址?(print var)
(3)如何打印地址的数据值?(print *address)
(4)如何查看当前运行的文件和行?(backtrace)
(5)如何查看指定文件的代码?(list file:N)
(6)如何立即执行完当前的函数,但是并不是执行完整个应用程序?
(finish)
(7)如果程序是多文件的,怎样定位到指定文件的指定行或者函数?(list
file:N)
(8)如果循环次数很多,如何执行完当前的循环?(until)
(9)多线程如何调试?(???)
[举例]
=============
*启动gdb
$gdb
这样可以和gdb 进行交互了。
*启动gdb ,并且分屏显示源代码:
$gdb -tui
这样,使用了-tui选项,启动可以直接将屏幕分成两个部分,上面显示源代
码,比用list 方便多了。这时候使用上下方向键可以查看源代码,想要命令
行使用上下键就用[Ctrl]n 和[Ctrl]p.
*启动gdb 调试指定程序app :
$gdb app
这样就在启动gdb 之后直接载入了app 可执行程序,需要注意的是,载入
的app 程序必须在编译的时候有gdb 调试选项,例如gcc -g app app.c,注
意,如果修改了程序的源代码,但是没有编译,那么在gdb 中显示的会是
改动后的源代码,但是运行的是改动前的程序,这样会导致跟踪错乱
的。
*启动程序之后,再用gdb 调试:
$gdb program PID
这里,program是程序的可执行文件名,PID是要调试程序的PID.如
果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程
ID 。gdb 会自动attach 上去,并调试他。program 应该在PATH 环境变量
中搜索得到。
*启动程序之后,再启动gdb 调试:
$gdb PID
这里,程序是一个服务程序,那么你可以指定这个服务程序运行时的进程
ID,PID是要调试程序的PID.这样gdb 就附加到程序上了,但是现在还
没法查看源代码,用file 命令指明可执行文件就可以显示源代码了。
**启动gdb 之后的交互命令:
交互命令支持[Tab]补全。
*显示帮助信息:
(gdb) help
*载入指定的程序:
(gdb) file app
这样在gdb 中载入想要调试的可执行程序app 。如果刚开始运行gdb 而不
是用gdb app 启动的话可以这样载入app 程序,当然编译app 的时候要加
入-g 调试选项。
*重新运行调试的程序:
(gdb) run
要想运行准备调试的程序,可使用run 命令,在它后面可以跟随发给该程
序的任何参数,包括标准输入和标准输出说明符(和 )和shell 通配符
(*、?、[、] )在内。
*修改发送给程序的参数:
(gdb) set args no
这里,假设我使用r yes设置程序启动参数为yes ,那么这里的set args 会
设置参数argv[1]为no 。
*显示缺省的参数列表:
(gdb) show args
*列出指定区域(n1 到n2 之间) 的代码:
(gdb) list n1 n2
这样,list 可以简写为l,将会显示n1 行和n2 行之间的代码,如果使用-tui 启
动gdb ,将会在相应的位置显示。如果没有n1 和n2 参数,那么就会默认
显示当前行和之后的10 行,再执行又下滚10 行。另外,list 还可以接函
数名。
一般来说在list 后面可以跟以下这们的参数:
linenum 行号。
+offset 当前行号的正偏移量。
-offset 当前行号的负偏移量。
filename:linenum 哪个文件的哪一行。
functi
您可能关注的文档
最近下载
- 物联网平台 ThingsBoard 教程.pdf VIP
- 1.1互动开放的世界 (课件)2025-2026道德与法治 九年级下册 统编版.pptx VIP
- 人教A版高中数学新教材中复习参考题的分析及使用现状研究.pdf
- 2024年卫生高级职称面审答辩(中医骨伤科)副高面审模拟试题及答案.docx
- 医院感染性疾病科护士面试题及参考答案结构化面试题.docx VIP
- DBJ33_T 1334-2024 《建筑施工承插型盘扣式钢管支撑架安全技术规程》 .docx VIP
- 水污染试题(5套)含答案3.docx VIP
- 班组长安全管理培训课件.ppt VIP
- 康复科室建设规划.pptx
- φ56组合锚绞机恒张力液压控制系统设计和分析.pdf VIP
原创力文档


文档评论(0)