阅读:1863回复:0
LINUX应用调试工具
LINUX应用调试工具
一、 调试的目的 程序做了没有期望它去做的事情就被称为BUG,调试的目的是发现并更正程序中的存在的BUG。 二、 调试方法 调试方法有静态代码分析和动态调试。表态代码分析主要是指用人工或静态代码分析工具对源代码进行检测,以找出程序中可能存在的BUG,动态调试则主要在程序运行的过程中通过一定的手段找出存在的BUG。 三、 静态代码 静态代码分析主要有人工检测和使用静态代码分析工具来实现,常用的静态代码分析工具有splint、pc-lint、beam等。 splint是开源软件,它是一个用于静态检查C语言程序安全弱点和编写错误的工具,能够检测的问题:内存溢出或越界、引用空指针、释放内存之后使用指针、可疑的判断语句(例如, if (x = 0))、未初始化变量等 Pc-lint是商业软件,能够检测语法逻辑上的错误,以及完全合乎语法要求,但很可能是潜在的、不易发现的错误;可以检测单个文件,也可以从整个项目的角度来检测问题;能够有效地帮你提出许多程序在空间利用、运行效率上的改进点;支持几乎所有流行的编辑环境和编译器:VC、GCC、Borland C等。 Beam是开源软件,能够检测的问题:未初始化的变量;废弃的空指针;内存泄漏;冗余计算等。 四、 动态调试 动态调试手段主要有打印调试信息、Valgrind、Rational purify、GDB。 1、 打印调试信息 在需要的位置加入printf 按等级打印调试信息 将打印信息写入文本 设置打印信息开关 2、 Valgrind是开源软件,能够探测以下的问题: a) 使用未初如化内存 b) 访问已释放内存 c) 访问越界 d) 内存泄漏 e) 不匹配的malloc/new和free/delete 3、 Purify 是IBM Rational PurifyPlus商业软件的一部分,能够探测以下的问题: a) Purify可以发现程序运行时的内存访问,内存泄漏和其他难以发现的问题 b) 它是市场上唯一支持多种平台的类似工具,并且可以和很多主流开发工具集成 c) Purify可以检查应用的每一个模块,甚至可以查出复杂的多线程或进程应用中的错误 d) 另外她不仅可以检查C/C++,还可以对Java或.NET中的内存泄漏问题给出报告 4、 GDB是GNU的程序调试工具,可以让您了解程序在执行时“内部” 究竟在干些什么,以及在程序发生崩溃的瞬间正在做什么,主要实现四大功能: a) 启动被调试的程序,设置影响程序行为的变量或条件 b) 指定程序停止的条件 c) 当程序停止时,检查已经发生了什么 d) 动态改变程序的变量或条件 GDB调试分为本地调试和远程调试。本地调试时调试器(GDB)和被调试程序运行在同一硬件平台,主要用于在PC平台上开发应用,相对地远程调试时调试器(GDB)和被调试程序一般运行在不同硬件平台,主要用于资源受限系统或者嵌入式开发。远程调试环境由宿主机调试器(GDB)和目标机调试Stub(GDB Server)共同构成,两者通过串口或TCP连接,调试Stub接收来至调试器的调试命令并执行,然后将命令执行结果返回给调试器。 GDB除了常用的命令行调试方式外,还有图形化调试工具,这些图形化调试工具通常仅是GDB的图形化前端,没有增强GDB的功能,它将GDB命令传递给GDB,然后将GDB的执行结果显示出来。常用的GDB图形化调试工具有DDD、Eclipse、Emacs和GNU Insight等。其中Eclipse是LINUX平台上一个不错的IDE开发环境,支持项目管理、编辑、调试,并且得到了许多公司的支持,包括IBM、BORLAND、REDHAT、WIND DIVER等。 |
|