|
|
1
4
您需要将执行此操作的代码放入异常过滤器中,当您到达异常处理程序时,异常的大部分上下文信息已经丢失。
你的过滤器看起来像这样
当然,对于64位体系结构,您需要稍微调整输出,因为在这种情况下,ExceptionAddress和AllocationBase将是64位数量。 |
|
|
2
1
这个
|
|
|
3
1
GetExceptionInformation将返回包含异常信息的EXCEPTION_POINTERS结构。ExceptionRecord成员包含ExceptionAddress成员,该成员是异常的地址。 您需要将这个地址映射到代码中的模块相对位置,这样才有用。您可以使用GetModuleHandlex和GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS来获取HMODULE(这也是模块的基址)。然后可以使用GetModuleInformation获取发生异常的模块的实际名称。 如果故障实际上在系统DLL中,这可能对您没有多大帮助。一个更复杂的方案是生成堆栈跟踪(在dbghelp中使用Stackwalk64),并忽略代码中没有的最顶层帧。 |
|
|
4
0
您可以避免为异常打印字符串的痛苦(如果您可以保存minidump,但无法格式化字符串而不崩溃,会发生什么情况?)而是通过保存小型转储并使用cdb。exe或windbg。exe来提取异常信息。 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |