我有一个转储文件,我设法从我的DLL中为任何未处理的异常创建。无法弄清楚我的代码有什么问题
当我做了类似int* tt = new int[4]; return int[n];
的事情,n = 4时,我会得到转储文件,并可以打开它,并查看导致错误的行。这对于发布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次(有时在第1次尝试,有时在第5次)。我完全迷失在这里发生的事情上。
编辑: 更新了加载Microsoft符号的调用堆栈,但我仍然不知道这可能来自哪里。
什么是'return int [n];'? – NPE
这只是一种证明我的内存转储功能正在工作的方式。如果我用return int [4]调用它;我会得到一个访问错误,这与我现在正在获取的错误是一样的,但我不知道访问错误可能发生的位置。 – SinisterMJ