在IBMBluemix云平台上
开发并部署您的下一个应
用。
开始您的试用
IBMBluemix点击按钮,开始云上的开发!
开始您的试用
您可以用各种方法来监控运行着的用户空间程序:可以为其运行调试器并单步调试该程序,添加打印语句,或者添加工
具来分析程序。本文描述了几种可以用来调试在Linux上运行的程序的方法。我们将回顾四种调试问题的情况,这些问
题包括段错误,内存溢出和泄漏,还有挂起。
SteveBest目前在做Linux项目的日志纪录文件系统(JournaledFileSystem,JFS)的工作。Steve在操作系统方面有丰富的从业经验,他的着
重的领域是文件系统、国际化和安全性。
2002年8月09日
本文讨论了四种调试Linux程序的情况。在第1种情况中,我们使用了两个
有内存分配问题的样本程序,使用MEMWATCH和YetAnotherMalloc
Debugger(YAMD)工具来调试它们。在第2种情况中,我们使用了Linux
中的strace实用程序,它能够跟踪系统调用和信号,从而找出程序发生错误
的地方。在第3种情况中,我们使用Linux内核的Oops功能来解决程序的段
错误,并向您展示如何设置内核源代码级调试器(kernelsourcelevel
debugger,kgdb),以使用GNU调试器(GNUdebugger,gdb)来解决相
同的问题;kgdb程序是使用串行连接的Linux内核远程gdb。在第4种情况中,我们使用Linux上提供的
魔术键控顺序(magickeysequence)来显示引发挂起问题的组件的信息。
常见调试方法
当您的程序中包含错误时,很可能在代码中某处有一个条件,您认为它为真(true),但实际上是假
(false)。找出错误的过程也就是在找出错误后推翻以前一直确信为真的某个条件过程。
以下几个示例是您可能确信成立的条件的一些类型:
在源代码中的某处,某变量有特定的值。
在给定的地方,某个结构已被正确设置。
对于给定的if-then-else语句,if部分就是被执行的路径。
当子例程被调用时,该例程正确地接收到了它的参数。
找出错误也就是要确定上述所有情况是否存在。如果您确信在子例程被调用时某变量应该有特定的值,那
么就检查一下情况是否如此。如果您相信if结构会被执行,那么也检查一下情况是否如此。通常,您的
假设都会是正确的,但最终您会找到与假设不符的情况。结果,您就会找出发生错误的地方。
调试是您无法逃避的任务。进行调试有很多种方法,比如将消息打印到屏幕上、使用调试器,或只是考虑
程序执行的情况并仔细地揣摩问题所在。
在修正问题之前,您必须找出它的源头。举例来说,对于段错误,您需要了解段错误发生在代码的哪一
行。一旦您发现了代码中出错的行,请确定该方法中变量的值、方法被调用的方式以及关于错误如何发生
的详细情况。使用调试器将使找出所有这些信息变得很简单。如果没有调试器可用,您还可以使用其它的
工具。(请注意,产品环境中可能并不提供调试器,而且Linux内核没有内建的调试器。)
developerWorks中国 技术主题 Linux 文档库
掌握Linux调试技术
在Linux上找出并解决程序错误的主要方法