2

我是ltrace的新手。

例如,这有效:

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 符号,我应该使用 mangled 还是 demangled 格式?
4

1 回答 1

2

-e交换机的功能随着ltrace版本的发展而演变。即使是最近的 Linux 版本也经常发布较旧的 ltrace,这很可能是您的问题。(例如,如果我没记错的话,RHEL6 附带 0.5 版本。)运行ltrace --v并确保您拥有 0.7 及更高版本。

* 版本 0.7.0 [2012-11-09 星期五]

** 追踪
...

*** 对跟踪尾调用函数返回的有限支持

*** -e、-x 和 -l 选择器现在允许使用 glob 和正则表达式

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下载它

于 2014-01-14T08:00:22.893 回答