- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
每当我的代码生成结构化异常时,我都会使用以下代码创建一个小型转储文件:
void CreateMiniDump( EXCEPTION_POINTERS* pep )
{
// Open the file
typedef BOOL (*PDUMPFN)(
HANDLE hProcess,
DWORD ProcessId,
HANDLE hFile,
MINIDUMP_TYPE DumpType,
PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
PMINIDUMP_CALLBACK_INFORMATION CallbackParam
);
HANDLE hFile = CreateFile( _T("C:/temp/MiniDump.dmp"), GENERIC_READ | GENERIC_WRITE,
0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
HMODULE h = ::LoadLibrary(L"DbgHelp.dll");
PDUMPFN pFn = (PDUMPFN)GetProcAddress(h, "MiniDumpWriteDump");
if( ( hFile != NULL ) && ( hFile != INVALID_HANDLE_VALUE ) )
{
// Create the minidump
MINIDUMP_EXCEPTION_INFORMATION mdei;
mdei.ThreadId = GetCurrentThreadId();
mdei.ExceptionPointers = pep;
mdei.ClientPointers = TRUE;
MINIDUMP_TYPE mdt = MiniDumpNormal;
BOOL rv = (*pFn)( GetCurrentProcess(), GetCurrentProcessId(),
hFile, mdt, (pep != 0) ? &mdei : 0, 0, 0 );
// Close the file
CloseHandle( hFile );
}
}
LONG WINAPI MyUnhandledExceptionFilter(
struct _EXCEPTION_POINTERS *ExceptionInfo
)
{
CreateMiniDump(ExceptionInfo);
return EXCEPTION_EXECUTE_HANDLER;
}
我正在从我的应用程序的主入口点执行 SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
(虽然我没有为每个线程设置它)。之后为了测试这段代码,我执行了以下操作以生成访问冲突:int* p = 0; *p = 0;
确实生成了转储文件。然后我使用 windbg 打开转储文件并使用 .ecxr
命令获取异常记录。但是,那里没有任何信息(即我没有收到调用堆栈)。此外,如果我使用 !analyze -v
命令,那么它能够显示发生崩溃的行。有人知道我缺少什么以及如何解决这个问题吗?
顺便说一句,我正在使用带有/EHa(异步异常模型)标志的 VC7 编译器。
最佳答案
您的代码创建 minidump 没问题,问题是事后调试。调试器必须有权访问程序源代码、.pdb 文件(应该是构建此程序可执行文件时创建的 pdb 文件)和操作系统调试符号。只有拥有所有这些信息,调试器才能显示源代码和调用堆栈中的异常位置。
此处详细描述了使用 Visual Studio 调试器的事后调试过程:http://www.codeproject.com/KB/debug/postmortemdebug_standalone1.aspx对于 WinDbg,使用 Symbol、Source 和 Image 文件路径为调试器提供相同的信息。
关于c++ - 使用 SetUnhandledExceptionFilter() 为访问冲突异常创建小型转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4849530/
每当我的代码生成结构化异常时,我都会使用以下代码创建一个小型转储文件: void CreateMiniDump( EXCEPTION_POINTERS* pep ) { // Open the f
当发生未处理的异常时,我想打印堆栈跟踪而不是仅仅终止。我尝试使用 SetUnhandledExceptionFilter 来做到这一点: SetUnhandledExceptionFilter(Unh
我想让我的代码为未处理的异常创建转储。 我曾想过使用 SetUnhandledExceptionFilter。但是 SetUnhandledExceptionFilter 可能无法按预期工作的情况是什
Some resources似乎建议而不是使用 SetUnhandledExceptionFilter 要捕获未处理的异常,可以使用 AddVectoredExceptionHandler 通知所有异
我使用 SetUnhandledExceptionFilter 设置了一个异常处理程序,它工作正常。但是,如果我从 OpenMP 代码中抛出异常,我会看到标准的“应用程序崩溃”窗口并且不会调用处理程序
我正在做一个项目来增强我们的生产调试能力。我们的目标是在任何未处理的异常上可靠地生成小型转储,无论异常是托管的还是非托管的,以及它是发生在托管线程还是非托管线程上。 我们使用优秀的ClrDump目前这
我遇到了一个问题,我传递给 SetUnhandledExceptionFilter 的函数当异常代码 c0000374 引发时没有被调用。但它适用于异常代码 c0000005。然后我尝试使用 AddV
我是一名优秀的程序员,十分优秀!