导航:首页 > 文件类型 > dump文件怎么获取linux

dump文件怎么获取linux

发布时间:2024-06-12 11:22:24

⑴ 如何手工抓取mp文件

通常在CDialog::OnInitDialog中调用,用于将对话框定位到应用程序主窗口的中央。在缺省情况下,这个函数将子窗口定位到它们的父窗口的中央,而将弹出窗口定位到拥有者的中央。如果弹出窗口没有拥有者,它将被定位到屏幕中央。如果要使窗口根据不是父窗口也不是拥有者的窗口来定位,则可以将pAlternateOwner参数可以被设为一个有效的窗口。如果要强迫相对于屏幕定位,则应在pAlternateOwner参数中传递CWnd::GetDesktopWindow返回的值。

⑵ 如何让程序抓到mp文件,MiniDumpWriteDump

程序崩溃(crash)的时候, 为了以后能够调试分析问题, 可以使用WinDBG要把当时程序内存空间数据都保存下来,生成的文件称为mp 文件。

步骤:
1) 打开WinDBG并将之Attach 到crash的程序进程
2) 输入产生mp 文件的命令
WinDBG产生mp 文件的命令是 .mp ,可以选择不同的参数来生成不同类型的mp文件。

选项(1): /m
命令行示例:.mp /m C:\mps\myapp.dmp
注解: 缺省选项,生成标准的minimp, 转储文件通常较小,便于在网络上通过邮件或其他方式传输。 这种文件的信息量较少,只包含系统信息、加载的模块(DLL)信息、 进程信息和线程信息。

选项(2): /ma
命令行示例:.mp /ma C:\mps\myapp.dmp
注解: 带有尽量多选项的minimp(包括完整的内存内容、句柄、未加载的模块,等等),文件很大,但如果条件允许(本机调试,局域网环境), 推荐使用这中mp。

选项(3):/mFhutwd
命令行示例:.mp /mFhutwd C:\mps\myapp.dmp
注解:带有数据段、非共享的读/写内存页和其他有用的信息的minimp。包含了通过minimp能够得到的最多的信息。是一种折中方案。

上面介绍如如何用WinDBG 生成crash mp 《WinDBG 技巧:如何生成Dump 文件(.mp 命令) 》,但是用户机器上通常不安装WinDBG, 而且多数用户也不知道怎么使用WinDBG。 所以最好是自己程序里面能够捕捉exception/crash,并且生成crash mp,然后通过网络传回到自己服务器。

捕捉exception 可以用API 函数 SetUnhandledExceptionFilter 。
生成crash mp 可以用DbgHelp.dll 里面的MiniDumpWriteDump 函数。

LPTOP_LEVEL_EXCEPTION_FILTER WINAPI SetUnhandledExceptionFilter( __in LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter );

BOOL WINAPI MiniDumpWriteDump( __in HANDLE hProcess, __in Dword ProcessId, __in HANDLE hFile, __in MINIDUMP_TYPE DumpType, __in PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, __in PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam, __in PMINIDUMP_CALLBACK_INFORMATION CallbackParam );

代码实例】

#include <dbghelp.h>
#include <shellapi.h>
#include <shlobj.h>

// 自定义的exectpion filter

LONG WINAPI MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS*pExceptionPointers)
{

SetErrorMode( SEM_NOGPFAULTERRORBOX );

//收集信息

CStringW strBuild;
strBuild.Format(L"Build: %s %s", __DATE__, __TIME__);
CStringW strError;
HMODULE hMole;
WCHAR szMoleName[MAX_PATH] = L"";
GetMoleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,(LPCWSTR)pExceptionPointers->ExceptionRecord->ExceptionAddress,&hMole);
GetMoleFileName(hMole, szMoleName, ARRAYSIZE(szMoleName));
strError.AppenedFormat(L"%s %d , %d ,%d.",szMoleName,pExceptionPointers->ExceptionRecord->ExceptionCode,pExceptionPointers->ExceptionRecord->ExceptionFlags,pExceptionPointers->ExceptionRecord->ExceptionAddress);

//生成 mini crash mp

BOOL bMiniDumpSuccessful;
WCHAR szPath[MAX_PATH];
WCHAR szFileName[MAX_PATH];
WCHAR* szAppName = L"AppName";
WCHAR* szVersion = L"v1.0";
DWORD dwBufferSize = MAX_PATH;
HANDLE hDumpFile;
SYSTEMTIME stLocalTime;
MINIDUMP_EXCEPTION_INFORMATION ExpParam;
GetLocalTime( &stLocalTime );
GetTempPath( dwBufferSize, szPath );
StringCchPrintf( szFileName, MAX_PATH, L"%s%s", szPath, szAppName);
CreateDirectory( szFileName, NULL );
StringCchPrintf( szFileName, MAX_PATH, L"%s%s\\%s-%04d%02d%02d-%02d%02d%02d-%ld-%ld.dmp",
szPath, szAppName, szVersion,
stLocalTime.wYear, stLocalTime.wMonth, stLocalTime.wDay,
stLocalTime.wHour, stLocalTime.wMinute,stLocalTime.wSecond,
GetCurrentProcessId(), GetCurrentThreadId());
hDumpFile = CreateFile(szFileName, GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_WRITE|FILE_SHARE_READ, 0, CREATE_ALWAYS, 0,0);

MINIDUMP_USER_STREAM UserStream[2];
MINIDUMP_USER_STREAM_INFORMATION UserInfo;
UserInfo.UserStreamCount = 1;
UserInfo.UserStreamArray = UserStream;
UserStream[0].Type = CommentStreamW;
UserStream[0].BufferSize = strBuild.GetLength()*sizeof(WCHAR);
UserStream[0].Buffer = strBuild.GetBuffer();
UserStream[1].Type = CommentStreamW;
UserStream[1].BufferSize = strError.GetLength()*sizeof(WCHAR);
UserStream[1].Buffer = strError.GetBuffer();

ExpParam.ThreadId = GetCurrentThreadId();
ExpParam.ExceptionPointers = pExceptionPointers;
ExpParam.ClientPointers = TRUE;

MINIDUMP_TYPE MiniDumpWithDataSegs = MiniDumpNormal
| MiniDumpWithHandleData
| MiniDumpWithUnloadedMoles
|
| MiniDumpScanMemory
| MiniDumpWithProcessThreadData
| MiniDumpWithThreadInfo;
bMiniDumpSuccessful = MiniDumpWriteDump(GetCurrentProcess(),GetCurrentProcessId(),
hDumpFile, MiniDumpWithDataSegs, &ExpParam, NULL,NULL);
// 上传mini mp 到自己服务器(略)

...

return EXCEPTION_CONTINUE_SEARCH; //或者 EXCEPTION_EXECUTE_HANDLER 关闭程序

}

int _tmain()
{
// 设置 execption filter

SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
....
return 0;
}

正常情况下不会生成mp,需要自己在程序中添加代码实现,一般是利用MS的dbghelp.dll提供的DbgHelpCreateUserDump来生成,用WinDbg来分析,期间需要编译程序生成的.pdb文件。可以参考BlackBox、google breakpad等

crash 文件生成的路径:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug]
"Auto"="0"
"Debugger"="\"D:\\WinDBG\\ntsd.exe\" -p %ld -e %ld -g -noio -c \".mp /ma /u d:\\dbgdmp\\dmp.dmp; q"
"UserDebuggerHotKey"=dword:00000000

⑶ 电脑蓝屏后如何找到mp文件

直观地说,蓝屏是系统崩溃。操作系统在遇到致命错误导致崩溃时,并不是直接挂掉,而是会记录下当时内存中的数据,将其存储成为mp文件,并用一串蓝屏代码向用户做出提示。 ‍
第一步,打开电脑的mp文件存储功能。在“我的电脑”上右键——属性——高级,选好后点确定,下次再出现蓝屏时,系统就会存储下mp文件,一般存放位置在系统盘的minimp文件夹下。(建议在该文件夹上点右键——属性——发送到——桌面快捷方式,以后就能在桌面上找到该文件夹了)
第二步,下载安装windbghttp://www.microsoft.com/whdc/devtools/debugging/installx86.mspx#a
这个过程就不说了,随便选一个下载,安装时,一路“下一步”就行了。
第三步,使用windbg诊断蓝屏错误
上面两步设好后,就想办法开始“制造”蓝屏吧,平时怎么用会出现蓝屏就拼命用直到出现蓝屏.
蓝屏后重启,在minimp文件夹下会出现一个以日期为文件名的东东,那就是我们要的了。接下来打开windbg,点屏幕左下的 “开始”,软件启动点File——Open Crash Dump, 然后找到minimp文件夹,mp文件一般是"时间.dmp",打开后就会自动分析了。分析完后,看最下面,找到3.probably caused by这一行, 那个myfault.sys文件就是罪魁祸首。 导入mp文件分析完毕后,不要关闭,在后面输入 !analyze -v ,这个命令可以查看mp文件的详细情况

阅读全文

与dump文件怎么获取linux相关的资料

热点内容
90版本升级不送 浏览:186
工具箱英文 浏览:382
南翔嘉定编程课哪里好 浏览:853
win10改变文件格式 浏览:475
linux中的物理地址和虚拟地址 浏览:493
有哪些app可以接游戏订单 浏览:472
苹果硬盘数据恢复要多少钱 浏览:394
js绑定下拉框数据库数据 浏览:448
cad文件怎么复制到另一个文件里边 浏览:858
dxp钻孔文件 浏览:631
iphone大悦城换机 浏览:538
找结婚对象上什么网站 浏览:974
学生信息管理系统程序设计报告 浏览:640
微信文件怎么删除怎么恢复 浏览:407
编程程序怎么复制 浏览:467
文件更改 浏览:327
冰点文件路径 浏览:730
软件一点开文件就关闭 浏览:88
网络如何把人捧红 浏览:961
软件传输文件 浏览:184

友情链接