c++ - 无法弄清楚我的代码有什么问题

标签 c++ debugging memory-dump

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

当我做了类似 int* tt = new int[4]; 的事情时return int[n]; 当 n = 4 时,我会得到转储文件,然后打开它,看看在哪一行引起了错误。这对于直接从发布 exe 和发布 DLL 都是可能的。

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

我现在有一个 900kb 的转储文件,事件日志显示错误来 self 的 .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 中的何处。 调试的另一个问题是,它只发生在实时 PC 上,但从来没有发生在我的调试系统上。谁能帮我找到调试方法?它似乎是在调用 DLL 时发生的,但是:不是每次都发生,只是像每 2 次一样(有时是第一次尝试,有时是第 5 次)。我完全不知道这里发生了什么。

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

最佳答案

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

想必您正在使用 visual studio? 将其设置为从 Microsoft 符号服务器访问符号:http://msdn.microsoft.com/en-us/library/b8ttk8zy(v=vs.80).aspx

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

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

关于c++ - 无法弄清楚我的代码有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13972763/

相关文章:

c++ - 双向 map 是否有更有效的实现?

ubuntu - Google crashpad 上的一个交叉编译平台应用程序。 Ubuntu 中无法读取 dmp 文件

Mysql如何修复指定键太长错误?

c++ - 关于转储 ram 方法的问题 [所有语言和平台]

android - MAT (Eclipse Memory Analyzer) - 如何从内存转储中查看位图

windows - 为意外停止的 Windows 服务生成内存转储

c++ - Visual Studio 中 dllimport 的用例

c++ - 使用导出的成员函数返回指向 MSG 的指针 - DLL

c++ - 需要在一些分配后打印一个字符串。但输出为空白。错误是什么?

.net - 如何在不使用Visual Studio的情况下调试.net应用程序