通常当我遇到这个问题时,这是因为调试器在错误的模式下调试。例如,我正在尝试调试托管代码,但调试器附加在本机调试模式下。自动启动调试器时不知道如何选择调试模式。但是,如果您在没有调试器的情况下启动应用程序,然后选择“调试 -> 附加到进程”,您将能够在选择进程时选择所需的调试模式。“自动确定要调试的代码类型”通常对我不起作用。对我来说,调试 Native 和 Managed 似乎很受欢迎。所以有时我经常只选择一种模式,直到断点在我需要的模式下正常工作。
今天我发现了一个新案例,我无法在代码中打断点。所以我在这里添加信息。调试 C/CLI 代码时,我无法让断点在 Visual Studio 2019 中保持红色(活动)。它是原生 C++ 和 C# 的混合体。为了让事情正常工作,我必须在工具 -> 选项 -> 调试 -> 常规下禁用“启用编辑并继续”。此外,当我附加到该过程时,我使用了“托管兼容模式”以及我正在构建的托管 .net 版本。所以“托管(.Net 4x)代码”。我不确定最后一次更改是否必要。但我想在我忘记这一切之前更新它。
我有时无法打断点的第二个原因是加载的代码与我的符号不匹配。我使用调试窗口“模块”来查看符号是否已加载。如果没有,我会检查加载文件的时间和日期是否与我刚刚构建的相符。未加载符号时,右键单击模块并选择“符号加载信息...”也很有用。因为这列出了编译器在哪里搜索符号。