我有一个我设法从我的 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 符号更新了调用堆栈,但我仍然不知道这可能来自哪里。