今天在HP UNIX上面使用gdb调试so动态库遇到个错误,总结了一下,和大家分享下,以后遇到这样的错误,可以参考参考:
ERROR: Use the "objectdir" command to specify the search
path for objectfile test.o.If NOT specified will behave as a non -g compiled binary.
Breakpoint 2 at 0x9fffffffbf5ff8d1:2 from /tmp/test.so.
解决办法:
1.要把代码和object文件都传到需要调试的机器上面(如果文件比较多,传tar包比较方便)(参考注释1)
2.然后把目录的绝对路径整理出来(参考注释2)
3.进入gdb后
4.执行directory和objectdir命令,这两个分别是代码和.o的绝对路径,目录直接使用冒号:分隔
directory path1:patch2:patch3...pathn
objectdir path1:patch2:patch3...pathn
5.设置断点调试
注释1:
cp -R /tmp1/test /tmp/bak
tar -cvf bak.tar ./bak/*
gzip bak.tar
ls /tmp/bak.tar.gz
注释2:
可以到解压的根目录bak下执行find `pwd` -type d | tr '\n' ':'
就能列出所有的目录了
其他:
如果在p 变量的时候遇到下面的错误:
(gdb) p i
$2 = <value unavailable at address 0x9fffffffbf568860>
解决:
+O2,把makefile里面这个去掉,才能打印变量
或者
CFLAG = -D_REENTRANT +O2 (去掉)
CXXFLAG = -g0
就这两个优化参数,有哪个改哪个就行