Visual c++ Visual Studio在遇到断点时是否冻结所有线程?

Visual c++ Visual Studio在遇到断点时是否冻结所有线程?,visual-c++,breakpoints,visual-studio-debugging,visual-studio-2019,Visual C++,Breakpoints,Visual Studio Debugging,Visual Studio 2019,我发现了一个错误,当我运行一个单独的(幸运的是开源的)库时,当我正常运行它时,它会遇到错误并崩溃 但是,当它放置一个断点来跟踪并找出它崩溃的原因时。。它起作用了 我怀疑发生的情况是,包含断点的线程正在等待另一个线程完成一个任务,如果没有这个任务,它就会崩溃。通常,另一个线程还没有准备好。但是,当我有一个断点时,在单击“跳过”之前,它还有时间完成。我知道我可以在断点被击中后强制其他线程冻结,但我确实希望冻结在我击中断点的那一刻。当调试器遇到断点时,调试器会停止进程中的所有线程。这可以通过打开Deb

我发现了一个错误,当我运行一个单独的(幸运的是开源的)库时,当我正常运行它时,它会遇到错误并崩溃

但是,当它放置一个断点来跟踪并找出它崩溃的原因时。。它起作用了


我怀疑发生的情况是,包含断点的线程正在等待另一个线程完成一个任务,如果没有这个任务,它就会崩溃。通常,另一个线程还没有准备好。但是,当我有一个断点时,在单击“跳过”之前,它还有时间完成。我知道我可以在断点被击中后强制其他线程冻结,但我确实希望冻结在我击中断点的那一刻。

当调试器遇到断点时,调试器会停止进程中的所有线程。这可以通过打开Debug | Windows | Threads对话框、切换线程上下文和查看每个冻结线程的调用堆栈来看到。线程争用错误主要取决于计时。让代码稍微快一点或慢一点,错误就不会出现。可以像调试库的非优化构建一样简单。除非显式公布,否则必须假设库永远不会是线程安全的,因此必须自己将调用序列化到库中。