【问题标题】:Escaping probefunc转义探针函数
【发布时间】:2017-07-24 21:42:07
【问题描述】:

我在我的应用程序中列出了探针:

sudo dtrace -p "$(pgrep run)" -ln 'pid$target:QtCore:*sendPostedEvents*:entry {}'
   ID   PROVIDER            MODULE                          FUNCTION NAME
 8037   pid53854            QtCore QCoreApplication::sendPostedEvents(QObject*, int) entry
 8038   pid53854            QtCore QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) entry

我想跟踪函数QCoreApplication::sendPostedEvents(QObject*, int) 的入口探测。但是函数名称中有我无法在 dtrace 探测说明符中表达的字符。

例如,我不能只输入它而不以某种方式转义它(因为冒号在 DTrace 探测说明符中是有意义的):

sudo dtrace -p "$(pgrep run)" -n 'pid$target:QtCore:QCoreApplication::sendPostedEvents(QObject*, int):entry { ustack(3); }'
dtrace: invalid probe specifier pid$target:QtCore:QCoreApplication::sendPostedEvents(QObject*, int):entry { ustack(3); }: invalid probe description "pid$target:QtCore:QCoreApplication::sendPostedEvents(QObject*": Overspecified probe description

我试过用反斜杠、单引号、双引号转义。是否可以通过名称指定这个探测函数?

我不能使用通配符; *sendPostedEvents* 匹配 QCoreApplicationPrivate::sendPostedEvents,这是我不想要的。

我也怀疑我是否可以依赖探测 ID,因为这是 PID 提供程序(我希望探测 ID 在代码的后续编译中发生变化)。

【问题讨论】:

    标签: dtrace


    【解决方案1】:

    您可以使用? 通配符来匹配单个字符:

    sudo dtrace -p "$(pgrep run)" -n 'pid$target:QtCore:QCoreApplication??sendPostedEvents*:entry { ustack(3); }'
    

    问号将匹配“::”,但不匹配“Private::”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-01
      • 2018-10-30
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      相关资源
      最近更新 更多