使用 dtrace 跟踪系统调用

Tracing system calls using dtrace

我是 运行 一个使用进程 ID 423 运行的应用程序。 基本上想调试这个过程。

问题是, 使用命令 sudo dtruss -a -t open_nocancel -p 423 我没有看到执行的打印消息,并且 sudo kill -30 423 之类的系统信号似乎也没有显示在堆栈跟踪中。我错过了什么吗?我该如何实现?

下面的示例堆栈跟踪

    PID/THRD  RELATIVE  ELAPSD    CPU SYSCALL(args)          = return
  423/0xcf5:  109498638      14      9 open_nocancel("/Users/krishna/.rstudio-desktop/sdb/s-3F25A09C/373AE888[=10=]", 0x0, 0x1B6)    = 21 0
  423/0xcf5:  109509540      20     16 open_nocancel("/Users/krishna/.rstudio-desktop/history_database[=10=]", 0x209, 0x1B6)     = 20 0
  423/0xcf5:  109510342      56     44 open_nocancel(".[=10=]", 0x0, 0x1)        = 20 0
  423/0xcf5:  109516113      19     15 open_nocancel("/Users/krishna/.rstudio-desktop/history_database[=10=]", 0x209, 0x1B6)     = 20 0
  423/0xcf5:  109517099      35     30 open_nocancel(".[=10=]", 0x0, 0x1)        = 20 0
  423/0xcf5:  109576820      16     11 open_nocancel("/Users/krishna/.rstudio-desktop/sdb/s-3F25A09C/373AE888[=10=]", 0x0, 0x1B6)    = 21 0
  423/0xcf5:  109673038      16     10 open_nocancel("/Users/krishna/.rstudio-desktop/sdb/s-3F25A09C/373AE888[=10=]", 0x0, 0x1B6)    = 21 0

命令sudo dtruss -a -t open_nocancel -p 423跟踪open_nocancel系统调用。根据 OS X man page for dtruss:

NAME
       dtruss - process syscall details. Uses DTrace.

SYNOPSIS
       dtruss [-acdeflhoLs] [-t syscall] { -p PID | -n name | command }

...

       -t syscall
              examine this syscall only

如果您想跟踪其他系统调用,您需要更改 -t ... 参数或将其删除。