如果我写
var moment = require('moment');
Run Code Online (Sandbox Code Playgroud)
在我的项目中,Node会浪费大量时间查看实际上不包含该文件的位置,如此dtruss
输出所示.
PID/THRD RELATIVE SYSCALL(args) = return
7079/0x7cf313: 1244530 stat64("/Users/burke/code/api/api/models/node_modules/moment\0", 0x7FFF5FBFE5D8, 0x9) = -1 Err#2
7079/0x7cf313: 1244575 stat64("/Users/burke/code/api/api/models/node_modules/moment.js\0", 0x7FFF5FBFE578, 0x9) = -1 Err#2
7079/0x7cf313: 1244595 stat64("/Users/burke/code/api/api/models/node_modules/moment.json\0", 0x7FFF5FBFE578, 0x9) = -1 Err#2
7079/0x7cf313: 1244612 stat64("/Users/burke/code/api/api/models/node_modules/moment.node\0", 0x7FFF5FBFE578, 0x9) = -1 Err#2
7079/0x7cf313: 1244628 stat64("/Users/burke/code/api/api/models/node_modules/moment.coffee\0", 0x7FFF5FBFE578, 0x9) = -1 Err#2
7079/0x7cf313: 1244663 open("/Users/burke/code/api/api/models/node_modules/moment/package.json\0", 0x0, 0x1B6) = -1 Err#2
7079/0x7cf313: 1244694 stat64("/Users/burke/code/api/api/models/node_modules/moment/index.js\0", 0x7FFF5FBFE578, 0x1B6) = -1 Err#2
7079/0x7cf313: 1244713 stat64("/Users/burke/code/api/api/models/node_modules/moment/index.json\0", 0x7FFF5FBFE578, 0x1B6) = -1 Err#2
7079/0x7cf313: 1244729 stat64("/Users/burke/code/api/api/models/node_modules/moment/index.node\0", …
Run Code Online (Sandbox Code Playgroud) 我试图查看哪个系统调用ps
用于获取OS X 10.11(El Capitan)上的进程的命令行,并遇到以下错误:
# dtruss ps -p 43520 -o args
dtrace: failed to execute ps: dtrace cannot control executables signed with restricted entitlements
Run Code Online (Sandbox Code Playgroud)
谷歌搜索结果表明,制作副本ps
会让我绕过这个,但这对我不起作用.为什么我不能再dtruss
使用任意二进制文件了,有什么方法可以恢复旧的行为吗?
该dtruss
手册页说:
-f follow children as they are forked
Run Code Online (Sandbox Code Playgroud)
这听起来就像我想要的那样.但是,请遵循以下行为:
WhiteAndNerdy% uname -a
Darwin WhiteAndNerdy.local 13.4.0 Darwin Kernel Version 13.4.0: Wed Dec 17 19:05:52 PST 2014; root:xnu-2422.115.10~1/RELEASE_X86_64 x86_64
WhiteAndNerdy% sudo dtruss -f -t writev /bin/echo hello world
hello world
PID/THRD SYSCALL(args) = return
37273/0x90e264: writev(0x1, 0x7F8832D00000, 0x4) = 12 0
WhiteAndNerdy% sudo dtruss -f -t writev sh -c '/bin/echo hello world'
PID/THRD SYSCALL(args) = return
WhiteAndNerdy% sudo dtruss -f -t writev bash -c '/bin/echo hello world'
PID/THRD SYSCALL(args) = …
Run Code Online (Sandbox Code Playgroud) 我最近决定学习更多关于系统编程的知识,并且觉得看看我的代码实际上在做什么是很有帮助的.
为此,我在C++中编写了一个简短的LinkedList类,并决定使用它来跟踪它dtruss
(读取:dtrace).
我的期望是任何扩展堆的指令(例如使用new
关键字或实例化LinkedList对象)都会调用mmap
或sbrk
/ break
系统调用.此情况并非如此!
实际上,dtruss
使用-s开关运行时,我看不到从我的函数内部调用任何系统调用LinkedList::Add
!测试,我正在添加某些元素.
任何人都可以解释为什么我没有看到mmap
/ sbrk
在我的dtruss输出中的引用?
奖励积分,如果有人可以解释的目的mprotect
和madvise
.
我在下面包含了我的LinkedList类,main.cpp和dtruss输出.
谢谢!
dtruss输出
SYSCALL(args) = return
Created new LinkedList
Created new LinkedList
Destroyed a LinkedList
open("/dev/dtracehelper\0", 0x2, 0xFFFFFFFFE3236D70) = 3 0
ioctl(0x3, 0x80086804, 0x7FFEE3236CD0) = 0 0
close(0x3) = 0 0
access("/AppleInternal/XBS/.isChrooted\0", 0x0, 0x0) = -1 Err#2
thread_selfid(0x0, 0x0, 0x0) = 198178 0
bsdthread_register(0x7FFF5BAB5C50, 0x7FFF5BAB5C40, 0x2000) = 1073742047 …
Run Code Online (Sandbox Code Playgroud)