Как использовать ltrace с подстановочными знаками

Я новичок в трассировке.

  • Я хотел бы использовать подстановочные знаки (шаблоны) для отслеживания вызовов функций, но они, похоже, не работают должным образом, на основе веб-страниц, которые я вижу, например, http://man7.org/linux/man-pages/man1/ltrace.1.html

Например, это работает:

ltrace -c -e "XDrawLine" -p 10876 ^C
% time     seconds  usecs/call     calls      function
------ ----------- ----------- --------- --------------------
100.00    4.925592         501      9829 XDrawLine
------ ----------- ----------- --------- --------------------
100.00    4.925592                  9829 total

Но это ничего не соответствует

trace -c -e "XDrawLin*" -p 10876
^C
% time     seconds  usecs/call     calls      function
------ ----------- ----------- --------- --------------------
------ ----------- ----------- --------- --------------------
100.00    0.000000                     0 total

Кроме того, не повезло с -e "/XDrawLin.*/" или же -e "XDrawLin.*" или. Любой рабочий пример приветствуется.

  • Если это будет решено, я хотел бы перейти к тому, как отследить на C++ символы lib, я буду использовать искаженный или demangled формат?

1 ответ

Решение

Функциональность -e переключатель эволюционировал ltrace релизы. Даже довольно недавние выпуски Linux часто поставлялись с более старой версией ltrace, и это, скорее всего, проблема для вас. (Например, RHEL6, если я правильно помню, поставляется с версией 0.5.) Выполнить ltrace --v и убедитесь, что у вас версия 0.7 и выше.

* Версия 0.7.0 [пт 2012-11-09]

** Трассировка...

*** Ограниченная поддержка отслеживания возвратов из функций хвостового вызова

Селекторы *** -e, -x и -l теперь позволяют использовать глобусы и регулярные выражения

http://anonscm.debian.org/gitweb/?p=collab-maint/ltrace.git;a=blob_plain;f=NEWS;hb=0.7.3

Если у вас более старая версия ltrace - обновите ее с помощью менеджера пакетов или загрузите ее с http://freecode.com/projects/ltrace

Другие вопросы по тегам