Mac OS X的利器dtrace,能实现process/file monitor,特别便于排错

例如我想看看为什么Android的make系统出错,

先开启工具追踪瞬间启动的进程命令行,然后做自己想做的事,例如android的mm编译命令

sudo newproc.d

####结果############   这是实时显示的

2015 Oct  2 20:35:07 54743 <54052> 64b  make -C /Users/q/Documents/android_src -f build/core/main.mk all_modules
2015 Oct  2 20:35:07 54743 <54052> 64b  /Applications/Xcode.app/Contents/Developer/usr/bin/make -C /Users/q/Documents/android_src -f build/core/main.mk all_modules
2015 Oct  2 20:35:07 54744 <54743> 64b  /bin/bash -c uname -sm
2015 Oct  2 20:35:07 54744 <54743> 64b  uname -sm
2015 Oct  2 20:35:07 54745 <54743> 64b  /bin/bash -c expr 3.81 \>= 3.81
2015 Oct  2 20:35:07 54745 <54743> 64b  expr 3.81 >= 3.81
2015 Oct  2 20:35:07 54746 <54743> 64b  /bin/bash -c pwd
2015 Oct  2 20:35:07 54747 <54743> 64b  /bin/bash -c date +%Y%m%d.%H%M%S
2015 Oct  2 20:35:07 54747 <54743> 64b  date +%Y%m%d.%H%M%S
2015 Oct  2 20:35:07 54748 <54743> 64b  /bin/bash -c uname -sm
2015 Oct  2 20:35:07 54748 <54743> 64b  uname -sm
2015 Oct  2 20:35:07 54749 <54743> 64b  /bin/bash -c echo a | sed -E -e ‘s/a/b/‘ 2>/dev/null
2015 Oct  2 20:35:07 54751 <54749> 64b  sed -E -e s/a/b/
2015 Oct  2 20:35:07 54752 <54743> 64b  /bin/bash -c test -d device && find device -maxdepth 6 -name AndroidProducts.mk
2015 Oct  2 20:35:07 54753 <54752> 64b  find device -maxdepth 6 -name AndroidProducts.mk
2015 Oct  2 20:35:07 54754 <54743> 64b  /bin/bash -c test -d vendor && find vendor -maxdepth 6 -name AndroidProducts.mk
2015 Oct  2 20:35:07 54755 <54743> 64b  /bin/bash -c test -d device && find device -maxdepth 4 -path ‘*/generic/BoardConfig.mk‘
2015 Oct  2 20:35:07 54756 <54755> 64b  find device -maxdepth 4 -path */generic/BoardConfig.mk
2015 Oct  2 20:35:07 54757 <54743> 64b  /bin/bash -c test -d vendor && find vendor -maxdepth 4 -path ‘*/generic/BoardConfig.mk‘
2015 Oct  2 20:35:07 54758 <54743> 64b  /bin/bash -c prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.8/bin/arm-linux-androideabi-gcc -fno-exceptions -Wno-multichar -msoft-float (...)
2015 Oct  2 20:35:07 54758 <54743> 64b  prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.8/bin/arm-linux-androideabi-gcc -fno-exceptions -Wno-multichar -msoft-float -ffunction-sections -fdata-sections <...>
2015 Oct  2 20:35:07 54759 <54743> 64b  /bin/bash -c prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.8/bin/arm-linux-androideabi-gcc -fno-exceptions -Wno-multichar -msoft-float (...)
2015 Oct  2 20:35:07 54759 <54743> 64b  prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.8/bin/arm-linux-androideabi-gcc -fno-exceptions -Wno-multichar -msoft-float -ffunction-sections -fdata-sections <...>
2015 Oct  2 20:35:07 54760 <54743> 64b  /bin/bash -c build/core/find-jdk-tools-jar.sh
2015 Oct  2 20:35:07 54760 <54743> 64b  /bin/sh build/core/find-jdk-tools-jar.sh
2015 Oct  2 20:35:07 54761 <54760> 64b  which javac
2015 Oct  2 20:35:07 54762 <54760> 64b  ls -l /usr/bin/javac
2015 Oct  2 20:35:08 54765 <54763> 64b  sed -e s/.* -> //
2015 Oct  2 20:35:08 54767 <54760> 64b  sed -e s:\(.*\)/bin/javac.*:\1/lib/tools.jar:
2015 Oct  2 20:35:08 54768 <54743> 64b  /bin/bash -c java -version 2>&1
2015 Oct  2 20:35:08 54769 <54768> 64b  java -version
2015 Oct  2 20:35:08 54769 <54768> 64b  /usr/bin/java -version
2015 Oct  2 20:35:08 54770 <54743> 64b  /bin/bash -c function sgrax() { while [ -n "$1" ] ; do echo $1 ; shift ; done } ; ( sgrax  10 11 12 13 14 15 16 17 18 19 20 21 4 5 6 7 8 9 cu (...)
2015 Oct  2 20:35:08 54773 <54771> 64b  sort -g
2015 Oct  2 20:35:08 54774 <54743> 64b  /bin/bash -c python -c "import platform; print(platform.platform())"
2015 Oct  2 20:35:08 54774 <54743> 64b  python -c import platform; print(platform.platform())
2015 Oct  2 20:35:08 54774 <54743> 64b  python -c import platform; print(platform.platform())
2015 Oct  2 20:35:08 54775 <54774> 64b  sh -c uname -p 2> /dev/null
2015 Oct  2 20:35:08 54776 <54775> 64b  uname -p
2015 Oct  2 20:35:08 54777 <54774> 64b  file /usr/bin/python
2015 Oct  2 20:35:08 54778 <54743> 64b  /bin/bash -c mkdir -p /Users/q/Documents/android_out/android_src/target/product/generic/ && echo "PREVIOUS_BUILD_CONFIG := full-eng-{en_US,en (...)
2015 Oct  2 20:35:08 54779 <54778> 64b  mkdir -p /Users/q/Documents/android_out/android_src/target/product/generic/
2015 Oct  2 20:35:08 54780 <54743> 64b  /bin/bash -c mkdir -p /Users/q/Documents/android_out/android_src ; echo a > /Users/q/Documents/android_out/android_src/casecheck.txt; echo B  (...)
2015 Oct  2 20:35:08 54781 <54780> 64b  mkdir -p /Users/q/Documents/android_out/android_src
2015 Oct  2 20:35:08 54782 <54780> 64b  cat /Users/q/Documents/android_out/android_src/casecheck.txt
2015 Oct  2 20:35:08 54783 <54743> 64b  /bin/bash -c pwd
2015 Oct  2 20:35:08 54784 <54743> 64b  /bin/bash -c unset _JAVA_OPTIONS && java -version 2>&1
2015 Oct  2 20:35:08 54785 <54784> 64b  java -version
2015 Oct  2 20:35:08 54785 <54784> 64b  /usr/bin/java -version
2015 Oct  2 20:35:08 54786 <54743> 64b  /bin/bash -c unset _JAVA_OPTIONS && javac -version 2>&1
2015 Oct  2 20:35:08 54787 <54786> 64b  javac -version
2015 Oct  2 20:35:08 54787 <54786> 64b  /usr/bin/javac -version
2015 Oct  2 20:35:08 54788 <54743> 64b  /bin/bash -c echo ‘java version "1.8.0_51" Java(TM) SE Runtime Environment (build 1.8.0_51-b16) Java HotSpot(TM) 64-Bit Server VM (build 25.5 (...)
2015 Oct  2 20:35:08 54790 <54788> 64b  grep ^java .*[ "]1\.7[\. "$]
2015 Oct  2 20:35:08 54791 <54743> 64b  /bin/bash -c echo ‘javac 1.8.0_51‘ | grep ‘[ "]1\.7[\. "$]‘
2015 Oct  2 20:35:08 54793 <54791> 64b  grep [ "]1\.7[\. "$]

同样的,iosnoop用来实时显示文件访问,不帖了。其他的dtruss和dapptrace有心人可以体验。

dtrace内部做得实在令人感动,全系统设置了98万多个静态trace点,

dtrace甚至能够动态把第三方dll(*.dylb)的公开函数都给高速完美的hook了,自动产生出trace,据内部大拿说用的是函数指针表补丁+int3技术,反正速度比windows上的同类型api spy工具快多了,而且稳定,而且没有影响用户空间的内存! 完全在内核做的,所有的api的参数和堆栈都可以自己写script取出。当然,也可以自己调用dtrace api产生独特的trace信息,例如nodejs, chrome, firefox等东西里都有dtrace的身影!

相比之下,而Windows系统的类似的机制ETW(Event Trace for Windows),静态trace点,却只有几万个。ETW也无法这样动态地在第三方dll里插入trace,反正得需要自己在dll调用ETW的api产生trace。基于ETW的xperf等工具也弱多了,不仅不能够实施显示信息,而且不能够显示api名称,也无法写script控制,Windows老大这方面落后了。

dtrace这种东西,练好了就像是练了某某门派的高级内功心法差不多,有底气不慌。

时间: 2024-08-26 00:40:58

Mac OS X的利器dtrace,能实现process/file monitor,特别便于排错的相关文章

iConvert Icons 图标转换生成利器,支持Windows, Mac OS X, Linux, iOS,和Android等系统

这是一款在线图标转换工具,生成的图标支持Windows, Mac OS X, Linux, iOS, 和 Android等主流系统. 可以上传图标文件转化成另一个平台下的图标文件,例如将windows系统下的icon图标格式转换成mac os下的icns图标格式,也可以通过上传图片从而生成你指定平台下的图标格式文件.例如上传png文件转换成windows系统下的icon图标文件. 官网在线应用地址:iConvert Icons 其也有app可供下载,但要付费. 原创文章,转载请注明: 转载自 h

Mac OS X 程序员利器 – Homebrew安装与使用

Mac OS X 程序员利器 – Homebrew安装与使用 Homebrew安装与使用 什么是Homebrew? Homebrew is the easiest and most flexible way to install the UNIX tools Apple didn’t include with OS X. 我们能够通过终端方便的使用它安装管理苹果没有自带的UNIX相关工具软件. 如何安装? 参考GitHub地址:https://github.com/mxcl/homebrew/w

Mac OS 终端利器 iTerm2配置大全

之前一直使用 Mac OS 自带的终端,用起来虽然有些不太方便,但总体来说还是可以接受的,是有想换个终端的想法,然后今天偶然看到一个终端利器 iTerm2,发现真的很强大,也非常的好用,按照网上配置了主题什么的,还是有些坑的,这边再记录下,以便后面查阅. 1. 安装 iTerm2 下载地址:https://www.iterm2.com/downloads.html 下载的是压缩文件,解压后是执行程序文件,你可以直接双击,或者直接将它拖到 Applications 目录下. 或者你可以直接使用 H

Mac OS X 11中的/usr/bin 的“Operation not permitted”

更新了 Mac OS X 11后发现,MacVim 不再能够通过Terminal用命令打开了. mvim hello.txt 于是尝试将 mvim 重新复制到/usr/bin/中去 sudo cp -f mvim /usr/bin/ 然而出现了权限问题: cp: /usr/bin/mvim: Operation not permitted 搜索之后发现,是El Capitan 加入了Rootless机制,不再能够随心所欲的读写很多路径下了.设置 root 权限也不行. Rootless机制将成为

VMware 11完全安装Mac OS X 10.10

引用原文如下: VMware 11安装Mac OS X 10.10_百度经验 http://jingyan.baidu.com/article/ff411625b9011212e48237b4.html VM11安装Mac OS X 10.10 工具/原料 1.VMware Workstation 11 2.unlocker 203(for OS X 插件补丁) 3.Mac OS X 10.10镜像 方法/步骤 一.下载以上文件 1. 软件百度VMware Workstation 11 下载即可

Mac OS X 背后的故事

Mac OS X 背后的故事 作者: 王越  来源: <程序员>  发布时间: 2013-01-22 10:55  阅读: 25840 次  推荐: 49   原文链接   [收藏] 作者王越,美国宾夕法尼亚大学计算机系研究生,中国著名 TeX 开发者,非著名 OpenFOAM 开发者. Mac OS X 背后的故事(一)力挽狂澜的Ellen Hancock Mac OS X 背后的故事(二)Linus Torvalds的短视 Mac OS X 背后的故事(三)Mach之父Avie Tevan

Mac OS X El Capitan系统完整性保护System Integrity Protection (SIP)

引言:前段时间经历了XCode编译器代码被注入的事件后,这次 Mac OS X El Capitan系统的升级,启用了更高的安全性保护机制:系统完整性保护System Integrity Protection (SIP),是By Design?还是巧合呢? 关于 系统完整性保护System Integrity Protection (SIP),可以从Apple官网下载下来学习,从第29页到54页 http://devstreaming.apple.com/vi ... y_and_your_ap

Mac os Android开发环境搭建-macports、ndk、sdk、Android源码

第一次使用mac os,第一件事就是搭建环境.由于长期使用Windows+Xshell式的开发模式,所以mac os很容易上手.我主要是在家里使用它来捣鼓一些东西,工作之余可以写一些东西. 刚刚开始有一些地方还不是很适应,因为moc os是基于unix的os,所以很多命令都比较规范,不能像linux那样随意,这就导致了我写的一些脚本运行起来有点问题.为了能很好的适配Mac os和Linux系统,平时在使用命令和写shell脚本的时候都要规范一些,选项在命令之后,而不是任意放到其他位置. 1. m

Mac OS X上使用Wireshark抓包

Wireshark针对UNIX Like系统的GUI发行版界面采用的是X Window(1987年更改X版本到X11).Mac OS X在Mountain Lion之后放弃X11,取而代之的是开源的XQuartz(X11.app).因此,在Mac OS X上安装Wireshark之前,需要先下载安装XQuartz. 1.安装XQuartz XQuartz(XQuartz-2.7.6.dmg)安装完成后,按照提示需要注销重新登录,以使XQuartz作为默认的X11 Server. 安装成功后,在终