跟踪一个短暂的应用程序

Posted

技术标签:

【中文标题】跟踪一个短暂的应用程序【英文标题】:dtracing a short lived application 【发布时间】:2012-02-18 17:52:15 【问题描述】:

我编写了一个 DTrace 脚本,用于测量在我的 C 程序中的函数内花费的时间。程序本身运行,输出一些数据然后退出。

问题在于它完成了让我快速获取进程 ID 并启动 DTrace 的方法。

目前我的代码中有一个 sleep() 语句,它给了我足够的时间来启动 DTrace。必须修改代码才能获取有关它的信息有点违背 Dtrace 的目的......对。

基本上我所追求的是让 DTrace 等待进程 ID 出现,然后针对它运行我的脚本。

【问题讨论】:

我不是专家,但dtruss 可能对你有用。 @arrowdodger 据我所知,dtruss 允许您打印有关进程系统调用的信息,这并不是我真正想要的。基本上问题是我的程序完成了让我快速获取进程 ID 并启动 DTrace 的方法。我已经修改了我的问题以使其更清楚。 由于某种奇怪的原因,我无法回答自己的问题,所以我将其发布在这里。解决方案非常简单,在 DTrace 脚本中将 pid 提供程序更改为“pid$target”,然后从命令行使用“dtrace -s myscript.d -c ./myProg myFuncToAnalyse”。 【参考方案1】:

假设您正在使用 pid 提供程序,在这种情况下,在创建进程之前无法启用这些探测器。通常的解决方案是使用“-c”选项从 dtrace 本身调用程序。

如果由于某种原因您不能这样做(即您的进程必须在由其他进程设置的某个环境中启动),您可以尝试更复杂的方法:使用 proc:::start 或 proc:: :exec-success 跟踪程序实际启动的时间,使用 stop() 操作在该点停止程序,然后使用 system() 运行另一个使用 pid 提供程序的 DTrace 调用,然后“修剪”重新编程。

【讨论】:

以上是关于跟踪一个短暂的应用程序的主要内容,如果未能解决你的问题,请参考以下文章

C 程序在控制台上短暂显示,然后消失

在没有 Windows 的非常短暂的应用程序中调试内存使用情况

使用情节提要设置标签文本时的短暂延迟

Instruments VM 跟踪器为空

更改出列注释视图的图像会导致先前使用的图像短暂出现

当从隐藏变为可见时,如何阻止窗口短暂地重新出现在其最后一个可见位置?