【问题标题】:Different behaviour of code (debugging or not & different computers)代码的不同行为(是否调试和不同的计算机)
【发布时间】:2012-11-25 18:42:43
【问题描述】:

我在 Visual Studio 2010 中创建了一个运行 2 个使用事件(SetEvent()WaitForSingleObject()WaitForMultipleObjects())同步的线程的程序。发生以下情况:

  • 当我使用调试器运行这个程序时,它会运行一段时间然后崩溃

  • 当我在没有调试的情况下运行这个程序(.exe 文件)时,它会直接崩溃

  • 当我使用调试器在另一台计算机上运行此程序时,它会立即崩溃,并通过 .exe 文件在一段时间后崩溃

调试时报如下错误:

Unhandled exception at 0x5eafcaf7 (msvcr100d.dll) in test.exe: 0xC0000005: Access violation reading location 0x0036f000.

由于我不知道从哪里开始搜索,有人可以为这个主题带来一些启示吗?在调试器中运行代码与不运行代码有什么区别? (添加了哪种代码?)为什么不同的计算机在运行相同的代码时会有不同的行为?

在两台计算机中都有完全相同的操作系统(Windows 7),我假设使用相同的库和补丁。

感谢您的帮助!


编辑 11.12.2012

我已经安装了应用程序验证程序并在 Visual Studio 中显示一些错误,如下所示:

=========================================================== 
VERIFIER STOP 0000000000000013: pid 0x1E18: first chance access violation for
current stack trace

000000000874F000 : Invalid address being accessed
000000005201CAF7 : Code performing invalid access
000000000009E440 : Exception record. Use .exr to display it.
000000000009DF50 : Context record. Use .cxr to display it.
===========================================================

有人知道我如何查看哪个地址属于哪一行代码以确切知道异常发生的位置吗?我还在程序的帮助中阅读了使用命令“!heap p -a ACCESS_ADDRESS”应该提供有关错误性质和溢出的堆块的详细信息。我应该在哪里使用 Visual Studio 放置这个命令?

【问题讨论】:

  • 您是否在程序开始处放置了断点?它可能正在吃一个致命的例外,而不是告诉你。如果您想在 Visual Studio 之外对其进行测试,请尝试将 Debugger.Launch 放在开头。它将提示您将外部应用程序附加到 Visual Studio 调试器。 (对于调试已部署的应用程序很有用!)
  • 是的,我已经这样做了,我可以调试一段时间。在VS之外进行测试的目的是什么?你用过Pageheap.exe(Page Heap工具)吗?

标签: windows multithreading visual-studio-2010 visual-studio visual-studio-debugging


【解决方案1】:

在多线程环境中工作时,不同线程上的事情可能以不同的速度发生。在没有相关代码的情况下试图找出可能的原因是相当困难的。

该错误是一般的内存访问冲突错误。这通常发生在从函数返回的变量大于预期或类型不同时。

我们可以看看代码吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多