我是 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符号上进行跟踪,是否应该使用整齐或去杂的格式?
  • 最佳答案

    -e开关的功能是在ltrace版本中演变而来的。即使是相当新的Linux版本,也经常发布较旧的ltrace,这很可能是您遇到的问题。 (例如,如果我没有记错的话,RHEL6的版本是0.5。)运行ltrace --v并确保您具有0.7或更高版本。

    *版本0.7.0 [2012-11-09 Fri]

    **追踪
    ...

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

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

    关于c++ - 如何将ltrace与通配符一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21088536/

    10-13 01:48