Linux中,程序的调试、内存跟踪:
具体的使用,网上到处都是,不详列了。
1. gcore:
将程序的内存core下来
2. pmap:
显示程序的内存分配情况
3. strace:
看程序在做什么事情
4. valgrind:
对程序进行检查、跟踪:
-----------------------------
用法: valgrind [options] prog-and-args [options]: 常用选项,适用于所有Valgrind工具
-
-tool=<name> 最常用的选项。运行 valgrind中名为toolname的工具。默认memcheck。
-
h –help 显示帮助信息。
-
-version 显示valgrind内核的版本,每个工具都有各自的版本。
-
q –quiet 安静地运行,只打印错误信息。
-
v –verbose 更详细的信息, 增加错误数统计。
-
-trace-children=no|yes 跟踪子线程? [no]
-
-track-fds=no|yes 跟踪打开的文件描述?[no]
-
-time-stamp=no|yes 增加时间戳到LOG信息? [no]
-
-log-fd=<number> 输出LOG到描述符文件 [2=stderr]
-
-log-file=<file> 将输出的信息写入到filename.PID的文件里,PID是运行程序的进行ID
-
-log-file-exactly=<file> 输出LOG信息到 file
-
-log-file-qualifier=<VAR> 取得环境变量的值来做为输出信息的文件名。 [none]
-
-log-socket=ipaddr:port 输出LOG到socket ,ipaddr:port
LOG信息输出
-
-xml=yes 将信息以xml格式输出,只有memcheck可用
-
-num-callers=<number> show <number> callers in stack traces [12]
-
-error-limit=no|yes 如果太多错误,则停止显示新错误? [yes]
-
-error-exitcode=<number> 如果发现错误则返回错误代码 [0=disable]
-
-db-attach=no|yes 当出现错误,valgrind会自动启动调试器gdb。[no]
-
-db-command=<command> 启动调试器的命令行选项[gdb -nw %f %p]
适用于Memcheck工具的相关选项:
-
-leak-check=no|summary|full 要求对leak给出详细信息? [summary]
-
-leak-resolution=low|med|high how much bt merging in leak check [low]
-
-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 的 NFS 开发环境的建立、GDB 调试应用程序、内存工具、C/C++ 代码覆盖、性能 profiling 工具等方面的知识...
2. **应用程序开发**:在Linux环境下开发运行在用户空间的应用程序,这些应用程序可以是桌面软件、服务器软件、Web应用等。 3. **Web开发**:使用Linux作为服务器操作系统进行Web开发,包括后端服务的搭建和维护,...
这个"linux 串口调试程序"是专为opensuse 11.0操作系统设计的,使用了KDevelop作为集成开发环境,并且是用C++语言编写的。KDevelop是一款功能强大的开源IDE,它支持多种编程语言,提供了代码编辑、调试、版本控制和...
《Linux程序设计第四版》是一本深受欢迎的编程教材,主要面向那些希望深入理解Linux操作系统下编程技术的读者。本书详细介绍了如何在Linux环境下编写高效、可靠的程序,涵盖了C语言编程、系统调用、进程管理、文件I/...
《Linux程序设计第三版》是一本深入探讨Linux系统下程序开发的经典著作,书中涵盖了大量关于C语言编程在Linux环境中的应用。源代码是理解和实践书本理论知识的关键,通过阅读和分析这些代码,读者可以更好地掌握...
5. **调试技巧**:学会使用GDB(GNU Debugger)进行程序调试,能够帮助开发者快速定位和修复问题。了解如何设置断点、单步执行、查看变量值以及分析内存状态等调试方法。 6. **Makefile**:在大型项目中,Makefile...
12. **程序调试**:涵盖了使用gdb进行程序调试的基本技巧和高级功能,帮助开发者查找和修复bug。 13. **POSIX接口**:解释了POSIX标准对Linux系统编程的影响,以及如何编写可移植的代码。 14. **程序启动和初始化*...
总的来说,这个教程涵盖了Linux环境下的基础编程技能,包括语言语法、系统接口、程序调试和版本控制等方面。通过实际操作和理论学习相结合,读者将能够掌握Linux程序设计的核心知识,并为后续更高级的主题打下坚实...
《Linux程序设计(第四版)》是一本深受程序员喜爱的经典之作,主要面向对Linux系统有一定了解,希望深入学习Linux程序设计的初、中级开发者。本书详细介绍了如何在Linux环境下进行有效的程序开发,涵盖了从基本概念...
《Linux程序设计》是马修·斯通斯等人编著的一本经典教程,自第四版以来,它一直是学习Linux系统编程的重要参考资料。这本书深入浅出地介绍了如何在Linux环境下进行程序设计,涵盖了从基本概念到高级技术的广泛内容...
适用于Linux系统,提供一套打印控制开关管,用于在开发过程中调试接收、发送、中间过程数据,可以实时进行打印开关控制,不必每次进行修改程序编译,提高调试效率; 调试端 应用程序运行后,等待debug进程运行,该...
《Linux程序设计》中文第四版是一本深入探讨Linux系统下程序开发的经典著作,由马修和斯通斯共同撰写。本书旨在为读者提供一个全面理解Linux环境下编程的基础,适合有一定C语言基础并希望进一步了解操作系统内核与...
通过学习这些知识点,你将具备编写和调试Linux程序的能力。这份“Linux程序设计代码”资料很可能会包含示例代码、练习和解决方案,帮助你实践这些概念。不断练习和阅读优秀的开源项目,是提升Linux编程技能的...
Linux内核或应用程序异常终止调试方法 Linux 内核或应用程序异常终止调试方法是 Linux 系统管理员和开发者常遇到的问题之一。该问题可能是由于内核或应用程序的BUG所致,导致系统崩溃或异常终止。本文将详细介绍 ...
嵌入式Linux应用程序调试是一个复杂而关键的过程,特别是在使用特定硬件如FS2410开发板的情况下。本文档由王奔于2009年4月24日在南京师范大学撰写,详细介绍了如何在嵌入式Linux系统下,利用gdb和gdbserver建立交叉...
同时,书中还会涉及gcc编译器,它是C/C++程序开发的标准工具,讲解如何编译、链接和调试程序。 “makefile”是构建大型项目的关键,它自动化了编译和链接的过程。通过学习makefile,开发者可以创建可重复的构建过程...
"Linux程序设计源码"可能包含了用于教学或实践的示例代码,这些代码可以帮助你深入理解Linux系统编程的各个方面。《Beginning Linux Programming》这本书是学习这个主题的经典资源,它详细介绍了如何在Linux操作系统...
嵌入式Linux GDB调试技术是指在嵌入式系统中使用GDB调试程序的一种技术。GDB(GNU Debugger)是一种功能强大且灵活的调试器,可以在各种平台上使用。嵌入式Linux GDB调试技术的主要目的是掌握Linux GDB调试方法和...
《Linux程序设计》第4版是一本广泛认可的经典教材,提供了深入理解Linux环境下的编程知识。全书源码的提供,对于学习者来说是一个宝贵的资源,可以对照代码加深理解,实践编程技巧。 首先,Linux程序设计主要涉及...
在Linux系统中,设备驱动程序是操作系统与硬件设备之间的桥梁,它们使得操作系统能够高效地管理和控制硬件资源。这里我们主要探讨的是与嵌入式开发相关的Linux设备驱动程序,特别是针对ARM架构,如6410处理器的开发...