dtrace - DTrace pid 提供程序仅适用于 Debug模式编译的程序吗?

标签 dtrace

我想使用 DTrace 来跟踪各种程序中的 FFI 使用情况。

DTrace 设计用于在生产环境中工作,但大多数软件都是通过编译器优化进行编译和分发的。

这些优化是否会阻止使用 pid 提供程序来跟踪 entryreturn 探针?

例如

  • pid$target::example_ffi_fn_x:entry
  • pid$target::example_ffi_fn_x:return

http://dtrace.org/guide/dtrace-ebook.pdf#page=291

When the compiler inlines a function, the pid provider’s probe does not fire. To avoid inlining a function at compile time, consult the documentation for your compiler.

这是否意味着您只能在发布 USDT 探针或在 Debug模式下编译(未经优化)的程序上使用 DTrace?

是否有另一种方法可以跟踪我没有原始源代码的程序中的 FFI 使用情况?

最佳答案

编译器优化在很大程度上不会妨碍 DTrace 跟踪函数的能力。是的,积极的(或显式的)内联会使函数不可见,但幸运的是这种情况并不常见。二进制文件中一个更典型的挑战是缺乏符号信息,无法让您找到您可能感兴趣的函数。

我很确定我记录了这一点,但我找不到它——它肯定在代码中:pid 提供程序允许您在进程的地址空间内指定指令地址。现在,它似乎在 macOS 10.15.2 中被巧妙地破坏了(我正在测试它),但它看起来像这样:dtrace -n 'pid11118::-:0x103c87a19'

关于dtrace - DTrace pid 提供程序仅适用于 Debug模式编译的程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57913806/

相关文章:

kernel - 使用 DTrace 分析 FreeBSD 内核

c - 列出对我的库的所有调用

tcp - tcp 探针中 cs_cid 的 dtrace 问题

macos - dtruss 在 OS X 10.11 上的 ps 上失败

dtrace - 从 DTrace 脚本调用 C 函数

iPhone:strace、dtruss、dtrace 或同等工具?

macos - 如何在 dtruss 输出中查看完整字符串?

我们可以使用 dtrace 按核心进行分析吗?

profiler - JMH 的 DTraceAsmProfiler 在 Mac 上失败并显示 '[sudo: a password is required'