无法弄清楚我的代码中有什么问题

时间:2012-12-20 13:00:02

标签: c++ debugging memory-dump

我有一个转储文件,我设法创建,来自我的DLL,它是为任何未处理的异常创建的。

当我使用n = 4的int* tt = new int[4]; return int[n];之类的东西时,我会得到转储文件,并且可以打开它,并查看错误导致的行。直接来自release exe和release DLL都可以实现这一点。

现在这是一个简单的错误,我只是输入它来测试我的内存转储创建。

我现在有一个900kb的转储文件,事件日志说错误来自我的.DLL,但如果我打开文件,它就不会显示任何源代码。

调用堆栈是

  

KERNELBASE.dll!RaiseException()+ 0x3d bytes
      clr.dll!RaiseTheExceptionInternalOnly()+ 0x18f bytes
      clr.dll!IL_Throw()+ 0xe2 bytes
      000007fe81f65fd7()
      00000000034d1610()
      000000002d06ecb8()
      436f93ce00050011()
      436f93cf00110012()
      000000002d06ec50()
      00006d930c4f7680()
      clr.dll!InlinedCallFrame ::`vftable'()
      000000002d06f3d8()

这根本无法帮助我找出我的错误来自DLL的位置。 调试它的另一个问题是,它只发生在live-PC上,但从不在我的调试系统上。任何人都可以帮我找到一种方法来调试这个吗?它似乎发生在DLL的调用上,但是:并非每次都有,只是每次第二次(有时是第一次尝试,有时是第5次)。我完全迷失在这里发生的事情。

编辑: 更新了加载了Microsoft符号的调用堆栈,但我仍然不知道它可能来自何处。

1 个答案:

答案 0 :(得分:2)

您需要加载kernelbase.dll的符号。可能还有clr.dll。

据推测,您正在使用visual studio? 将其设置为访问Microsoft软件符号服务器中的符号:http://msdn.microsoft.com/en-us/library/b8ttk8zy(v=vs.80).aspx

您可能需要右键单击callstack中的项目并告诉它加载符号。

此外,请确保为您制作的任何软件版本保留pdb文件的副本。