1 Star2 Stars3 Stars4 Stars5 Stars (还没有评分)
Loading...

DTrace tricks and tips (14) -如何追踪程序运行时打开链接库的probe

如果要追踪程序的链接库的probe,可以参考下面这个例子:

bash-3.2# ldd ./exclude
        libpthread.so.1 =>       /lib/libpthread.so.1
        libodbc.so.2 =>  /usr/local/lib/libodbc.so.2
        librt.so.1 =>    /lib/librt.so.1
        libc.so.1 =>     /lib/libc.so.1
        libiconv.so.2 =>         /usr/local/lib/libiconv.so.2
        libthread.so.1 =>        /lib/libthread.so.1
        libgcc_s.so.1 =>         /usr/local/lib/libgcc_s.so.1
        libaio.so.1 =>   /lib/libaio.so.1
        libmd.so.1 =>    /lib/libmd.so.1
        libm.so.2 =>     /lib/libm.so.2

bash-3.2# dtrace -n 'pid$target:libodbc.so::entry{}' -c ./exclude | more
dtrace: description 'pid$target:libodbc.so::entry' matched 574 probes
CPU     ID                    FUNCTION:NAME
  1  57335             SQLAllocHandle:entry 
  1  57334           __SQLAllocHandle:entry 
  1  57546             __validate_env:entry 
  1  57537                mutex_entry:entry 
  1  57538                 mutex_exit:entry 
  1  57567             thread_protect:entry 
  1  57537                mutex_entry:entry 
......

可以看到,程序链接了libodbc.so,以链接库的名字作为module,就可以了。

但是如果要追踪程序运行时打开链接库的probe,该如何办呢?比方说,程序运行时使用dlopen打开了链接库libmyodbc5.so,假如我们用同样的方式:

bash-3.2# dtrace -n 'pid$target:libmyodbc5.so::entry{}' -c ./exclude
dtrace: invalid probe specifier pid$target:libmyodbc5.so::entry{}: probe description pid22966:libmyodbc5.so::entry does not match any probes  

可以看到会报错,因为程序编译时,没有链接到libmyodbc5.so

为了可以追踪程序运行时打开链接库的probe,可以使用“-Z”选项。这样dtrace就会忽略错误,直到动态链接库被加载进来,probe就可以被创建并使用了:

bash-3.2# dtrace -Zn 'pid$target:libmyodbc5.so::entry{}' -c ./exclude | more
dtrace: description 'pid$target:libmyodbc5.so::entry' matched 0 probes
CPU     ID                    FUNCTION:NAME
  0  57519             SQLAllocHandle:entry 
  0  57504             my_SQLAllocEnv:entry 
  0  57503   myodbc_thread_key_create:entry 
  0  57473                myodbc_init:entry 
  0  57523          init_getfunctions:entry 

参考文档:
(1)http://www.listbox.com/member/archive/184261/2014/11/sort/time_rev/page/1/entry/0:4/20141124210545:8CA61A52-7447-11E4-933A-FF9FA144BBD9/

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.