macOS_执行DTrace示例

1,746 阅读2分钟

本文在 macOS Catalina 10.15.1 上演示DTrace使用示例。

一、解决SIP不可用

在终端中输入DTrace使用命令:

sudo dtrace -n 'proc::posix_spawn:exec-success { printf("execname: %s",execname); }'

报错:

dtrace: system integrity protection is on, some features will not be availabledtrace: invalid probe specifier proc::posix_spawn:exec-success { printf("execname: %s",execname); }: probe description proc::posix_spawn:exec-success does not match any probes. System Integrity Protection is on

根据第一句查Google找到解决方法,大体是 SIP对dtrace不可用。

我们可以这样解决:

1、苹果电脑关机

2、按开机键,屏幕显示白苹果时 同时按住com+R,直到进入Recovery模式

3、进入Recovery模式后,打开终端,并输入命令:

csrutil enable --without dtrace

执行效果如下图:


此时就可以关机了,然后重启电脑就可以了。


二、脚本错误修改

再次在终端运行dtrace脚本:

sudo dtrace -n 'proc::posix_spawn:exec-success{printf("execname:%s",execname);}'

报错如下:

dtrace: invalid probe specifier proc::posix_spawn:exec-success{printf("execname:%s",execname);}: probe description proc::posix_spawn:exec-success does not match any probes

意思是找不到 proc::posix_spawn:exec-success

我们可以用下面的命令查找一下 proc::posix_spawn:exec-success 

sudo dtrace -l | grep proc::posix_spawn:exec-success

终端什么都没打印出来,说明确实没找到这个东西。

我们尝试查找一下 exec-success :

sudo dtrace -l | grep exec-success

终端打印信息如下:

1469       proc       mach_kernel           dtrace_thread_bootstrap exec-success

说明找到了exec-success 进程。

所以我们的 dtrace 语句是有问题的,修改后再次执行:

sudo dtrace -n 'exec-success{printf("execname:%s",execname);}'

此时当我们打开计算器时,终端会有如下的打印信息:

  8   1469 dtrace_thread_bootstrap:exec-success execname:xpcproxy  6   1469 dtrace_thread_bootstrap:exec-success execname:Calculator  6   1469 dtrace_thread_bootstrap:exec-success execname:xpcproxy  4   1469 dtrace_thread_bootstrap:exec-success execname:Enterprise Vault


这条DTrace命令的作用就是跟踪新打开的应用,并输出该应用的名字。

测试成功的命令是:exec-success{printf("execname:%s",execname);}