最近在使用gdb的过程中,需要对so文件进行调试,在这里记录一下调试中的问题及解决方法。
如何在so源文件中打断点?
首先编译so时需要-g指令。
在gdb xxx指令后,发现无法在so对应的源码文件中打断点,break指令找不到so中的类、源文件cpp,这里的方法就是需要在so加载进来后,就可以找到so文件的类名和源文件了,我们可以先run执行一遍,然后Ctrl+C结束,重新打断点即可找到类名、源文件,可以愉快的打断点了。
如何保存断点
在gdb中使用save b file.xx指令,文件名和后缀自定义即可。
如何加载打在so源文件中的断点
保存好断点文件后,我们可以通过加载断点:
gdb ./app -x file.xx
但发现如果在so中的断点,会提示找不到源文件。此时可以用source在gdb中动态加载断点文件,当然前提还是需要先把so加载进来,我们还是用打断点中的方法,然后执行:
source file.xx
大功告成。