【发布时间】: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