gdb 如何调试release版本

来源:互联网 发布:安知玉如意说的是什么 编辑:程序博客网 时间:2024/05/21 14:47

最近要发布release版本,直接运行时程序就挂掉了,于是乎就想gdb一下,结果发现只能看到堆栈,查了一些博文,将调试方法总结如下:


1、进入debug版本的目录,将debug版本中相应动态库或执行程序的符号表导出,命令如下

      objcopy --only-keep-debug   动态库名或可执行程序名  导出的符号文件名

      例:objcopy --only-keep-debug libDBCommon.so libDBCommon.so.debug

      如果需要调个动态库,每个动态库都执行一次上面的步骤,导出的符号名当然不能一样啦


3、将符号文件copy到release版的目录下(网上也有说在debug时可以用命令指定)


4、进入release目录,在release版的动态库或执行文件中添加调试信息文件链接,命令如下

      objcopy --add-gnu-debuglink=符号文件名    对应的动态库名

      例:objcopy --add-gnu-debuglink=libDBCommon.so.debug  libDBCommon.so

      调试多个动态库时执行多次,注意这时候原本release的动态库大小会增大一些


5、确认调试信息文件链接,命令如下

      objdump -s -j .gnu_debuglink 动态库名

      例:objdump -s -j .gnu_debuglink libDBCommon.so

      调试多个动态库时执行多次


6、启动调试

      gdb -q --symbol=第一个符号文件名:第二个符号文件名:第三个符号文件名 --exec=可执行程序名

      例:gdb -q --symbol=libDBCommon.so.debug:libDBNodeManager.so.debug:libcoremodule.so.debug --exec=scadaserver

      符号文件名可以是多个(动态库或执行程序的),中间用冒号隔开

0 0
原创粉丝点击