2012-07-02 50 views
4

我想监视(调试)一个用C编写的linux动态库。
我想看看什么时候传递给它的参数。监控linux动态库

要监视'X'的库由另一个动态库'Y'调用。
“X”和“Y”都出现在可执行文件“A”的/ proc/pid/maps中。

使用ltrace,对可执行文件没有显示lib X或Y.
可执行文件使用多个线程。

此外,在EXEC使用ldd命令时,它没有提及库X或Y
LDDÿ什么,说明是Y需要X.在

上所有的库使用LDD,高层项目没有提到任何需要Y的人。
然而Y似乎被加载到exec的/ proc/pid/maps中。

我不知道什么步骤,我可以采取以调试X lib中,任何建议表示赞赏。

+1

'Y'可能在运行时通过被加载'dlopen'。 –

+2

'strace'应该检测库文件的加载。 – cdarke

+1

@KerrekSB我看到ltrace文档状态'拨打dlopen的()的库将不会被traced.' – user756235

回答

4

如果user756235可以在gdb下运行,那么这是一种使用thisthis的方法。唯一的问题是使功能的完整列表共享库X:nm ./libX.so | grep "T "

然后创建.gdbinit(在我的情况下,我控制的print_in_lib参数):

host: srv2-x64rh5-01, OS: Linux 2.6.18-238.el5>more .gdbinit 
file main 
set pagination off 
set logging file gdb.txt 
set breakpoint pending on 
set logging on 
b print_in_lib 
commands 
info args 
continue 
end 
r 
set logging off 
quit 

当我运行gdb

主机:SRV2-x64rh5-01,操作系统:Linux 2.6.18-238.el5> GDB -q功能 未定义 “print_in_lib”。断点1(print_in_lib)未决。 警告:在记号附加文件没有发现可装入节 系统提供的在0x2aaaaaaab000数千DSO:1个print_debug:0

断点1,在my_lib.cpp print_in_lib(print_debug = 0,索引= 0):7 7 如果(print_debug){print_debug = 0索引= 0

断点1,print_in_lib(print_debug = 0,索引= 1)在my_lib.cpp:7 7 如果(print_debug){print_debug = 0索引= 1

断点1,在my_lib.cpp print_in_lib(print_debug = 0,索引= 2):7 7 如果(print_debug){print_debug = 0索引= 2

断点1,print_in_lib在my_lib.cpp(print_debug = 0,索引= 3):7 7 如果(print_debug){print_debug = 0索引= 3

+0

谢谢你的好消息! – user756235