Visual Studio 断点在调试时自动禁用
Visual Studio Breakpoints being automatically disabled while debugging
我在VS 2012中运行C++代码。我设置了一个简单的断点
int main(int argc, char **argv)
{
time_t start_time;
time(&start_time);
DUALISO_TIME dualiso_time;
IO_TIME io_time = {0.0, 0.0};
IO_INFO io_info;
IJK::ERROR error;
cout <<"DEBUG "<< endl; // I have set a breakpoint.
调试断点时,断点会短暂变为白色(从红色变为白色),但调试器不会在断点处中断,它只是继续。(代码正在运行,因为它在控制台中打印 DEBUG。我已经搜索了一段时间,但还没有找到任何解决方案。
一些注意事项。特定项目被选为启动项目。我尝试过清洁和重建。代码的一部分肯定正在运行。我什至可以看到断点从红色短暂地变为白色,但调试器并没有在该点停止。这是屏幕截图
不会命中断点的一些原因:
- 可执行文件和代码不匹配。例如,您更改了代码,但可执行文件在您编译时正在使用中,并且实际上并未更新。
- 可执行文件在管理模式下运行,但 Visual Studio 以普通用户身份运行。
- 断点可以禁用,但仍存在。转到断点窗口,并确保断点已启用。
一个额外的原因,如果你至少使用 C#(不确定是否完全相同适用于C++项目):
当前生成配置未配置为生成 PDB 文件。
转到您的项目,右键单击> Properties
> Build
> Advanced...
> Debugging information
。
将其设置为 full
.
以下是一些尚未提及的原因:
- 宏可以在预处理阶段删除代码
- 优化。可以优化某些代码。不使用任何优化来调试。
当断点为白色时,表示 Visual Studio 无法将源文件中的位置与正在调试的应用程序匹配。 通常,发生这种情况的原因如下
- 源和可执行文件已过期。 完全重建通常可以解决此问题
- 找不到可执行文件的 PDB 文件。 转到调试 -> Windows -> 模块,并确保 PDB 已正确加载
这可能是由于编译器优化而发生的。如果使用gcc -O
进行编译,则程序将得到优化,并且在附加程序后禁用Visual Studio断点。要解决此问题,您可以在 -O 后面使用额外的 0 禁用编译器优化,如下所示。
gcc -O0
您也可以使用 gcc -Og
(可从 gcc 4.8 获得)。这应该允许优化和调试。
相关文章:
- Visual Studio 调试优化如何工作?
- 如何配置Visual Studio Code以使用cygwin,cmake和gcc进行调试
- 从 exe 文件 (Visual Studio ) 启动时调试断言失败
- 如何在调试中使用Visual Studio正确编译WebRTC?
- Android NDK - 无法在 Visual Studio 2017 中调试
- Visual Studio 2017 - 调试和 Relese 配置,设置运行时库
- OpenCV 3 Visual Studio 2017 调试,调用堆栈没有.pdb文件
- 在Visual Studio中运行/调试C ++时,如何在结束时等待输入
- Visual Studio 发布模式阻止在调试模式下执行的代码.使用 WinHTTP 和多线程
- 为什么我的程序无法在GDB在线编译器/调试器或Visual Studio C++ 2019中运行
- 附加调试器并以编程方式获取变量地址 Visual Studio
- 在 Visual Studio 中调试时,是否可以将一些 C/C++ 结构内容保存到磁盘?
- Visual Studio 2017调试控制台说"ops"
- Android Studio-在现有的旧项目中启用本机C++调试(card.io Android Source)
- 使用Visual Studio code Ubuntu调试c++代码
- Visual Studio图形调试器引发读取访问冲突异常
- 如何调试visual studio 2017生成的C++代码.android中的SO文件和其他第三方库
- 如何在visual studio代码的调试中运行c++脚本
- Visual Studio 2015 中的调试速度很慢 -- 无法关闭页面堆?
- C++使用 Visual Studio Code High Sierra 进行调试