Yan*_*nin 5 macos dtrace blocking instruments strace
标题说得最多,真的.在Linux上这将是很容易与strace
和可能的lsof
或/proc
,并用它很容易在OSX,直到truss
从OSX Leopard的去除,与潜在的系统调用(据我所知)一起.
显而易见的方法是用这个问题来解决这个问题dtrace
,但据我所知,dtrace
这不会做,因为它会在事件发生时捕获事件 - 在我的情况下,阻塞系统调用已经开始了.dtrace
顺便说一下,如果可以解决这个问题,我很乐意做出纠正.
我看到Xcode的仪器有一个监视器,通过定期处理进程堆栈的样本来实现类似的东西(不确定系统调用依赖于它做什么!),也许在命令行上类似的东西就足够了(因为它会显示堆栈一直到包含系统调用的库调用).为了对我的用例有用,这个"采样命令行工具"必须找到并解析它在堆栈上找到的参数,以便确定我们阻止了哪些文件/文件描述符.
最后一件事 - 在Linux上,你通常可以做普通用户(假设没有ptrace_scope
技巧).如果OSX解决方案也不需要root,那将是很好的.
你可以使用sample
:sample PID -e
例如,nc -l localhost 5999
您将获得一个带调用图的文件:
Call graph:
9046 Thread_242504 DispatchQueue_1: com.apple.main-thread (serial)
9046 start (in libdyld.dylib) + 1 [0x7fff90a847e1]
9046 ??? (in nc) load address 0x102453000 + 0x166c [0x10245466c]
9046 __accept (in libsystem_kernel.dylib) + 10 [0x7fff94445996]
Run Code Online (Sandbox Code Playgroud)
和其他有用的信息,如加载二进制图像.
归档时间: |
|
查看次数: |
1541 次 |
最近记录: |