网站大量收购独家精品文档,联系QQ:2885784924

使用_GDB_调试_Linux_软件.pdf

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用_GDB_调试_Linux_软件

使用 GDB 调试 Linux 软件 级别: 初级 David SeagerCICS/390 开发部,IBM Hursley 2001 年 2 月 01 日 Linux 的大部分特色源自于 shell 的 GNU 调试器,也称作 gdb。gdb 可以让您查看程 序的内部结构、打印变量值、设置断点,以及单步调试源代码。它是功能极其强大的工具, 适用于修复程序代码中的问题。在本文中,David Seager 将尝试说明 gdb 有多棒,多 实用。 编译 开始调试之前,必须用程序中的调试信息编译要调试的程序。这样,gdb 才能够调试所使 用的变量、代码行和函数。如果要进行编译,请在 gcc(或 g++)下使用额外的 -g 选 项来编译程序: gcc -g eg.c -o eg 运行 gdb gdb ggddbb 在 shell 中,可以使用 gdb 命令并指定程序名作为参数来运行 gdb,例如 gdb eg;或者在 gdb 中,可以使用 file 命令来装入要调试的程序,例如 file eg。这 两种方式都假设您是在包含程序的目录中执行命令。装入程序之后,可以用 gdb 命令 run 来启动程序。 调试会话示例 如果一切正常,程序将执行到结束,此时 gdb 将重新获得控制。但如果有错误将会怎么样? 这种情况下,gdb 会获得控制并中断程序,从而可以让您检查所有事物的状态,如果运气 好的话,可以找出原因。为了引发这种情况,我们将使用一个 示例程序: 代码示例 eg1.c eg1.c eegg11..cc #include int wib(int no1, int no2) { int result, diff; diff = no1 - no2; result = no1 / diff; return result; } int main(int argc, char *argv[]) { int value, div, result, i, total; value = 10; div = 6; total = 0; for(i = 0; i 10; i++) { result = wib(value, div); total += result; div++; value--; } printf(%d wibed by %d equals %d\n, value, div, total); return 0; } 这个程序将运行 10 次 for 循环,使用 wib() 函数计算出累积值,最后打印出结果。 在您喜欢的文本编辑器中输入这个程序(要保持相同的行距),保存为 eg1.c,使用 gcc -g eg1.c -o eg1 进行编译,并用 gdb eg1 启动 gdb。使用 run 运行 程序可能会产生以下消息: Program received signal SIGFPE, Arithmetic exception. 0x80483ea in wib (no1=8, no2=8) at eg1.c:7 7 result = no1 / diff; (gdb) gdb 指出在程序第 7 行发生一个算术异常,通常它会打印这一行以及 wib() 函数的自变 量值。要查看第 7 行前后的源代码,请使用 list 命令,它通常会打印 10 行。再次 输入 list(或者按回车重复上一条命令)将列出程序的下 10 行。从 gdb 消息中可 以看出,第 7 行中的除法运算出了错,程序在这一行中将变量 no1 除以 diff。 要查看变量的值,使用 gdb print 命令并指定变量名。输入 print no1 和 print diff,可以相应看到 no1 和 diff 的值,结果如下: (gdb) print no1 $5 = 8 (gdb) print diff $2 = 0 gdb 指出 no1 等于 8,diff 等于 0。根据这些值和第 7 行中的语句,我们可以 推断出算术异常是由除数为 0 的除法运算造成的。清单显示了第 6 行计算的变量 diff,我们可以打印 diff 表达式(使用 print no1 - no2 命令),来重新估 计这个变量。gdb 告诉我们 wib 函数的这两个自变量都等于 8,于是我们要检查调用 wib() 函数的 main() 函数,以查看这是在什么时候发生的。在允许

文档评论(0)

f8r9t5c + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档