4

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

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

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

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

4

1 回答 1

5

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

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

于 2012-03-02T01:01:35.287 回答