堆栈跟踪运行UNIX应用程序

时间:2011-08-01 15:34:18

标签: c++ c unix stack-trace

如何在正在运行的UNIX应用程序上执行实时堆栈跟踪,是否有任何实用程序在完成后消化堆栈跟踪有用?

我想看看是否有任何函数被调用的次数比我预期的要多 - 应用程序工作正常,它最近放慢速度,并且看起来系统中的任何其他东西都不负责任(没有其他进程在运行时使用异常的内存/处理器)。

5 个答案:

答案 0 :(得分:2)

您是否尝试在应用程序中使用实际的分析器?这将不仅仅是一个堆栈跟踪。通常,您只需使用配置文件信息编译您的应用程序。然后,您可以运行它并使用所写的信息来确定花费最多时间的功能,呼叫次数等。

答案 1 :(得分:2)

  

如何在正在运行的UNIX应用程序上执行实时堆栈跟踪

gcore可用于获取实时进程的核心文件。这将为您提供所有线程的堆栈跟踪的快照。但是,这种方法可能会对您的需求有点过重。

如果可疑功能是系统调用,您可以尝试使用strace查看正在进行的操作。

无论如何,我认为第一个调用端口应该是一个分析器,例如gprof

答案 2 :(得分:2)

分析工具将显示程序的哪些位占用CPU时间。如果你需要深入挖掘,你可能需要其他工具。根据您所使用的unix的种类,工具会有所不同,因为这有时非常特定于平台。 This article讨论了Linux上的进程监控。不同版本的unix可能具有不同的实用程序集,用于必须与内核交互的函数(例如,Solaris的Dtrace)。有些可以跨平台工作。

答案 3 :(得分:0)

我猜你想在运行时没有任何调试器干预。为此你可以使用glibc的回溯函数。文档herehere(假设Linux)只是为了帮助您入门。 This Linux Journal文章也可能有所帮助。

答案 4 :(得分:0)

您的调试器可能具有附加到正在运行的进程的功能。使用gdb,这看起来像

$ gdb path/to/exec 1234

其中1234是正在运行的进程的PID。

(但请考虑那些将您引导至分析实用程序的答案。)

相关问题