我有两个循环,一个是嵌套的。这段代码只是在内存中移动数据块。当我设置一个断点来捕捉不正确的地址时,它几乎停止了循环,并且开始运行得非常慢(> 1分钟)。我尝试将地址值存储在变量中,然后在断点中比较它们:ad1!||ad3!= ad4.但它仍然会减慢代码的速度,并且由于某种原因,列表大小会变成一个巨大的值。当我关闭断点时,它运行得很好。有什么问题吗?
camsedfj1#
条件断点在时间关键型代码中开销很大。我建议您将签入代码移到断点之外,并将断点设置在if内。所以:
if (ad1 != ad2){ // Statement on which you break}
if (ad1 != ad2){
// Statement on which you break
}
语句可以是一个printf,这样它就不会被优化掉。
mrwjdhj32#
感谢Bowman Zhu-MSFT分享MSDN link to VS debugger docs在快速阅读中我发现to calculate the expression of a conditional breakpoint,调试器需要:1.解析表达式字符串。1.评估解析后的token(有sync和decompose方法)。条件断点计算很长的原因是因为每次调试器命中断点时都会运行这些步骤。正如我所理解的,解析的结果不是缓存的,因为你可以在运行时改变表达式,它需要每次解析表达式。如果你设置了cond,它会减慢你的应用程序的运行速度。关键代码中的断点(例如,具有数千次迭代的循环)。只需使用Grigore's answer中显示的代码模式。
2条答案
按热度按时间camsedfj1#
条件断点在时间关键型代码中开销很大。我建议您将签入代码移到断点之外,并将断点设置在if内。
所以:
语句可以是一个printf,这样它就不会被优化掉。
mrwjdhj32#
感谢Bowman Zhu-MSFT分享MSDN link to VS debugger docs在快速阅读中我发现to calculate the expression of a conditional breakpoint,调试器需要:
1.解析表达式字符串。
1.评估解析后的token(有sync和decompose方法)。
条件断点计算很长的原因是因为每次调试器命中断点时都会运行这些步骤。正如我所理解的,解析的结果不是缓存的,因为你可以在运行时改变表达式,它需要每次解析表达式。如果你设置了cond,它会减慢你的应用程序的运行速度。关键代码中的断点(例如,具有数千次迭代的循环)。只需使用Grigore's answer中显示的代码模式。