`
zybing
  • 浏览: 455970 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Linux程序的调试

阅读更多

Linux中,程序的调试、内存跟踪:

 

具体的使用,网上到处都是,不详列了。

 

1. gcore:

   将程序的内存core下来

 

2. pmap:

    显示程序的内存分配情况

 

3. strace:

    看程序在做什么事情

 

4. valgrind:

    对程序进行检查、跟踪:

 

-----------------------------

Valgrind 使用

用法: valgrind [options] prog-and-args [options]: 常用选项,适用于所有Valgrind工具

  1. -tool=<name> 最常用的选项。运行 valgrind中名为toolname的工具。默认memcheck。
  2. h –help 显示帮助信息。
  3. -version 显示valgrind内核的版本,每个工具都有各自的版本。
  4. q –quiet 安静地运行,只打印错误信息。
  5. v –verbose 更详细的信息, 增加错误数统计。
  6. -trace-children=no|yes 跟踪子线程? [no]
  7. -track-fds=no|yes 跟踪打开的文件描述?[no]
  8. -time-stamp=no|yes 增加时间戳到LOG信息? [no]
  9. -log-fd=<number> 输出LOG到描述符文件 [2=stderr]
  10. -log-file=<file> 将输出的信息写入到filename.PID的文件里,PID是运行程序的进行ID
  11. -log-file-exactly=<file> 输出LOG信息到 file
  12. -log-file-qualifier=<VAR> 取得环境变量的值来做为输出信息的文件名。 [none]
  13. -log-socket=ipaddr:port 输出LOG到socket ,ipaddr:port

LOG信息输出

  1. -xml=yes 将信息以xml格式输出,只有memcheck可用
  2. -num-callers=<number> show <number> callers in stack traces [12]
  3. -error-limit=no|yes 如果太多错误,则停止显示新错误? [yes]
  4. -error-exitcode=<number> 如果发现错误则返回错误代码 [0=disable]
  5. -db-attach=no|yes 当出现错误,valgrind会自动启动调试器gdb。[no]
  6. -db-command=<command> 启动调试器的命令行选项[gdb -nw %f %p]

适用于Memcheck工具的相关选项:

  1. -leak-check=no|summary|full 要求对leak给出详细信息? [summary]
  2. -leak-resolution=low|med|high how much bt merging in leak check [low]
  3. -show-reachable=no|yes show reachable blocks in leak check? [no]

 

valgrind包含几个标准的工具,它们是:

1、memcheck

 

memcheck探测程序中内存管理存在的问题。它检查所有对内存的读/写操作,并截取所有的malloc/new/free/delete调用。因此memcheck工具能够探测到以下问题:

 

1)使用未初始化的内存

2)读/写已经被释放的内存

3)读/写内存越界

4)读/写不恰当的内存栈空间

5)内存泄漏

6)使用malloc/new/new[]和free/delete/delete[]不匹配。

2、cachegrind

 

cachegrind是一个cache剖析器。它模拟执行CPU中的L1, D1和L2 cache,因此它能很精确的指出代码中的cache未命中。如果你需要,它可以打印出cache未命中的次数,内存引用和发生cache未命中的每一行代码,每一个函数,每一个模块和整个程序的摘要。如果你要求更细致的信息,它可以打印出每一行机器码的未命中次数。在x86和amd64上,cachegrind通过CPUID自动探测机器的cache配置,所以在多数情况下它不再需要更多的配置信息了。

 

3、helgrind

 

helgrind查找多线程程序中的竞争数据。helgrind查找内存地址,那些被多于一条线程访问的内存地址,但是没有使用一致的锁就会被查出。这表示这些地址在多线程间访问的时候没有进行同步,很可能会引起很难查找的时序问题。

 

分享到:
评论

相关推荐

    嵌入式linux应用程序调试方法

    嵌入式 Linux 应用程序调试方法 嵌入式 Linux 应用程序调试方法是一份详细的调试指南,涵盖了嵌入式 Linux 的 NFS 开发环境的建立、GDB 调试应用程序、内存工具、C/C++ 代码覆盖、性能 profiling 工具等方面的知识...

    掌握GDB:Linux程序调试的艺术

    2. **应用程序开发**:在Linux环境下开发运行在用户空间的应用程序,这些应用程序可以是桌面软件、服务器软件、Web应用等。 3. **Web开发**:使用Linux作为服务器操作系统进行Web开发,包括后端服务的搭建和维护,...

    linux 串口调试程序

    这个"linux 串口调试程序"是专为opensuse 11.0操作系统设计的,使用了KDevelop作为集成开发环境,并且是用C++语言编写的。KDevelop是一款功能强大的开源IDE,它支持多种编程语言,提供了代码编辑、调试、版本控制和...

    linux程序设计第四版高清原版 附带各章源代码

    《Linux程序设计第四版》是一本深受欢迎的编程教材,主要面向那些希望深入理解Linux操作系统下编程技术的读者。本书详细介绍了如何在Linux环境下编写高效、可靠的程序,涵盖了C语言编程、系统调用、进程管理、文件I/...

    Linux 程序设计第三版源代码

    《Linux程序设计第三版》是一本深入探讨Linux系统下程序开发的经典著作,书中涵盖了大量关于C语言编程在Linux环境中的应用。源代码是理解和实践书本理论知识的关键,通过阅读和分析这些代码,读者可以更好地掌握...

    LINUX程序设计

    5. **调试技巧**:学会使用GDB(GNU Debugger)进行程序调试,能够帮助开发者快速定位和修复问题。了解如何设置断点、单步执行、查看变量值以及分析内存状态等调试方法。 6. **Makefile**:在大型项目中,Makefile...

    Linux程序设计(第四版)中文版和英文版

    12. **程序调试**:涵盖了使用gdb进行程序调试的基本技巧和高级功能,帮助开发者查找和修复bug。 13. **POSIX接口**:解释了POSIX标准对Linux系统编程的影响,以及如何编写可移植的代码。 14. **程序启动和初始化*...

    Linux程序设计(含源码)

    总的来说,这个教程涵盖了Linux环境下的基础编程技能,包括语言语法、系统接口、程序调试和版本控制等方面。通过实际操作和理论学习相结合,读者将能够掌握Linux程序设计的核心知识,并为后续更高级的主题打下坚实...

    linux程序设计经典最新版--《linux程序设计(第四版)英文原版》

    《Linux程序设计(第四版)》是一本深受程序员喜爱的经典之作,主要面向对Linux系统有一定了解,希望深入学习Linux程序设计的初、中级开发者。本书详细介绍了如何在Linux环境下进行有效的程序开发,涵盖了从基本概念...

    《LINUX程序设计》

    《Linux程序设计》是马修·斯通斯等人编著的一本经典教程,自第四版以来,它一直是学习Linux系统编程的重要参考资料。这本书深入浅出地介绍了如何在Linux环境下进行程序设计,涵盖了从基本概念到高级技术的广泛内容...

    Linux系统应用程序 调试测试使用 打印控制开关

    适用于Linux系统,提供一套打印控制开关管,用于在开发过程中调试接收、发送、中间过程数据,可以实时进行打印开关控制,不必每次进行修改程序编译,提高调试效率; 调试端 应用程序运行后,等待debug进程运行,该...

    《Linux程序设计》中文第四版

    《Linux程序设计》中文第四版是一本深入探讨Linux系统下程序开发的经典著作,由马修和斯通斯共同撰写。本书旨在为读者提供一个全面理解Linux环境下编程的基础,适合有一定C语言基础并希望进一步了解操作系统内核与...

    Linux程序设计代码

    通过学习这些知识点,你将具备编写和调试Linux程序的能力。这份“Linux程序设计代码”资料很可能会包含示例代码、练习和解决方案,帮助你实践这些概念。不断练习和阅读优秀的开源项目,是提升Linux编程技能的...

    Linux内核或应用程序异常终止调试方法

    Linux内核或应用程序异常终止调试方法 Linux 内核或应用程序异常终止调试方法是 Linux 系统管理员和开发者常遇到的问题之一。该问题可能是由于内核或应用程序的BUG所致,导致系统崩溃或异常终止。本文将详细介绍 ...

    嵌入式linux应用程序调试.pdf

    嵌入式Linux应用程序调试是一个复杂而关键的过程,特别是在使用特定硬件如FS2410开发板的情况下。本文档由王奔于2009年4月24日在南京师范大学撰写,详细介绍了如何在嵌入式Linux系统下,利用gdb和gdbserver建立交叉...

    Linux应用程序开发详解

    同时,书中还会涉及gcc编译器,它是C/C++程序开发的标准工具,讲解如何编译、链接和调试程序。 “makefile”是构建大型项目的关键,它自动化了编译和链接的过程。通过学习makefile,开发者可以创建可重复的构建过程...

    linux 程序设计 源码

    "Linux程序设计源码"可能包含了用于教学或实践的示例代码,这些代码可以帮助你深入理解Linux系统编程的各个方面。《Beginning Linux Programming》这本书是学习这个主题的经典资源,它详细介绍了如何在Linux操作系统...

    嵌入式Linux GDB调试技术

    嵌入式Linux GDB调试技术是指在嵌入式系统中使用GDB调试程序的一种技术。GDB(GNU Debugger)是一种功能强大且灵活的调试器,可以在各种平台上使用。嵌入式Linux GDB调试技术的主要目的是掌握Linux GDB调试方法和...

    Linux程序设计 全书源码 下载

    《Linux程序设计》第4版是一本广泛认可的经典教材,提供了深入理解Linux环境下的编程知识。全书源码的提供,对于学习者来说是一个宝贵的资源,可以对照代码加深理解,实践编程技巧。 首先,Linux程序设计主要涉及...

    LINUX设备驱动程序

    在Linux系统中,设备驱动程序是操作系统与硬件设备之间的桥梁,它们使得操作系统能够高效地管理和控制硬件资源。这里我们主要探讨的是与嵌入式开发相关的Linux设备驱动程序,特别是针对ARM架构,如6410处理器的开发...

Global site tag (gtag.js) - Google Analytics