异想天开

What's the true meaning of light, Could you tell me why

linux动态库调试

日期:2014-10-27 17:10:17
  
最后更新日期:2016-03-06 13:54:49
【技术】
1.用gdb直接启动程序的方式
这种方式很多时候,用directory设置一下库代码目录,然后list一下库的源代码。假设库a,在/data/bar目录有foo.cpp。
[code lang="cpp"]
directory /data/bar
list foo.cpp:1
[/code]
若显示出foo.cpp的代码,则可以在foo.cpp里面行数设断点


2.程序已经运行
通过gdb -p pid动态调试它,若出现类似这样的字符串,"Reading symbols from /home/data/OpenRTMFP-Cumulus-a87e455/CumulusLib/libCumulus.so...done.",则表示对应的库的symbols加载好了。注意,编译的时候,库的路径,最好使用绝对路径,否则可能symbols不会被加载。

注:
其实没有必要动态单步调试,只需要将函数调用链存放在共享内存里面即可。