Выход из режима пробной функции

Я перечислил зонды в своем приложении:

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, чего я не хочу.

Я сомневаюсь, что могу полагаться и на идентификатор зонда, так как это поставщик PID (я ожидаю, что идентификаторы зондов изменятся при последующих компиляциях кода).


person Birchlabs    schedule 24.07.2017    source источник


Ответы (1)


Вы можете использовать подстановочный знак ? для соответствия одиночным символам:

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

Знаки вопроса будут соответствовать "::", но не "Private::".

person Ken Thomases    schedule 25.07.2017