如何在GDB调试时避免单步进入C++内置类型及STL容器的实现代码
GDB避免单步进入C++ STL容器实现代码的方案
- 方案1:使用内置skip规则(推荐,GDB 7.4及以上版本支持)
直接执行以下命令即可全局跳过所有STL实现代码:
# 跳过所有std命名空间下的函数 skip -rfu ^std:: # 也可匹配STL头文件路径,避免进入库文件代码 skip -r ^/usr/include/c\+\+/.*
执行完成后再调用step命令,会直接跳过STL实现,进入你自己定义的addInfo等业务函数内部。
你可以通过info skip查看已生效的跳过规则,skip delete [规则序号]删除不需要的规则。如果希望每次启动GDB自动生效,可以把上述命令写入~/.gdbinit配置文件。
方案2:临时跳出STL代码
如果不想配置全局规则,不小心单步进入STL实现后,直接输入until命令即可执行到当前函数返回,回到你的业务代码上下文。也可以指定业务函数的行号直接跳转,比如你的addInfo函数第一行是行号45,执行until 45就会直接运行到该行停下。方案3:老版本GDB兼容方案(7.4以下版本)
可以自定义单步宏实现自动跳过逻辑,在GDB中执行或者写入~/.gdbinit:
define mystep step while ($pc =~ /^std::/) || ($filename =~ /^\/usr\/include\/c++\//) step end end # 绑定快捷键s到自定义单步命令 alias s = mystep
之后使用s命令单步就会自动跳过STL实现代码。
内容的提问来源于stack exchange,提问作者marlon
相关产品推荐
相关产品推荐

