我有好几次使用 Visual Studio 和其他东西编写程序,在换行符的某个地方。自然,我的第一个想法是在程序的早期设置一个断点,然后慢慢地逐行执行代码,直到出现错误。
但我经常发现,在调试器中缓慢单步执行代码时,一切正常。但是,当我只是尝试在没有断点的情况下运行程序时,出现了问题。
为什么会这样?逐行单步执行代码实际上与仅在 dubug 模式下运行程序不同吗?
(我不是在谈论调试与发布,我是在谈论调试与逐行调试)
我有好几次使用 Visual Studio 和其他东西编写程序,在换行符的某个地方。自然,我的第一个想法是在程序的早期设置一个断点,然后慢慢地逐行执行代码,直到出现错误。
但我经常发现,在调试器中缓慢单步执行代码时,一切正常。但是,当我只是尝试在没有断点的情况下运行程序时,出现了问题。
为什么会这样?逐行单步执行代码实际上与仅在 dubug 模式下运行程序不同吗?
(我不是在谈论调试与发布,我是在谈论调试与逐行调试)
一个原因可能是,当程序“全速”运行和在调试器中暂停线程时,多个执行线程之间会出现不同的时序问题。
这可能是由于某些线程不安全的操作在单步执行代码时似乎正确发生,但在运行时却没有。编译器优化被排除在外,因为您确定您正在运行调试版本。
在调试器中运行会大大改变运行时选项,例如。堆操作,以便可以检测到错误并将其呈现给用户。
见这里。
当进程在任何调试器下运行时,会自动为进程中的所有堆启用某些堆调试选项。
这不确定您的问题,但可能是候选人。