Qt Creator调试单步进入AddPizza跳转至allocator.h而非方法体问题
问题原因
该现象和你实现的业务代码逻辑无关,AddPizza及其他方法的实现没有问题,属于调试器的正常执行行为:
- 你调用
AddPizza时传入的第二个参数是就地构造的匿名vector<string>对象,单步进入函数调用时,调试器会按执行顺序先进入参数的构造逻辑。STL的vector内部默认使用allocator完成内存分配,因此你会先跳到标准库allocator.h的默认构造函数代码行 - 等匿名vector的构造流程执行完成后,才会进入你自己实现的
AddPizza函数体。你觉得无法进入函数内部,只是因为先执行了参数构造的标准库代码,走完这部分就会进入业务逻辑 - AddIngredient调用没有这个现象的原因是它的参数都不需要构造复杂的STL容器,要么参数构造逻辑被调试器默认跳过,要么执行流程太短没有被感知到
解决方案
- 方案1:直接在
AddPizza函数第一行打一个断点,触发调用后直接运行到断点位置,就能直接进入函数内部调试,不用走参数构造的单步流程 - 方案2:在Qt Creator的调试配置中开启「跳过标准库代码」的规则,将STL相关的头文件路径加入跳过列表,之后单步进入函数时会自动跳过标准库的参数构造逻辑,直接进入你自己实现的函数体
- 额外排查项:确认当前编译模式是Debug模式,没有开启O2等优化选项,优化等级过高会导致函数被inline、调试信息缺失,也会出现无法单步进入自定义函数的问题
内容的提问来源于stack exchange,提问作者some_math_guy
相关产品推荐
相关产品推荐

