进程是否有办法知道dtrace已附加?

时间:2018-11-01 16:00:59

标签: c macos profiling dtrace

我引入了一个环境选项,该选项在启动时会暂停我的进程,以便我可以附加dtrace(通过XCode Instruments)并开始进行性能分析。然后,我必须在该过程中按Enter键才能开始运行。我想知道是否有一种方法可以让我的进程知道已附加了dtrace,以便一旦附加了探查器,它便可以立即开始运行,而不必等待用户输入。附加了dtrace时,在此过程中是否设置了信号或内存值?

2 个答案:

答案 0 :(得分:0)

在很多情况下,这很有用,因此DTrace可以运行流程本身,以使用-c选项强制跟踪立即开始:

   -c     Run  the  specified  command cmd and exit upon its completion.
          If more than one -c option is present on the command line, dtrace
          exits when all commands have exited, reporting the exit status for
          each child process as it terminates. The process-ID of the first
          command is made available to any D programs specified on the command
          line or using the -s option through the $target macro variable.

在D脚本中,您可以使用$target来引用从-c开始的过程,例如在探针名称pid$target::malloc:entry或条件/pid == $target/中。< / p>

如果由于某种原因而无法正常工作,那么您所要求的确切机制就不是一件容易的事,因为DTrace大多数情况下都不允许被跟踪过程看到的副作用。我想发挥创意,而不是等待stdin上的输入,您可以检查它处于循环中的时间,并且在DTrace脚本中,您可以使用destructive action void chill(int nanoseconds)来暂停您的代码BEGIN块中的程序大约一秒钟。这样,您的程序就可以检测到自最近一次时钟测量以来经过1秒以上的暂停,然后开始运行。

答案 1 :(得分:0)

由于您正在编写程序,并且dtrace被设计为非侵入式,因此最简单的方法可能是创建一个用作标志的文件。您可以让程序创建它,也可以仅在想要进行调试时手动创建它。然后,您启动程序并查找什么文件(如果存在),然后暂停并监视该文件。删除文件后,它将继续,然后您可以启动dtrace脚本或同时启动辅助脚本来删除文件。当您不想调试时,您只需不创建文件。创建文件并进行调试时,将其作为启动过程的一部分删除。