问题标签 [dtruss]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
365 浏览

c - 使用 dtruss 捕获 Mach 系统调用

我在 vmmap 上运行 dtruss,这是一个读取另一个远程进程的虚拟内存的进程。

我希望某些 mach_port 系统调用会出现在我的命令的输出中,但无法跟踪任何(即 mach_vm_read、task_for_pid 等..)

我运行的确切命令(注意 dtruss 是 OS-X 中 dtrace 的包装脚本):

vmmap 的输入参数只是任何正在运行的进程的 pid,我使用的操作系统版本是 10.10(在 10.11 中,在 vmmap 等苹果产品上运行 dtruss 时存在授权问题)。

也许有人可以告诉我如何识别我正在寻找的系统调用......我应该在 dtruss 输出中寻找明确的名称,还是只是我想要的系统调用的通用调用号(遗憾的是,我还没有找到任何他们) :

0 投票
1 回答
259 浏览

system-calls - dtruss上报的bsdthread_register、ulock_wake等系统调用是什么?

dtruss这是我的 macOS 机器上的示例交互。

其中许多系统调用看起来很熟悉,但其他系统调用则不然。具体来说,什么是thread_selfid, bsdthread_register, ulock_wake, csops, 和dtrace? 如果这些是系统调用,则它们没有记录它们的手册页。它们是私有系统调用,还是其他?dtruss他们的名字从何而来?

0 投票
1 回答
78 浏览

c - 在 OSX 10.9 中安装 DYLD_BIND_AT_LAUNCH 和 sshfs 的 dtruss?

我正在尝试在 OSX 10.9的这个要点上构建示例:

构建成功 - 此外,我可以在终端输出中看到以下内容:

这意味着调用DYLD_BIND_AT_LAUNCH=YES ./fopentest.exe ./mytestfile.txt成功地找到了包装库和函数。

dtruss现在,作为一个测试,我想通过OSX “strace”等价物运行这个可执行文件——我也sudo chmod u+s /usr/sbin/dtrace按照该链接中的建议进行了操作。所以我在/tmp文件夹中尝试:

所以,显然dtruss这里有效。但是,我在不同的目录中有完全相同的文件,为什么我尝试运行相同的命令dtruss失败了:

这可能是什么原因?

0 投票
1 回答
825 浏览

macos - 在 OS X 应用程序中定位文件描述符泄漏

背景

我有一些非常复杂的应用程序。它是一对库的组成。现在 QA 团队发现了一些问题(一些报告错误)。
Fromm 日志我可以看到该应用程序正在泄漏文件描述符(经过 7 小时的自动化测试,+1000)。QA 团队已经从“活动监视器”提供了融洽的“打开的文件和端口”,我确切地知道哪个服务器连接没有关闭。

从完整的应用程序日志中,我可以看到泄漏是非常系统的(没有突然爆发),但我无法重现问题,甚至看到文件描述符的小泄漏。

问题

即使你确定哪个服务器连接永远不会关闭,我也无法找到负责的代码。我无法重现问题。
在日志中,我可以看到我的库维护的所有资源都已正确释放,但服务器地址仍然表明这是我的责任或NSURLSession(无效)。

由于它本身还有其他库和应用程序代码,因此泄漏是由第三方代码引起的可能性很小。

问题

如何找到负责泄漏文件描述符的代码?最好的候选人是 use dtruss,它看起来很有前途。从文档中我可以看到它可以-s在使用系统 API 时打印堆栈回溯。
问题是我不知道如何以不会被信息淹没的方式使用它。我只需要创建打开文件描述符的信息,以及它是否被关闭销毁。由于我无法重现问题,我需要一个可由 QA 团队运行的脚本,以便为我提供输出。

如果有其他方法可以找到文件描述符泄漏的来源,请告诉我。

一堆预定义的脚本正在使用dtruss,但我没有看到任何符合我需求的东西。

最后的笔记

奇怪的是,我知道的唯一代码是使用有问题的连接,不要直接使用文件描述符,而是使用自定义NSURLSession(配置为:每个主机一个连接,最低 TLS 1.0,禁用 cookie,自定义证书验证)。从日志中我可以看到NSURLSession正确无效。我怀疑NSURLSession是泄漏源,但目前这是唯一的候选人。

0 投票
0 回答
122 浏览

node.js - 在 MacOS 上使用 dtruss 分析 node.js 服务器

只是在这里试验 dtruss/dtrace。我有这个命令:

该日志如下所示:https ://gist.github.com/ORESoftware/9b4d47682a8f0ec25330c02b4ef3ea2d

我的问题是,如果我的 NODE_ENV var 已设置,为什么 dtruss 命令的子进程未设置它?以及如何为节点进程设置环境变量?

如果未设置 NODE_ENV,我的节点服务器会崩溃,这就是为什么我假设 dtruss 输出结束并且不会继续的原因。

0 投票
1 回答
1238 浏览

macos - dtrace 中的“动态变量丢弃与非空脏列表”是什么意思?

我正在跟踪 OSX 10.13 上的进程,dtruss试图了解为什么它在进行套接字连接时冻结。但是,当它到达connect示踪剂时,它会冻结,然后显示783 dynamic variable drops with non-empty dirty list在屏幕上。因此,对于理解该过程为何冻结并没有太大帮助!

“动态变量丢弃与非空脏列表”是什么意思?以及我如何才能了解为什么我的进程使用 dtruss/dtrace 冻结?

我在 osx 10.13

0 投票
1 回答
213 浏览

c++ - Dtruss not showing mmap/sbrk calls?

I've recently decided to learn more about systems programming, and felt it would be helpful to see what my code is actually doing under the hood.

To do this, I wrote a short LinkedList class in C++ and decided to trace it using dtruss (read: dtrace).

My expectation was that any instructions that extend the heap (e.g. using the new keyword, or instantiating LinkedList objects) would invoke the mmap or sbrk/break system calls. This was not the case!

In fact, running dtruss with the -s switch, I don't see any system calls being invoked from inside my LinkedList::Add function! Testing, I'm certain elements are being added.

Can anyone explain why I don't see references to mmap/sbrk in my dtruss output?

Bonus points if someone could explain the purpose of mprotect and madvise.

I've included my LinkedList class, main.cpp, and dtruss output below.

Thank you!

dtruss output

LinkedList.cpp

main.cpp

0 投票
1 回答
387 浏览

macos - 为什么我的 dtruss 跟踪中没有任何 execve 调用?

我有一个这样的脚本:

script.sh

如果我对它执行 adtruss操作,那么我希望看到execveclang.

但是,跟踪不包含execve. 相反,有一个错误:

  • 是什么导致了这个错误?
  • 如何让execve命令显示,以便我可以看到调用的程序及其参数?
0 投票
0 回答
338 浏览

swift - Apple 系统完整性保护的 macOS 应用程序问题

我正在开发一个 macOS 应用程序。该应用程序已经在 mac App Store 上发布。

我的一些用户报告说他们无法打开该应用程序。为了找出确切的原因,我联系了一位用户并要求他启动 dtruss 然后打开应用程序,以便我可以使用此命令检查低级别日志,

sudo dtruss -n APPNAME

检查日志后,这是卡住的地方,

正在记录相同的重复错误,并且应用程序根本无法打开。如果有人能帮助我摆脱这个问题,我将不胜感激。

0 投票
0 回答
26 浏览

apache - Apache httpd 统计失败

Apache httpd 无法在 OSX 上遵循符号链接

这是我的用户目录

我试图附加 dtruss 看看出了什么问题,我发现了这个

如果我没记错的话是 EACCESS

问题是当我启动 stat 作为 www 它工作

我错过了什么?