为什么VS2010调试器不能停在我的断点处?

11

我正在使用VS2010开发一个C#.NET类库项目。在我的项目设置 -> 调试设置中,我将项目设为启动外部程序(C:\Windows\SysWOW64\wscript.exe),该程序运行一个非常简单的jscript文件(test.js)。该脚本只是创建了一个类的实例并调用了其中的一个方法。

问题是,当我开始调试时,VS2010没有停止在任何断点处。如果我在VS2008中打开完全相同的项目,它会停在断点处。是否有新的设置阻止了断点的被触发?是否有其他人遇到过这个问题?


你是否有符号存在,并且确定源代码与你正在调试的程序集相同?你是否重新构建了代码? - Merlyn Morgan-Graham
如果我更改源代码,我会在输出中看到更改。是的,我已经尝试重新构建。 - PICyourBrain
12个回答

10
为解决这个问题,需要为使用该组件进行调试的应用程序创建一个配置文件,并添加以下数据:
<?xml version="1.0"?>
<configuration>
  <startup>
     <supportedRuntime version="v2.0.50727"/>
  </startup>
</configuration>

使用这个文件,你可以告诉调试器在调试时使用正确的运行时版本(默认情况下,调试器似乎使用 4.0 版本)。


10

我首先会禁用 "仅限我的代码" 选项

  • 工具 -> 选项
  • 调试器
  • 取消选中 "启用仅限我的代码"

然后再次尝试该场景。


7

我花了一整天的时间去找出为什么我无法调试我的Visual Studio 2012控制台应用程序,结果让人尴尬。

原来我是在“发布”模式下运行它。

有时候,显而易见的事情却很难发现。


这对我来说解决了问题!调试器只在我的代码分支(返回语句和 if 语句)处停止,这实际上非常合理,仔细一想;它与我的程序控制流相一致。切换到调试模式就解决了问题! - Don

3

关闭Visual Studio集成开发环境,然后重新打开它。现在应该可以正常工作了。我也曾遇到过同样的问题,使用这种方法克服了它。


3

我有一个“重建”过的VS2013项目,无法进行调试(没有符号)。 最后,我看到优化被选中了(项目 ->属性 ->生成)。 我取消勾选并重新构建了一下。 符号终于成功加载了。 我想说的是,只有在绝对必要时才使用(编译)优化。


2

虽然我不能回答为什么会发生这种情况,但我可以为您提供解决方法。

  1. Include

    using System.Diagnostics;
    
  2. At the very beginning of your code (Class constructor for instance) place the following lines:

    #if (DEBUG)
                    while(!Debugger.IsAttached);
                    Debugger.Break();
    #endif
    
  3. Start debugging.

  4. Menu Tools→Attach to Process
  5. Attach to your process.

断点应该在您的代码中触发。 其他断点也应该被触发。


0

可能有很多原因。通常是因为您正在尝试针对错误的版本进行调试。

这些操作大约80%的时间都有效。

  • 获取最新代码
  • 清理
  • 重新构建
  • 重启IIS
  • 再试一次

如果还不行,请转到“调试”>“窗口”>“模块”,如果相关的dll在那里,请右键单击它并加载符号。

如果列表中没有它,请尝试运行代码。有时,即使它说断点将不会被命中,也只是因为dll直到您进入需要它的场景才会被加载。尝试依赖于dll的场景,它可能会命中断点。

哦,还有一个想法,重新启动浏览器。您可能已经从旧的dll中缓存了某些内容。


0

如果原因是错误的.NET运行时版本(这是我的问题),而不是创建配置文件,您可以在附加到进程对话框中选择正确的版本。

在对话框中,在附加到旁边单击选择,并从自动...切换到调试这些代码类型,在那里您应该检查正确的版本。

如果这也是您的问题,则您可能会在断点处收到“未加载符号”的消息。在选择正确版本后,您应该立即看到不再报告此错误。


0
问题可能是您的浏览器正在使用缓存的页面版本,而您正在使用该页面。 尝试在浏览器地址栏中添加一些无意义的额外查询字符串,例如添加?NONSENSE = 1234 这将强制浏览器使用 Web 页面的新版本,因为它不知道页面是否应该以此查询方式显示不同。 下次使用?NONSENS = 1235。

0

我遇到了类似的问题,但是它出现在CLR项目中。我的CLR项目中有一些旧的C++语法。对于我来说,在“工具”>“选项”>“调试”>“常规”中启用“使用托管兼容模式”后,它开始命中断点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接