本文在 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);}