问题标签 [dtrace]
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.
c - libdtrace 缓冲输出
我正在尝试通过 libdtrace 使用 dtrace(在 Snow Leopard 上;10.6.4)。我想在我自己的程序中捕获我的 dtrace 脚本的打印输出。这样做的一种方法是将输出转到一个临时文件并从那里读取。但是,libdtrace 支持回调函数来直接捕获我更喜欢的输出。
我假设回调只会传递我可以使用的格式化字符串,但事实并非如此。例如,在下面的测试程序中,我希望打印输出为“process pid = 86138”。然而,它总是打印出“process pid = 1”(dtrace 脚本工作正常,当使用 'dtrace -n' 运行时)。
我究竟做错了什么 ?我应该如何使用传递给缓冲区处理程序的数据?(具体来说,我感兴趣的是来自 printf 和 tracemem 操作的数据)。
java - 如何将日志写入 btrace 中的文件?
我有以下btrace脚本。我想记录特定类中函数的进入和退出。
这在控制台上给出了输出。如何将结果写入文件?Btrace 不允许创建新对象。
(明显的解决方法是重定向到一个文件。另一种选择是使用 VisualVM btrace 插件 - 输出然后转到 visualVM 窗口。注意它是否处理非常大的输出 500Mb 左右。)
谢谢
java - 使用 BTrace 代理启动应用程序时出现 NullPointerException
我正在使用 BTrace 1.2 并遵循BTrace 网站的用户指南。在使用命令运行程序时使用 BTrace 没有问题:
但是当我尝试使用 BTrace 代理启动应用程序时:
或者
我NullPointerException
上车SimpleFileOutput
:
我配置了 BTRACE_HOME 路径。我错过了一个技巧吗?我也尝试过使用 1.1.3 版,但没有运气。
请帮忙。
编辑如果我设置debug=false
并stdout=true
摆脱scriptOutputFile=out.trace
控制台的输出工作正常。
c - 自动装配循环级别分析
有谁知道任何装配循环级分析器?
我一直在使用 gprof,但 gprof 隐藏了循环,它是函数级别的分析,但是为了优化我的代码,我想要一些东西进入循环级别。我希望它是自动化的,只给我像 gprof 这样的输出。有人建议我去 dtrace,但我不知道要开始。任何人都可以指导我吗?例如
例如,在 gprof 中,它会说 main 执行了 1 次,而 foo 执行了 100 次。但是我想知道 L2 或 L3 是否执行了 1M 次,那么我将专注于优化。如果我的问题含糊不清,请让我解释更多谢谢
c - 如何运行此 DTrace 脚本来分析我的应用程序?
我在网上搜索可以帮助我进行装配线分析的东西。我在http://www.webservertalk.com/message897404.html上搜索并找到了一些东西
这个问题有两个部分;查找特定类型的所有指令(inc、add、shl 等)以确定分组,然后找出正在执行的指令并正确求和。除非按反汇编程序分组就足够了,否则第一位很棘手。为了确定正在执行哪些指令,Dtrace 在这里当然是您的朋友(至少在用户空间中)。
最好的方法是只检测每个基本块的开头;现在找到这些将是一个手动过程......但是,检测每条指令对于小型应用程序是可行的。这是一个例子:
首先,我们在测试中非常简单的 C 程序:
现在,我们有点棘手的 D 脚本:
从给出的例子来看,这正是我所需要的。但是我不知道它在做什么,如何保存 DTrace 程序,如何使用我想要得到结果的代码执行。所以我打开了这个希望一些具有良好 DTrace 背景的人可以帮助我理解代码,保存它,运行它,并希望得到显示的结果。
java - OS X 上的 Java DTrace 桥接器
我正在尝试在 OS X 上获取 OS / 内核级别的文件系统事件。我必须遵循 2 个要求。第一个是在 java 中执行此操作,因为我正在开发的整个项目都是用 java 编写的。第二个是我必须找出文档何时打开。
对于 Linux,我使用了 inotify-java,但在 OS X 上找不到很好的等价物。JNA 也没有提供有用的绑定。目前,我通过频繁调用 lsof 程序来避免捕获事件。然而,这是一个糟糕的解决方案。
谢谢您的帮助。
java - 无法在 Mac OS X 上通过 jinfo 启用 DTrace 探测
在雪豹上运行 Java 6。
您应该能够使用 jinfo 实用程序在正在运行的 Java 进程上打开 ExtendedDTraceProbes。即使在我的命令提示符下,jinfo也谈到了启用通用标志:
据我所知,DTrace 标志没有任何特殊价值,重要的是它们的存在与否。
但是当我尝试这样做时,我会遇到两个错误之一,这取决于我是否以 sudo 开头。
假设:
jps
与 StayRunning 进程相同的用户:
jinfo -flag +ExtendedDTraceProbes 1234
以 root 身份尝试:
sudo jinfo -flag +ExtendedDTraceProbes 1234
错误在第二行,当然进程仍在运行。
奇怪的是,这个页面没有显示 OS X 的“+”选项,但是我自己的机器打印出使用信息。
这是我的简单代码。它与 Eclipse 类似地失败。
StayRunning.java
xcode - 如何为 CFType 对象的分配、保留、释放和解除分配记录消息/中断执行?
我希望能够在每次分配、保留、释放或解除分配特定CFType
对象(对于我当前的目的, a )时记录消息(最好中断调试器)。CGPDFDocument
因为没有需要a 的Create...()
方法,所以我正在尝试像这样临时更改默认分配器:CGPDFDocument
CFAllocatorRef
其中MyLogAllocator()
定义如下:
但是,似乎默认分配器(kCFAllocatorSystemDefault
据我所知)对于 context.retain 和 context.release 有 NULL,所以我没有任何原始实现可以调用。这可能就是为什么当我尝试上面的代码时,我得到以下堆栈跟踪:
XCode 实际上并没有告诉我为什么它会停止,但是如果我尝试继续,我会得到:
无论我继续多少次,我都会得到相同的 SIGTRAP。我不知道如何解释它;我设置的唯一断点是objc_exception_throw
.
需要注意的一件事是,LogRetain()
并且LogAllocate()
每个都从以下位置成功调用一次(按该顺序)CFAllocatorCreate()
:
然后LogAllocate()
再次成功CFAllocatorAllocate()
:
在_CFRuntimeCreateInstance()
at #2 调用CFRetain()
上面详述的问题之前。
有人可以帮我理解这里发生了什么(特别是默认分配器如何处理保留和释放,以及为什么我得到 SIGTRAP);如何修复它;以及是否有更好的方法来做我想做的事情?
(我想我可能能够弄清楚如何使用 DTrace 来探测CFRetain()
和,并由forCFRelease()
过滤,但我不知道要探测什么来解除分配(分配并不那么重要,因为我知道它是在 内部完成的)。此外,我更希望能够在保留/释放/解除分配时中断调试器,我认为使用 DTrace 是不可能的。)CFTypeID
CGPDFDocument
CGPDFDocumentCreateWithProvider()
更新:现在阅读了源代码后,CFRelease
我意识到我误解了context.retain
and的目的context.release
——它们是为了保留和释放context.info
. 所以上面描述的整个方法是行不通的。但是,也许 DTrace/Instruments 向导仍然可以发挥一些魔力?!
java - 哪些 DTrace 脚本值得在 Solaris 上测试和分析 Java 程序
我发现DTrace很有趣,但我个人没有看到一个用例,它允许我获得不使用 DTrace 否则无论如何我都无法获得的信息。
因此,我想听听我忽略了什么。我可以在我的 vmware OpenIndiana build 148 上使用 DTrace 执行哪些操作,以在创建独立应用程序和 Java EE Web 应用程序(其中大多数使用套接字与遗留后端进行大量通信)时产生影响?
非平凡的 Dtrace 脚本非常受欢迎。
networking - 通过网络将 Solaris 脚本输出推送到 Windows 客户端?
我有一个简单的 Solaris DTrace 脚本,可以连续输出一些磁盘统计信息。默认情况下,输出被夹到 STDOUT,所以我可以重定向到一个文件来捕获数据。
我正在寻找的是远程获取数据的能力。我最初的想法是,我需要某种客户端可以连接的守护程序,并将数据流式传输到它们,但我不确定执行这项工作的最佳软件堆栈/库是什么。
我已经了解 Solaris 方面的 Perl 和 Python,并将使用 C#.NET 客户端。客户端位不会有问题,因为它可以连接到远程套接字并等待数据出现。但是,需要更多考虑的是服务器部分。
关于解决此问题的最佳方法的任何想法/建议?