4

我想监视(调试)一个用 C 语言编写的 linux 动态库。
我想看看何时以及将哪些参数传递给它。

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

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

此外,当在 exec 上使用 ldd 命令时,它没有提及任何关于 libs X 或 Y 的内容
。ldd Y,表明 Y 需要 X。

在所有库上使用 ldd,项目中的 exec 没有提到任何需要 Y 的人。
但 Y 似乎已加载到 exec 的 /proc/pid/maps 中。

我不确定我可以采取哪些步骤来调试 X lib,不胜感激。

4

1 回答 1

4

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

然后创建 .gdbinit (在我的情况下,我控制 args 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,print_in_lib (print_debug=0, index=0) at my_lib.cpp:7 7 if (print_debug) { print_debug = 0 index = 0

断点 1,print_in_lib (print_debug=0, index=1) at my_lib.cpp:7 7 if (print_debug) { print_debug = 0 index = 1

断点 1,print_in_lib (print_debug=0, index=2) at my_lib.cpp:7 7 if (print_debug) { print_debug = 0 index = 2

断点 1,print_in_lib (print_debug=0, index=3) at my_lib.cpp:7 7 if (print_debug) { print_debug = 0 index = 3

于 2012-07-02T10:33:24.223 回答