gdb debuginfo
gcc/g++ 加-g选项编译程序mypro, 依次执行以下命令:
objcopy --only-keep-debug mypro mypro.debuginfo
objcopy --strip-debug mypro
objcopy --add-gnu-debuglink=mypro.debuginfo mypro
只需要把mypro 和 mypro.debuginfo 复制到客户机器上就可以调试了。
遇到问题: 当myproc是静态编译时,myproc多线程无法调试。
解决方法: 编译机器和客户机器上的libthread_db.so.1不一致导致。 复制编译机器的libthread_db.so.1到客户机器上
开gdb, 设置set libthread-db-search-path libthread_db路径, 设置add-auto-load-safe-path libthread_db路径,就可以了
GDB之所以可以查看到源代码,是因为它知道源代码放在哪里。
在一个调试会话中,GDB维护了一个源代码查找目录列表,默认值是编译目录和当前工作目录。当GDB需要一个源文件的时候,它依次在这些目录中查找,直到找到一个或者抛出错误。
GDB还维护了一个路径替换规则,将要搜索的原始路径按照找到的第一个规则做前缀替换,然后再在源码搜索目录中查找文件。
GDB允许明确指定源代码位置,或者路径替换规则,以应付源代码位置迁移的情况。
directory path-list:将一个或者多个源代码搜索目录加入到当前源码搜索目录列表的前面,目录之间使用空格间隔。
directory:不带参数的directory将源码搜索目录恢复为默认值。
set directories path-list:将源码目录设置为path-list,但是会补上默认目录。
show directories:显示源码搜索目录列表。
set substitute-path from to:设置目录替换规则,放置在规则列表的末端。
unset substitute-path [path]:删除path对应的替换规则,或者删除所有的替换规则。
show substitute-path [path]:显示path对应的替换规则,或者显示所有的替换规则。