使用gdb调试共享库代码[转]

http://hi.baidu.com/buptmawl/blog/item/a6b8f5f4719be3def3d38567.html

 

方法一:设定gdb环境变量 LD_PRELOAD;

方法二:如果你使用的gdb版本中对”pending breakpoint"提供支持(V6.3当中就有支持),那么恭喜你,你可以先设定一个pending breakpoint,然后有gdb来决定到什么时候这个断点起作用。这里面有一点必须注意,你必须指定你的链接库的位置,可以通过设定环境变量LD_LIBRARY_PATH来实现。在执行gdb之前,我们可以这样做: $ export LD_LIBARY_PATH=`pwd`,告诉gdb在当前目录下查找共享库文件,然后向往常一样调试程序就可以;

方法三:这种情况只针对你要调试的程序整个就是一个动态链接的可执行程序,它在load到内存之后,入口地址都是动态变化的,如果你使用gdb进行调试,最初的时候你用 b function_name的话,它把断点设在了以0x0为基址的offset上,而程序load到内存之后,这个基址已经变了,所以总是不能设置成功断点。(我在调试qemu的时候就遇到这种情况),怎么办呢?最简单的方法就是不把这个程序编译成可重载的,像普通程序一样去编译它,不要为gcc 添加 -wl,-shared等参数就行了,这时候编译出来的就很容易调试了;

你可能感兴趣的:(gcc,gdb)