我想监视(调试)用C编写的linux动态库 我想看看何时以及传递给它的参数。
监视“X”的库由另一个动态库“Y”调用 'X和'Y'都出现在可执行文件'A'的/ proc / pid / maps中。
使用ltrace,在可执行文件上没有显示lib X或Y. 可执行文件使用多个线程。
此外,在exec上使用ldd命令时,它没有提及有关libs X或Y的任何内容 ldd Y,表明Y需要X.
在所有的lib上使用ldd,项目中的高管并未提及任何需要Y的人 然而,Y似乎被加载到执行官的/ proc / pid / maps中。
我不确定为了调试X lib我可以采取哪些步骤,我们不胜感激。
答案 0 :(得分:4)
如果user756235可以在gdb下运行,那么这是一种使用this和this的方法。唯一的问题是在共享库X中制作完整的函数列表:nm ./libX.so | grep "T "
然后创建.gdbinit(在我的情况下,我控制print_in_lib
的args):
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
时:
host:srv2-x64rh5-01,OS:Linux 2.6.18-238.el5> gdb -q功能 “print_in_lib”未定义。断点1(print_in_lib)待定。 警告:在添加的符号文件中找不到可加载的部分 系统提供的DSO位于0x2aaaaaaa000,000:1 print_debug:0
my_lib.cpp上的断点1,print_in_lib(print_debug = 0,index = 0):7 7 if(print_debug){print_debug = 0 index = 0
my_lib.cpp上的断点1,print_in_lib(print_debug = 0,index = 1):7 7 if(print_debug){print_debug = 0 index = 1
my_lib.cpp上的断点1,print_in_lib(print_debug = 0,index = 2):7 7 if(print_debug){print_debug = 0 index = 2
my_lib.cpp上的断点1,print_in_lib(print_debug = 0,index = 3):7 7 if(print_debug){print_debug = 0 index = 3