- 1、本文档共44页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7-嵌入式系统的调试
嵌入式系统开发原理与实践 陈文智 等 编著 提纲 利用GDB进行本地调试 利用GDB进行远程调试 GDB介绍 GDB是GNU C自带的调试工具,使用GDB可以完成下面这些任务: 运行程序,可以给程序加上所需的调试任何条件 在给定的条件下让程序停止 在设置的断点处(断点可以是条件表达式) 检查程序停止时的运行状态 当程序被停住时,可以检查此时你的程序中所发生的事。 通过改变一些数据,可以更快地改正程序的错误 动态的改变程序的执行环境 调试前的准备工作 要调试C/C++的程序,首先 在编译时,我们必须要把调试信息加到可执行文件中。使用编译器( cc/gcc/g++)的 -g 参数可以做到这一点。如: $gcc -g hello.c -o hello 使用GDB 启动GDB 在命令行上键入 gdb 并按回车键 带文件参数 $gdb fname 例 键入gdb gdb_test命令来启动GDB并载入程序 gdb_test,命令行进入了GDB模式。 一:列文件清单 ?1. list ?(gdb) list line1,line2 ?二:执行程序 ?要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(和)和外壳通配符(*、?、[、])在内。 ?如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。 ?利用set args 命令就可以修改发送给程序的参数,而使用show args 命令就可以查看其缺省参数的列表。 ?(gdb)set args –b –x ?(gdb) show args ?backtrace命令为堆栈提供向后跟踪功能。 ?Backtrace 命令产生一张列表,包含着从最近的过程开始的所以有效过程和调用这些过程的参数。 三:显示数据 ?利用print 命令可以检查各个变量的值。 ?(gdb) print p (p为变量名) ?whatis 命令可以显示某个变量的类型 ?(gdb) whatis p ?type = int * 四:断点(breakpoint) break命令(可以简写为b)可以用来在调试的程序中设置断点,该命令有如下四种形式: ? break line-number 使程序恰好在执行给定行之前停止。 ? break function-name 使程序恰好在进入指定的函数之前停止。 ? break line-or-function if condition 如果condition(条件)是真,程序到达指定行或函数时停止。 ? break routine-name 在指定例程的入口处设置断点 ?? 如果该程序是由很多原文件构成的,你可以在各个原文件中设置断点,而不是在当前的原文件中设置断点,其方法如下: ?(gdb) break filename:line-number ?(gdb) break filename:function-name ??要想设置一个条件断点,可以利用break if命令,如下所示: ?(gdb) break line-or-function if expr ?例: ?(gdb) break 46 if testsize==100 ??从断点继续运行:countinue 命令 五.断点的管理 ??1. 显示当前gdb的断点信息: ?(gdb) info break ?他会以如下的形式显示所有的断点信息: ?Num Type Disp Enb Address What ?1 breakpoint keep y 0x000028bc in init_random at qsort2.c:155 ?2 breakpoint keep y 0x0000291c in init_organ at qsort2.c:168 ?(gdb) ?2.删除指定的某个断点: ?(gdb) delete breakpoint 1 ?该命令将会删除编号为1的断点,如果不带编号参数,将删除所有的断点 ?(gdb) delete breakpoint ?3.禁止使用某个断点 ?(gdb) disable breakpoint 1 ?该命令将禁止断点 1,同时断点信息的 (Enb)域将变为 n ?4.允许使用某个断点 ?(gdb) enable breakpoint 1 ?该命令将允许断点 1,同时断点信息的 (Enb)域将变为 y ?5.清除原文件中某一代码行上的所有断点 ?(gdb)clean number ?注:number 为原文件的某个代码行的行号 六.变量的检查
文档评论(0)