【问题标题】:Visual Studio 2008 stopped displaying errorsVisual Studio 2008 停止显示错误
【发布时间】:2014-06-29 04:19:54
【问题描述】:

在闲置了几个月后,我决定再次使用 Microsoft Visual Studio (C#)。

点击“开始调试”后,我得到了 Windows 错误(我认为 svchost.exe 已停止工作),我不知道这是否与我要说的有关,但我没有得到例如,当我调用数组越界时出现任何错误。

程序只是不执行与错误相关的代码(我注意到数组和文件 I/O 问题),但继续正常运行,这让我抓狂,因为我必须在之后单击“开始调试”我编写每一行代码只是为了确保我是正确的。

所以,Debug > Exceptions,那边乱七八糟的,我之前没碰过。 任何帮助将不胜感激。

编辑:我已经重新启动了 3 次计算机,并且刚刚进行了清理和重建(项目),但没有任何改变。

EDIT2:对不起,如果它令人困惑,这里有一些新信息:

public partial class frmMain : Form
{
    PictureBox[] pic = new PictureBox[120];
    public frmMain()
    {
        InitializeComponent();
    }
    private void frmMain_Load(object sender, EventArgs e)
        {
            // Creating pictureboxes
            for (int i = 1; i <= 199; i++) //199 instead of 120 or 119 and the rest of the for isn't executed plus no error or warning displayed.
            {
                pic[i] = new PictureBox();

EDIT3:下面是另一个例子。如果我尝试在没有 try-catch 序列的情况下读取一个不存在的文件,那么整个 pic[] 矩阵就像在程序运行时从内存中卸载一样。

    pic[i].Image = Image.FromFile("H:\\My Pictures\\" + i + ".jpg");

EDIT4:感谢您的宝贵时间。我尝试了“Release”而不是“Debug”,问题得到了一段时间的修复。

当我决定在“OutofRangeException”上按“继续”而不是“中断”时,Windows 弹出此消息:“Windows 必须以兼容模式运行程序”。现在当我按下“开始调试”时,就像以前一样......

【问题讨论】:

  • 您遇到什么错误?您是否尝试过清理和重建整个应用程序?
  • 你试过重启电脑吗?
  • 我已经重新启动了 3 次我的计算机,并且刚刚进行了清理和重建(项目)。编辑:如果我做一个数学错误(转换错误或类似的东西)程序停止,但在数组上,例如,什么都没有,它只是跳过有问题的代码(例如在一个 for 循环中)。
  • 这里没有足够的信息。这是一个什么样的项目?其他项目有同样的问题吗?我什至不确定您的实际问题是什么,因为您的描述令人困惑。
  • @ErikFunkenbusch 我添加了更多信息,请查看。

标签: c#


【解决方案1】:

听起来您可能正在处理这个问题:

Something swallowing up unhandled exceptions?

基本上,在 64 位机器上构建时,有时会吞噬异常。

我相信它可能有一个修补程序,如下所述:

https://connect.microsoft.com/VisualStudio/feedback/details/357311/silent-exceptions-on-x64-development-machines

这里是修补程序:http://support.microsoft.com/kb/976038

否则,请尝试将目标构建设置为 x86 而不是 x64 或“任何 CPU”。也可以尝试在release模式下运行,看看有没有异常。

如果这不是问题,那么您可能需要重新安装 Visual Studio。如果您使用的是 Visual Studio Express,为什么不升级到比 2008 年更新的版本?

编辑:

另外,请尝试将所有服务包和补丁也应用到操作系统。如果您使用的是 Windows 7,那么您肯定应该使用 SP1。您还应该确保您使用的是 Visual Studio 2008 SP1 和所有补丁。

【讨论】:

  • 感谢您的宝贵时间。我尝试了“Release”而不是“Debug”,问题已经解决了一段时间。当我决定在“OutofRangeException”上按“继续”而不是“中断”时,Windows 弹出此消息:“Windows 必须以兼容模式运行程序”。现在当我按下“开始调试”时,就像以前一样......所以,看来我明天要安装 Vs2013 32 位(这对我来说是免费的)。和 64 位版本有什么大的不同吗?
  • @Achilles - 仅供参考,Visual Studio 没有“32 位”或“64 位”版本,它是一个版本,可以在两个版本上运行。我误解了“释放模式”的含义。我的意思是在没有调试器的情况下运行(即使它是调试版本)。按F5Start/Continue 运行调试器。 Ctrl-F5Debug-&gt;Start Without Debugging 在没有调试器的情况下运行
  • Ctrl-F5 解决了这个问题,虽然这个“不调试就开始”对我来说有点奇怪。感谢您的帮助!
【解决方案2】:

您在 Windows / .Net / C# / Wow64 中遇到了一个已知的错误功能,当 Form.Load 事件处理程序抛出异常时会发生这种情况。

VS2010 does not show unhandled exception message in a WinForms Application on a 64-bit version of Windows

来自Hans Passant's 回复:

这是由 Windows wow64 仿真层引起的一个令人讨厌的问题 允许 32 位代码在 64 位版本的 Windows 上运行。它 吞下触发 Load 事件的代码中的异常。 防止调试器看到它​​并介入。这是 显然很难修复,微软的 Windows 和 DevDiv 团队 手指来回指向。 DevDiv 对此无能为力, Windows 认为这是正确的行为,就像那样神秘 声音。这只是附加调试器的问题,您的代码将 像往常一样没有炸弹。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多