如何在WSL2 Ubuntu中用GDB调试libfuse.so动态链接库?
解决WSL2 Ubuntu下调试libfuse的问题
1. 安装libfuse的调试符号包
Ubuntu默认安装的libfuse库不带调试信息,需安装对应调试包以获取符号和行号支持:
sudo apt-get install libfuse2-dbg
该包会为libfuse.so.2补充调试符号,并映射源码路径,让GDB能识别库函数的具体实现位置。
2. 确保自身程序编译时包含调试符号
修改Makefile,在编译参数中添加-g -O0,关闭优化并生成完整调试信息:
CFLAGS += -g -O0 $(shell pkg-config fuse --cflags) LDFLAGS += $(shell pkg-config fuse --libs) your_fuse_program: your_fuse_program.o $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
重新编译程序,确保生成的可执行文件带有调试符号。
3. 正确使用GDB调试libfuse代码
- 启动GDB并加载你的程序:
gdb ./your_fuse_program - 在程序启动前,设置目标libfuse函数的断点(比如你关注的
fuse_fs_write_buf):b fuse_fs_write_buf - 运行程序(需传入fuse挂载参数,比如挂载点路径):
run /path/to/your/mountpoint - 触发断点后,使用
step(简写s)命令步入libfuse源码,next(简写n)单步执行,此时GDB会显示正确的函数行号信息。
4. 解决"You can't do that when your target is `exec'"报错
这个错误是因为你在程序未启动(目标处于exec状态)时尝试手动加载libfuse.so.2。无需手动加载库,只要安装了调试包,GDB会在程序调用libfuse函数时自动加载对应的调试符号。
额外提示
若安装调试包后仍无法查看libfuse源码,可下载与系统版本一致的libfuse源码包,然后在GDB中指定源码路径映射:
set substitute-path /usr/src/libfuse /your/local/libfuse-source-path
内容的提问来源于stack exchange,提问作者Yuki Lau
相关产品推荐
相关产品推荐

