如何通过GDB Tab补全功能补全函数名来设置断点?
解决GDB中链接库函数断点的Tab补全问题
1. 先确保链接库已加载
GDB得等链接库实际加载后,才能识别里面的函数。如果程序还没启动到加载库的阶段,Tab补全肯定没用。可以这么做:
- 用
start命令启动程序,停在main函数入口,这时大部分动态库已经加载完成 - 或者开
set stop-on-solib-events 1,让GDB在加载/卸载共享库时自动暂停,等库加载完再补全
2. 限定库名触发补全
直接输b foo::按Tab没反应的话,试试加上库名限定:
- 输入
b 你的库文件名.so::foo::(替换成实际的库文件名),再按Tab,GDB会列出该库下所有foo::开头的函数 - 也可以先跑
info functions foo::,先看清楚所有匹配的函数名,再复制过来设断点
3. 调整GDB补全设置
默认补全可能不够给力,改两个设置试试:
- 执行
set completion-display-width 0,取消补全结果的宽度限制,确保能显示完整函数名 - 执行
set max-completions 1000,提高补全结果的最大数量,避免函数太多被截断
4. 给长函数名设别名
如果某个复杂函数名要反复用,直接整个别名:
- 输入
define bfoo,然后换行输b foo::step,再输end保存这个自定义命令 - 之后直接敲
bfoo就能快速设断点,不用再输完整函数名
内容的提问来源于stack exchange,提问作者KKKmelody
相关产品推荐
相关产品推荐

