【问题标题】:Programs randomly getting System.AccessViolationException程序随机获取 System.AccessViolationException
【发布时间】:2014-08-09 06:42:57
【问题描述】:

好的,所以我在调试方面遇到了很多问题。我正在使用 VS2013 Pro 和 Windows 8.1。两者都是最新的。问题是,当我开始调试时,有一半的时间会抛出此错误:

“System.AccessViolationException”类型的未处理异常 发生在 System.Windows.Forms.dll 中

附加信息:试图读取或写入受保护的内存。 这通常表明其他内存已损坏。

这也不是我的代码的错。我做了一个简单的测试作为下面的例子。请注意,我没有从这个应用程序中引用 System.Windows.Forms。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<int> testing = new List<int>();
                for(int i =0; i < 50; i++)
                {
                    testing.Add(i);
                }

                for (int i = 0; i < 50; i++)
                {
                    Console.WriteLine(testing[i].ToString());

                }

                Console.ReadLine();
            }
        }
    }

我不知道是什么原因造成的。如果我单击“确定”并再次运行它,它将起作用,大多数时候。有时我必须做两次。

有什么想法吗?

堆栈跟踪:

【问题讨论】:

  • 您可以通过编写控制台应用程序在System.Windows.Forms.dll 中获得该异常。您确定我们可以通过运行您的代码来重现该异常吗?
  • 正是我的观点。它不是我的代码。但我猜想与 Visual Studio 有关。如果必须,我可以制作视频大声笑来证明代码会产生错误。
  • 可能是调试器探测/反映变量...
  • @JABFreeware,也许它是一个 Visual Studio 扩展?该视频会很好,因为它可以帮助我们了解异常是从哪里生成的。
  • 你描述的不太可能。解决方案中还有其他项目吗?当您不在调试器下运行时会发生这种情况吗?您的控制台程序甚至链接到 Windows.Forms.Dll 吗?您是否启用了任何 Visual Studio 扩展? (如果是这样,请禁用它们。)我无法重现您的问题。显然,这里的其他人也不能。所以你的配置肯定有什么不同。

标签: c# debugging runtime-error


【解决方案1】:

将平台目标更改为 x86 对我有用,如果没有上述异常,单步执行代码是不可能的。我运行 Win 8.1 64 位和 Visual Studio 2013。

【讨论】:

    【解决方案2】:

    我也在 windows10 上使用 Visual Studio Express2015 遇到了这个问题。构建到 x86 并没有解决我的问题,但以下解决方法可以解决问题:

    此问题是由收集返回值的代码引起的。可以通过禁用托管返回值来解决此问题。

    1. 进入系统属性(Win8:WinKey+X,选择“系统”,Win7:从我的电脑打开“属性”)
    2. 高级系统设置
    3. 环境变量...
    4. 单击“新建”并添加
      • 名称:VSDebug_DisableManagedReturnValue
      • 值:1

    来源:https://connect.microsoft.com/VisualStudio/feedback/details/819552/visual-studio-debugger-throws-accessviolationexception

    【讨论】:

    • 链接已失效 :(
    • 在 VS2017 上的工作就像一个魅力。
    【解决方案3】:

    http://veriworld.verivox.ads/docs/DOC-6011?et=watches.email.document_comment#comment-4629

    似乎在某些情况下 VS/.net 框架存在内存践踏问题。我真希望人们在有人说有问题时不要再说“不可能”。

    【讨论】:

    • 链接失效了:(
    【解决方案4】:

    没有什么看起来可能会导致问题。

    您是否尝试过启用异常中断?这将导致您的代码在遇到异常时暂停。

    【讨论】:

    • 这似乎是 IDE 的问题。如果我不单步执行,代码运行良好,但执行时会出现访问冲突。
    • 我没有解决问题的方法,但这几乎可以肯定不是 IDE 问题。这种行为通常表明存在线程问题,即您会遇到某种竞争条件,这种情况在单步执行时会以一种方式发生,而在您直接运行时会以另一种方式发生。
    【解决方案5】:

    我可以确认这个问题。它发生在与我自己的商业应用程序一起分发的一个小型(非常微不足道的)WinForms 程序中。在 VS2005 的任何早期版本的 VS 中都没有发生过这种情况,包括在同一台机器上运行的那些。它只出现在 VS2013 中。我的 VS 版本除了 VS 本身安装的内容外,没有第 3 方加载项。即使“Main()”中的所有代码都被注释掉,也会出现问题。我已经尝试过重新启动、禁用病毒检查程序、防火墙等。我的应用程序所针对的 .NET 版本没有区别(2.0、3.5、4.0 等等)。它经常但随机地发生。有时它起作用,有时它不起作用。去图吧。

    【讨论】:

    • 我刚刚发现了connect.microsoft.com/VisualStudio/feedback/details/819552/…,它讨论了许多可能会影响这种情况的场景。安装 .NET 4.5.2 并没有为我解决这个问题,但是将“平台目标”从“任何 CPU”更改为“x86”确实(在“构建”属性页上)。不是理想的情况,但这是一个开始。
    • 我在 VS 2015 Enterprise 中调试一个相当复杂的 Windows 窗体应用程序时得到了这个。该错误是由 IBM iDbAccess 库引发的,并且在调试时始终如一地发生。如果我不单步执行,我的错误日志仍然会记录下来,因此调试会导致程序在异常上 break,但无论如何,异常都在幕后发生。我没有检查 Release 配置是否有这个问题,而且它似乎永远不会影响编译的可执行文件。
    • 我遇到了与 Joseph Morgan 所描述的问题类似的问题。如果我单步执行来自外部 .NET 库的反汇编代码,我只会收到错误消息。我认为 iDbAccess 可能是我的问题的根源,尽管错误是由 ...UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop 引发的。是否还有其他人遇到与此消息相关的 iDbAccess 问题?
    【解决方案6】:

    就我而言,这种 VS 行为是由 Comodo 防火墙引起的。

    解决方案是将 VS Projects 文件夹添加到 Comodo HIPS 排除列表(即使 HIPS 已关闭!)。

    这里有一个相关的帖子 Comodo 论坛:https://forums.comodo.com/empty-t98149.0.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 1970-01-01
      • 2017-05-12
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      相关资源
      最近更新 更多