当前位置:首页 » 办公资讯 » 怎样捕捉文件

怎样捕捉文件

发布时间: 2022-05-26 04:58:02

1. 如何捕捉程序异常/crash 并生成 mp 文件

程序崩溃(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
转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦

2. 如何在电脑屏幕上捕捉图像

通过电脑上自带的截图工具即可捕捉电脑的图像,步骤如下。

1,打开windows10系统,在周免左下角点击“开始”按钮。

3. 如何捕捉网页中FLASH播放的文件

教你个最简单的方法:所有你被你浏览过的flash都别保存在你的系统缓存里,这也就是为什么我们在第二次观看flash时加载的那么快。1:右键单击IE---“属性”;2:“删除历史记录”栏点击“设置”;3:点击“查看文件”;4:在弹出的窗口中就可以找到swf文件了。如果文件很多你就先清理一下,刷新一下网页,然后再用此方法!

4. 怎么在3D max中捕捉cad文件

前提是要把CAD文件导入到3D中来,然后使用2维或者3维捕捉都可以,快捷键S

5. snagit12怎样捕获文本

◆第一步:打开SnagIt,在【方案】窗口下面的【其他捕获配置文件】列表中选择【窗口文字】图标,再单击菜单【捕获/ 输出/ 属性】,在打开的窗口中选择【文本文件】选项卡,在此选项卡中选择【TXT-文本文件】一项。然后在右上侧的“文件名”列表中勾选【固定文件名】。在【文本文件选项】中勾选【附加到文件】,最后在右下侧“文件夹”区域设置保存的目标位置即可。
◆第二步:在SnagIt的【 方案设置】中点击“输出”图标,并在下拉菜单中选择“文件”;点击”输入“,选择你想要的捕捉的范围(选择”属性“可以精确设置”固定区域“)。
◆第三步:使用你先前设置的【窗口文字】图标【右击,可以进行进一步设置(如快捷键),千万不要再左击】
◆第四步:点击右下角的捕获图标开始捕捉。捕获完毕后单击“完成”按钮即可将捕获的文字保存到先前设置的位置中对应的文本文档中了。完成一次捕捉后,可以继续捕捉其他文字,并保存到同一个记事本文件中。

6. 如何用遨游浏览器捕捉网页的音频文件

可以点“工具”菜单下的“网页嗅探器”,设置好要捕捉的文件类型,然后刷新页面就可以了

7. 如何抓取页面中的flash文件

不用下载器也可以下载啊.就用IE浏览器就行.
其实只要能够打开网页,看到Flash动画,就能直接用Internet
Explorer游览器把这些动画抓下来,用不着其他工具。是根据IE缓存的原理.
具体步骤如下:
1.用Internet
Explorer打开你想抓取的Flash动画所在的网页,直到Flash动画完整出现;
2.点击开始菜单---“搜索”---"开始查找文件或文件夹",在查找的名称里填入“*.swf”,搜查范围限定为“C:\Documents
and
Settings\Administrator\Local
Settings\Temporary
Internet
Files”,查找之后你会惊喜地发现,你要的Flash动画就在里面,而且是以单独的swf格式存在,要怎么用就看你了.有可以会搜到很多个*.swf文件,那你就要一个一个的试就知道哪一个是你要的动画了.
注意:
C:\Documents
and
Settings\Administrator\Local
Settings\Temporary
Internet
Files
你电脑中的这个地址还要看你的系统盘安装在C盘还是安装在D盘或是其它的盘.
还要看你的用户是Administrator,还是自己新建的用户.如果,你没有新建用户,那就是Administrator这个用户.
在进行这一步之前我建议你清空一下你的IE临时文件夹.以便更快的查找.
但要注意的是,如果这个flash是用了语句加载外部文件的.那么.你下载下来的.就看不到那些需加载的外部文件.除非把那些外部文件都下载下来.并且路途正确的情况下才可以正常播放.
http://dl.shi.sina.com.cn/upload/81/46//61358146.9180794.JPG

8. 如何抓去图片,视频以及文件

可以在网上面加一些相应的软件,进行一个抓取,或者是可能screen直接抓取。

9. 如何捕捉酷我音乐盒的视频

楼主是要下载视频的吧,要点儿技巧:
因为该文件是临时文件,只有在想要下载的这首歌放完后,放下一首时,把MV文件(.wmv格式)复制出来(干坤大挪移,哈,哈)
MV是隐藏文件暂存在C:\Documents
and
Settings\你的用户名
\Local
Settings\Temp\KMusic文件夹里,而且名字也是数字(如我的《爱情里没有谁对谁错》名字就是14.wmv),注意,要等到酷我将MV全部下载完(就是前面的进度条进到头)把它拷贝出来才能是完整文件,可以用【其他播放器】先播放看能否放完,要不然不播放器播放时会显示错误。此保存的MV是暂存文件,在开机后就自动删除了。所以记得要及时【复制】出来哦!

10. 如何抓取hprof文件

本帖最后由 粗茶淡饭 于 2016-4-14 16:49 编辑

[DESCRIPTION]

如何抓取hprof文件?

[SOLUTION]

1. 命令行方式抓取,方法如下:
a) 通过输入adb命令的方式抓取,PIDXXX为对应进程的PID:
adb remount
adb shell chmod 0777 /data/misc
adb shell kill -10 PIDXXX
b) 会在/data/misc目录下生成一个以pidXXX.hprof结尾的hprof文件。
c) 然后通过adb pull或其他方式将这个文件导出来即可。
2. 通过DDMS抓取:
a) 打开Eclipse,点击device窗口的Dump Hprof file 图标(绿色圆柱体,右边一条向下红色箭头线)
b) 等几秒中会弹出保存hporf的路径,然后就可以获取到当时的hprof了。
注意:hprof只能在ENG或开启了Root的User load上来抓取,这样才是有效的。
酷睿软件园为您解答

热点内容
马路上汽车的噪音在多少分贝 发布:2023-08-31 22:08:23 浏览:2170
应孕棒多少钱一盒 发布:2023-08-31 22:08:21 浏览:1638
标准养老金一年能领多少钱 发布:2023-08-31 22:05:05 浏览:1936
湖北通城接网线多少钱一个月 发布:2023-08-31 21:59:51 浏览:2005
开随车吊车多少钱一个月 发布:2023-08-31 21:55:06 浏览:1766
京东付尾款怎么知道前多少名 发布:2023-08-31 21:52:58 浏览:2089
在学校租铺面一个月要多少钱 发布:2023-08-31 21:52:09 浏览:2228
2寸有多少厘米 发布:2023-08-31 21:50:34 浏览:1869
知道电压如何算一小时多少电 发布:2023-08-31 21:46:20 浏览:1872
金手镯54号圈周长是多少厘米 发布:2023-08-31 21:44:28 浏览:2013