【发布时间】:2025-11-28 09:55:02
【问题描述】:
我有一个我设法从我的 DLL 创建的转储文件,该文件是为任何未处理的异常创建的。
当我在 n = 4 的情况下执行int* tt = new int[4]; return int[n]; 之类的操作时,我会得到转储文件,并且可以打开它,然后查看错误是在哪一行引起的。这对于直接从发布 exe 和发布 DLL 都是可能的。
现在这是一个简单的错误,我输入它只是为了测试我的内存转储创建。
我现在有一个 900kb 的转储文件,事件日志显示错误来自我的 .DLL,但如果我打开该文件,它不会显示任何源代码。
调用栈是
KERNELBASE.dll!RaiseException() + 0x3d 字节
clr.dll!RaiseTheExceptionInternalOnly() + 0x18f 字节
clr.dll!IL_Throw() + 0xe2 字节
000007fe81f65fd7()
00000000034d1610()
000000002d06ecb8()
436f93ce00050011()
436f93cf00110012()
000000002d06ec50()
00006d930c4f7680()
clr.dll!InlinedCallFrame::`vftable'()
000000002d06f3d8()
这根本无法帮助我弄清楚我的错误来自 DLL 中的哪个位置。 调试的另一个问题是,它只发生在实时 PC 上,但从不在我的调试系统上。谁能帮我找到一种方法来调试它?它似乎发生在调用 DLL 时,但是:不是每次,只是像每 2 次一样(有时是第一次尝试,有时是第 5 次)。我完全不知道这里发生了什么。
编辑: 使用加载的 Microsoft 符号更新了调用堆栈,但我仍然不知道这可能来自哪里。
【问题讨论】:
-
这只是证明我的内存转储功能正常工作的一种方式。如果我用 return int[4]; 调用它我会得到一个访问错误,这和我现在得到的一样,但我不知道访问错误可能发生在哪里。
标签: c++ debugging memory-dump