怎樣才能把一個文件抓出來
Ⅰ 如何手工抓取mp文件
在生產環境下進行故障診斷時,為了不終止正在運行的服務或應用程序,有兩種方式可以對正在運行的服務或應用程序的進程進行分析和調試。
首先一種比較直觀簡潔的方式就是用WinDbg等調試器直接attach到需要調試的進程,調試完畢之後再detach即可。但是這種方式有個缺點就是執行debugger命令時必須先break這個進程,執行完debug命令之後又得趕緊F5讓他繼續運行,因為被你break住的時候意味著整個進程也已經被你掛襲段起。另外也經常會由於First Chance Excetpion而自動break,你得時刻留意避免長時間break整個進程。所以這樣的調試方式對時間是個很大的考驗,往往沒有充裕的時間來做仔細分析。
另一種方式則是在出現問題的時候,比如CPU持續長時間100%,內存突然暴漲等非正常情況下,通過對服務進程snapshot抓取一個mp文件,完成mp之後先deatch,讓進程繼續運行。然後用windbg等工具來分析這個抓取到的mp文件。
那麼如何在不終止進程的情況下抓取mp文件呢?Debugging Tools for Windows里提供了一個非常好的工具,adplus.vbs。從名字可以看出,實際上是一個vb腳本,只是對cdb調試器作的一個包裝腳本。
其路徑與Debugging Tools for Windows的安裝路徑相同,使用的方法也很簡單,如下所示:
adplus.vbs -hang -p 1234 -o d:/mp
其中-hang指明使用hang模式,亦型好即在進程運行過程中附加上去snapshot抓取一個mp文件,完成之後detach。與之對應的是-crash崩潰模式,用戶先啟動adplus,然後由它啟動要監控的程序,在出現異常崩潰時自動生成mp文件,或者通過Ctrl-C人為發出抓取指令。但是-crash模式在抓取完成之後,被監控的進程就必須終止。因此我們在這里只選用-hang模式。
-p是要調試的進程ID,比如ASP.NET應用線程池,在Win2003下就是w3wp.exe
-o 指定要output的mp文件路徑。
另外,與adplus類似的,有個UserDump工具,但是抓取用戶模式的進程,而adplus則是內核模式和用戶模式兩者皆可。
而總所周至的Dr. Waston,則會在進程崩潰之後的自動時候抓取mp文件,一樣可以用於windbg等調試器來事後分析程序崩潰時的狀態。
====================
0:000> !mpheap -stat
No export mpheap found
======解決方法:
.load clr20/sos.dll,你要先執行的。sos.dll在默認的c:/windows/microsoft.net/framework/v2.....下面,你復制到c:/program files/debugging tools for windows下面的clr20目錄下面(clr20是你手工創建的)
=======================
在.NET下開發時,最拍租譽基本的調試方法就是使用Visual Studio的單步調試。但是對於一些特殊情況,特別是涉及到CLR內部的時候使用這種方式就達不到目的了。
如果要查看運行時內存使用情況,IL代碼,CLR信息等可以使用以下兩種方式:
1、使用VS2005 + sos.dll
2、使用Windbg + sos.dll
第二種方式功能更加強大,下面我就通過實際操作展示一下怎麼使用這種方法得到運行時ArrayList內部的值。
有人可能會說:我直接用Visual Studio的單步調試豈不是更快?當然,這個只是一個演示,通過這個演示是為以後的高級調試打下基礎
在操作之前,先熟悉一下基本知識:
A、使用VS2005 + sos.dll調試
1、需要在項目->屬性->調試-〉啟用非託管代碼調試
2、打開調試-〉窗口-〉即時
3、在即時窗口中輸入 !load sos 載入調試模塊
4、輸入其它調試語句
B、使用Windbg + sos.dll
1、去微軟的網站下載最新的Windbg
2、打開Windbg在File-〉Symbol File Path ...窗口中輸入 srv*c:/symbols*http://msdl.microsoft.com/download/symbols
3、運行需要調試的程序,然後在Windbg中File-〉Attach to Process中選擇剛才運行的程序
4、在出現的Command窗口中就可以輸入調試語句
5、常用調試語句:
lm //查看載入了哪些模塊
.load C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/sos.dll //載入調試模塊
ld TestClass //載入調試符號
!name2ee TestClass.exe TestClass.Program.test //顯示test方法相關的地址
!mpmt -md 00976d48 //得到類的成員函數詳細信息
!mpil 00973028 // 顯示這個方法被編譯器編譯之後的IL代碼
!mpheap -stat //該命令顯示程序中所有對象的統計信息,顯示的大小是對象本身的大小,不包括對象裡面值的大小
!mpheap -mt 790fcb30 //該命令顯示MethodTable 790fcb30的詳細信息
!gcroot 012919b8 //來顯示一個實例的所屬關系
!mpobj(do) 012a3904 //顯示一個對象的具體內容,看對象裡面有什麼,值是什麼
!ObjSize 012a1ba4 //對象實際在內存中的大小
!eeheap -gc //查看託管堆的情況(包括大小)
!DumpArray //查看數組信息
下面就來看看具體的調試步驟:
1、我們的測試代碼
namespace TestClass
{
class Program
{
[STAThread]
static void Main(string[] args)
{
ArrayList list = new ArrayList();
list.Add("aaaa");
list.Add("bbbb");
Console.ReadLine();
}
}
}很簡單,就是一個ArrayList
運行這個程序(開始執行,不調試),然後進入Windbg,Attach到這個進程
2、查看所有堆棧信息
0:004> !mpheap -stat
MT Count TotalSize Class Name
7910062c 1 12 System.Security.Permissions.SecurityPermission
7918e284 1 16 System.IO.TextReader+SyncTextReader
79102d10 1 20 Microsoft.Win32.SafeHandles.SafeFileMappingHandle
79102cb4 1 20 Microsoft.Win32.SafeHandles.SafeViewOfFileHandle
79101d30 1 20 System.Text.
79100a7c 1 20 Microsoft.Win32.SafeHandles.SafeFileHandle
79105cd4 1 24 System.Collections.ArrayList
......
7912ad90 11 9036 System.Object[]
790fcb30 2083 131492 System.String
Total 2202 objects
除了我們的ArrayList外,還有很多其它的系統信息,先不用管它
3、查看我們的ArrayList的信息
0:004> !mpheap -mt 79105cd4
Address MT Size
012a1b88 79105cd4 24
total 1 objects
Statistics:
MT Count TotalSize Class Name
79105cd4 1 24 System.Collections.ArrayList
Total 1 objects
4、查看對應地址內部實際的值
0:004> !do 012a1b88
Name: System.Collections.ArrayList
MethodTable: 79105cd4
EEClass: 79105c28
Size: 24(0x18) bytes
(C:/WINDOWS/assembly/GAC_32/mscorlib/2.0.0.0__b77a5c561934e089/mscorlib.dll)
Fields:
MT Field Offset Type VT Attr Value Name
7912ad90 40008df 4 System.Object[] 0 instance 012a1bb0 _items
791018e0 40008e0 c System.Int32 1 instance 2 _size
791018e0 40008e1 10 System.Int32 1 instance 2 _version
790fc35c 40008e2 8 System.Object 0 instance 00000000 _syncRoot
7912ad90 40008e3 1c0 System.Object[] 0 shared static emptyArray
>> Domain:Value 00149c58:012a1ba0 <<
可以看到ArrayList的大小為2,具體的值保存在地址012a1bb0中,是一個System.Object[]類型的數組
5、查看數組信息
0:004> !DumpArray 012a1bb0
Name: System.Object[]
MethodTable: 7912ad90
EEClass: 7912b304
Size: 32(0x20) bytes
Array: Rank 1, Number of elements 4, Type CLASS
Element Methodtable: 790fc35c
[0] 012a1b50
[1] 012a1b6c
[2] null
[3] null
6、查看數組內對象的值
0:004> !do 012a1b50
Name: System.String
MethodTable: 790fcb30
EEClass: 790fca90
Size: 26(0x1a) bytes
(C:/WINDOWS/assembly/GAC_32/mscorlib/2.0.0.0__b77a5c561934e089/mscorlib.dll)
String: aaaa
Fields:
MT Field Offset Type VT Attr Value Name
791018e0 4000096 4 System.Int32 1 instance 5 m_arrayLength
791018e0 4000097 8 System.Int32 1 instance 4 m_stringLength
790fe534 4000098 c System.Char 1 instance 61 m_firstChar
790fcb30 4000099 10 System.String 0 shared static Empty
>> Domain:Value 00149c58:790d81bc <<
7912b1d8 400009a 14 System.Char[] 0 shared static WhitespaceChars
>> Domain:Value 00149c58:012a16f0 <<
====================
windbg使用小總結
【抓mp】
1、一般抓法
adplus -hang -p 3230 -quiet 抓3230 pid進程,hang模式,相當於把那個進程暫停住,取內存快照
adplus -crash -pn w3wp -quiet 抓w3wp進程,crash模式,當那個進程崩潰結束的時候自動抓取當時的內存
adplus -hang -iis -quiet 抓IIS相關進程,包括其上host的web應用,以及iis自身
2、抓window服務
http://support.microsoft.com/kb/824344/zh-cn
3、遠程抓
http://blog.joycode.com/tingwang/archive/2006/08/11/79763.aspx
4、抓藍屏和死機的mp
電腦無故重啟或者藍屏會在C:/WINDOWS/Minimp/下保存一個minimp,但是這個minimp可用的命令很少,一般只打!analyze –v看到是哪個進程引起的,還有相關的驅動模塊就基本定位問題了。
5、IIS回收的時候抓
http://blog.yesky.com/blog/omakey/archive/2006/12/17/1618015.html
6、計劃任務抓
比如一個進程起來後不知道它什麼時候會意外崩潰,可以在計劃任務里用crash里抓,當那個進程意外終止的時候,cdb可以直接附加上去,抓取當時的mp,如果要抓一些會自動重啟的進程,而且要抓每次重啟前的mp,可以參考附錄里一節。
【常用命令】
1、先path C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727,把.net路徑設置為path環境變數,一遍在windbg里可以直接.load sos,而不必.load C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/sos.dll
2、ld demo,載入你程序的pdb文件,調試.net程序一般要把kernel32和mscorwks的符號載入上,關於這兩個東西大家可以查資料,尤其是後者有哪些函數可以多了解一些。
3、在windbg的file/symbol file path對話框里輸入以下文字,以便自動載入和下載符號
C:/WINDOWS/Symbols;d:/Program Files/Microsoft Visual Studio 8/SDK/v2.0/symbols;.sympath SRV*d:/localsymbols*http://msdl.microsoft.com/download/symbols
其中有windows、.net2.0和自動從網上下載的調試符號,注意根據自己的情況適當修改目錄
【調試死鎖】
1、!syncblk,查看哪些線程拿到了鎖
2、~67e!clrstack 跳到某個拿到鎖的線程看它正在干什麼操作,遲遲不肯釋放鎖
3、!runaway 查看這個佔有鎖的線程運行了多長時間。
4、~*e!clrstack查看所有線程的託管堆棧,看看哪些是正在等待鎖的,比如hang在System.Threading.Monitor.Enter(System.Object)
5、~136s選擇該線程,顯示如下
0:000> ~136s eax=00005763 ebx=08deeb5c ecx=03eff0d4 edx=5570ab69 esi=08deeb5c edi=7ffd6000 eip=7c95ed54 esp=08deeb10 ebp=08deebb8 iopl=0 nv up ei pl zr na pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246 ntdll!KiFastSystemCallRet: 7c95ed54 c3 ret
找到ecx寄存器的值,復制後ctrl+f,向上查找,會找到!syncblk的地方,如下
0:000> !syncblk Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner 1906 03ee4be4 5 1 03ee8f88 22c8 67 185e2ef0 System.Object 5390 052ca39c 3 1 05292b30 1dd4 49 1060d3ac System.Object 9372 0530702c 15 1 0012d3a8 1aa8 80 185e7704 System.Object 11428 03eff0d4 35 1 053b8fa8 169c 120 166acd98 System.Object 15278 0531c6b4 61 1 06bc1430 26d8 86 1a5bea88 System.Object
可以看到136線程等待的鎖被120號線程占著不放(格式有點亂,湊合看),
6、有時候通過ecx寄存器找鎖不是很確定,可以用~* kb來把所有線程堆棧打出來,然後根據!syncblk出來的同步快的值去搜索大概有多少個線程在等那個鎖。因為同樣是等待鎖,可等的狀態不一樣,有的在Q里,有的鎖已經升級,有的去嘗試去拿鎖了,所以不一定當時ecx寄存器指向那塊內存,具體如何找到某個正在等待鎖的線程等待的鎖的內存地址,以及它正等待的這個鎖被哪個線程拿著,我還沒琢磨出規律來,但一般情況下,如果有其它同步對象的話,更難查。.net里用我上面說的幾步就能查出鎖的問題了。
【內存泄漏】
1、!mpheap -stat看看哪些對象個數最多,占內存最大,
2、找到某個格式比較多的對象,可以看它的方法表,然後用!mpheap -mt 66398fa4去隨機找幾個對象的地址
3、用!do 1e5a22bc命令去查看幾個對象的狀態,屬性的值等,看看正常不正常
4、用!gcroot -nostacks 1e5a22bc去查看幾個對象的根正常不正常,如果有些對象的根不是自己預先設計的那樣,很可能被自己沒想到的對象強引用了,所以GC無法回收它,就泄漏了。
【CPU百分百】
主要用幾個計數器和!runaway命令,具體見以下鏈接
http://www.cnblogs.com/onlytianc ... 7/06/03/769307.html
【線程池耗盡】
!threadpool 能看到完成埠,線程池工作線程和timer回調各占線程池的情況。
【其它】
1、!eestack -short -ee查看所有重要(獲取鎖的,託管的,停止並允許回收的)線程的mpstack,差不多相當於~*e!mpstack
2、.time 可以看到進程跑了多少時間
3、!dso 查看當前線程里有哪些對象,分析內存泄漏問題也許會用到
Ⅱ 怎樣把文件導出來
微信中的文件是可以導出保存的。
打開電腦版的微信,找到要下載保存的文件。
在文件上點擊滑鼠右鍵,選擇保存。
選擇好保存位置,點擊保存就行了。
Ⅲ 電腦中毒無法正常開機,怎麼樣才能把重要文件拷貝出來呢
1、用U盤做一個啟動盤,進入PE系統把電腦內的文件拷貝出來。如果U盤足夠大,就直接復制到U盤。否則就連接移動硬碟進行備份。
2、把硬碟拆出來掛到別的電腦組成雙硬碟,這樣也可以把文件考出來。
3、看界面,建議先為電腦除一下塵,用橡皮擦把各個板卡金手指擦乾凈,特別是內存條多插拔幾次試試。
Ⅳ 如何把一個文件夾從另一個文件夾里拿出來
在資源管理器中,選擇這個文件夾,右鍵拖到目標位置後,菜單選擇「移動到」就可以了。當然也可用剪切粘貼的辦法。
Ⅳ 如何使DVD的VOB文件抓取下來還能保留中文字幕
分類: 電腦/網路 >> 軟體 >> 多媒體軟體
問題描述:
如何能夠將DVD的VOB文件轉換成MPG一類的文件,余含而且還能保留原電影中的中文字幕呢?
因為如果用採集的方式很浪費時間,如果可以把VOB文件直接轉換過來,還保留原字幕,就很節省時間了!
解析:
把VOB格式轉換成其它格式的工具很多朋友都想直接把手中的DVD直接轉壓成rmvb,方法有很多,現在介紹一種比較簡單的方法。
以下方法可以從DVD的VOB文件直接轉RM,中間沒有經過其它的文件格式,所以得到的RM流文件的質量比較高,而且比DVD->AVI->RM的方法節省不少時間,還可以加上字幕。
需要的軟體:
Elecard MPEG2 Video Decoder(VOB解碼) ftpbbs.bitnp/mpeg2filter.rar
Batch Real Procer(BRP) 或 ERP等(RMVB壓縮工具) dl96590.pchome/multimedia/video/brp1531_chs.exe
Decrypter(VOB提取工具)ftpbbs.bitnp/setupdvddecrypter.exe
VobSub(字幕提取工具)ftpbbs.bitnp/vobsub 2.32 All.exe
Elecard MPEG2 Video Decoder + CyberLink Audio Filter是圖像和聲音的Filter包,裡麵包含Elecard MPEG2 Video Decoder ver 和+ CyberLink Audio Filter都支持DirectShowR規范,CyberLink Audio Filter重現DVD音頻是無以倫比的,如果此前安裝有MPEG2的Filter應該先卸掉,安裝此包後,可以用Windows Media Player打開一個DVD光碟上VOB文件試試,如果能正常播放,此時點擊「文件-屬性-高級」能看到AC3Filter、Elecard MPEG2 Video Decoder、MPEG-2 Splitter說明安裝成功。Decrypter用於復制 DVD的VOB文件到硬碟,VobSub用於加字幕。
第一步:把DVD里的VOB文件復制(Rip)到硬碟上
你可以用Batch Real Procer直接壓縮DVD光碟上的VOB文件了成RM了(可能對鎖區域碼的DVD無效),但如果字幕是分離的將不會有字幕,而且DVD光碟上的VOB文件是分開的,這對壓縮整個影片或某首歌是不便的,再的是長時間讀取對光碟機的壽命不利。所以用Decrypter把DVD Rip到硬碟可以解決上述問題,一部大小為4G的影片Rip到硬碟用不到10分鍾(16X-DVD)。
運行後,軟體會自動讀出dvd碟片上的vob文件。一般有幾個文件是1G多的,這是主視頻文件,用ctrl鍵選中他們。其他的幾個幾十兆的vob文件可能是菜單或版權警告之類,不用理會。
然後在選中的幾個文件上面點滑鼠右鍵選擇「Stream Proessing...」,稍等一會會出現一個列團跡表選擇需要的視頻、音頻和字幕流。其他默認,ok即可。
在tools--->settings下找到File Mode,選擇File Splitting為none,否則轉到影盤上仍然是孤立的幾個vob文件,而不會合並成一個完整的。
最後點擊開始就可以了。
第二步:提取字幕
調出vobsub configure。打開DVD光碟上與vob同名的那個ifo文件。因為我們是整段拷貝,所以這一步可以不用選擇章節。直接建立字慕索引形成大家熟悉的sub字慕就可以了,需要5~10min(這個過程是把DVD文件解到硬碟中,速度的快慢由光碟機的速度,硬碟和速度和碟子的好壞有關系)。
把不要的字幕放到Programchain no.1這個下面的框裡面,點OK開始轉換
修改字幕名稱與視頻文件名相同,僅擴展名不同,並保證字幕和視頻在同一個文件夾下。用媒體播放器打開VOB文件看看字幕的效果是不是你想要的,如果字幕時間和塌毀並影片有延遲或提前,可以使用vobsub調整。
第三步:壓制rmvb
用BRP(Batch Real Procer)或ERP等工具壓制rmvb。由於安裝了Elecard MPEG2 Video Decoder,所以這里可以直接對vob文件進行解碼壓制。運行BRP或ERP軟體,添加視頻源額時候選擇剛剛rip出來的vob文件,然後設置碼率(推薦平均碼率500左右),設置音視頻編碼方式(real9或real10),設置EHQ(middle或high),不推薦使用二次編碼(壓縮時間要翻番,但效果幾乎差不多),最後點擊開始壓縮就可以。由於解碼方式不同直接從vob壓製成rmvb時間可能會比從avi到rmvb要長,所以大家泡杯咖啡慢慢等待吧。
幾點經驗:
如果原先安裝了WINDVD,先要把它卸載掉,在卸載時會提示它的共享文件要不要刪除,選"YES"
在不剪切畫面的情況下4:3的影片片用320×240或426×320的解析度,16:9的影片用640×360或568×320的解析度,不要使用原始尺寸壓縮,那樣效果反而差而且長寬比例有可能出問題。
Ⅵ 怎樣抓出電腦中隱藏的文件
點 工具-文件選項-查看-選中顯示所有文件及文件夾就OK拉
Ⅶ win7裡面如何把文件件裡面的文件批量取出來
呃,不知道有沒有別的方法,給你提供個思路,你這一百多個文件夾里的文件類型旦衫如果是一樣的,那你可以在存這100個文件夾的文件夾里用系統自帶的搜索,比如搜.doc,然後就會顯示所有.doc的文件,你可以全芹遲掘選然後剪切復制粘貼,如果文件類型不一樣那就麻煩復制粘貼吧,可嫌核以下個Explorer+,快那麼一點點