我编写了一个DTrace脚本,用于测量C程序中函数内部的时间。程序本身运行,输出一些数据然后退出。
问题是它完成了让我快速获取进程ID并启动DTrace的方法。
目前我的代码中有一个sleep()语句,这给了我足够的时间来启动DTrace。必须修改你的代码才能获得有关它的信息,这有点会破坏Dtrace的目的......对。
基本上我所追求的是让DTrace等待进程ID显示然后运行我的脚本。
答案 0 :(得分:5)
据推测,您正在使用pid提供程序,在这种情况下,在创建进程之前无法启用这些探测器。通常的解决方案是使用“-c”选项从dtrace本身调用该程序。
如果由于某种原因你不能这样做(即你的进程必须在某些其他进程设置的环境中启动),你可以尝试更复杂的方法:使用proc ::: start或proc :: :exec-success跟踪程序实际启动的时间,使用stop()动作在该点停止程序,然后使用system()运行另一个使用pid提供程序的DTrace调用,然后“修剪”程序再次。