怎樣捕捉文件
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上來抓取,這樣才是有效的。
酷睿軟體園為您解答