LLDB中expr执行函数时断点不触发,如何让断点正常生效?
让LLDB在
expr调用函数时触发断点的解决办法 这个问题我之前调试时也踩过同款坑——LLDB默认用内联求值模式处理expr命令,它会尽量在当前调试上下文里直接计算表达式结果,而非完整走一遍函数的执行流程,自然就不会触发断点了。不过有两个实用方法能解决这个问题:
1. 单次调用时关闭内联求值
直接在expr命令后加上-i 0(或完整的--inline-evaluate 0)参数,强制LLDB真正执行函数的完整代码路径,这样断点就能正常触发。
示例命令:
(lldb) expr -i 0 foo()
执行后,LLDB会像正常运行函数一样,在你设置的foo断点处停下,你可以继续用continue、step等命令调试。
2. 全局关闭内联求值(永久生效)
如果经常需要在表达式求值时触发断点,可以修改LLDB的全局设置,默认关闭内联求值:
(lldb) settings set target.experimental.inline-evaluate false
设置完成后,之后所有的expr(或p、call)命令都会默认走完整的函数执行流程,断点都会正常工作。
注意事项
- 关闭内联求值后,表达式求值速度会变慢,因为LLDB要真正执行代码而非直接计算结果。
- 函数里的副作用操作(比如修改全局变量、IO操作)会真实发生,调试时要留意这一点。
内容的提问来源于stack exchange,提问作者fengxing
相关产品推荐
相关产品推荐

