能否编译带调试符号的C++共享库?如何调试库内源码?
调试带符号共享库的方法
1. 你的编译方式是正确的
你当前的编译命令已经带了-g参数,生成的libtest.so本身已经包含完整调试符号,不需要额外修改编译流程。
2. 前置准备:准备调用共享库的可执行文件
共享库无法直接运行,你需要先写一个调用libtest.so中导出函数的测试可执行文件,比如main.cpp,编译命令如下:
g++ -g main.cpp -o main -L. -ltest
运行前需要把当前目录加入动态库搜索路径,避免运行时找不到共享库:
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
3. 启动gdb调试
直接用gdb启动测试可执行文件即可:
gdb ./main
调试库内代码和调试普通可执行代码逻辑完全一致,常用操作包括:
- 给库内函数打断点:
b 函数名,如果gdb提示断点待加载,输入y确认即可,共享库加载后断点会自动生效 - 给库内源码指定行打断点:
b test.cpp:行号 - 断点触发后,正常用
step、next、print等常规gdb命令即可跟踪库内代码执行逻辑
常见问题排查
如果加了-g参数仍然看不到库内源码,可以用gdb的dir命令手动添加源码所在目录到搜索路径:
dir 你的源码所在目录的绝对路径
内容的提问来源于stack exchange,提问作者calvinhobbes123
相关产品推荐
相关产品推荐

