Windows用戶態(tài)程序高效排錯

出版時間:2007-12  出版社:電子工業(yè)出版社  作者:熊力  頁數(shù):236  
Tag標簽:無  

內容概要

  本書是一本介紹Windows系統(tǒng)上的用戶態(tài)程序排錯方法和技巧的書。本書分為4個章節(jié),先介紹最重要的、通用的思考方法,以便制定排錯步驟;再介紹對排錯有幫助的知識點和工具;并介紹了.NET Framework(CLR)的相關知識和調試技巧;最后一章針對常見的幾大類問題進行了總結?! ”緯咐S富,對現(xiàn)實中的實際問題進行了研究,并和讀者一起分析解決辦法;本書的寫作思路為先給出問題描述,然后提供線索,再進行分析,讓讀者在閱讀中也進行思考,以提高實際解決問題的能力。本書適合希望學習排錯、調試知識的軟件開發(fā)、測試人員,希望深入學習Windows系統(tǒng)上用戶態(tài)程序的排錯知識的軟件開發(fā)、測試人員。

作者簡介

  熊力,2004年開始在上海微軟技術支持中心擔任技術支持工程師。他所在的小組負責幫助企業(yè)客戶解決開發(fā)領域的技術難題。作者專注于.NET Framework、 C/C++、COM和Web開發(fā),現(xiàn)任微軟中國研發(fā)集團服務器與開發(fā)工具事業(yè)部測試工程師。

書籍目錄

第1章 比工具、技巧和經(jīng)驗都重要的是你的思考——從四個風格迥異的案例說起1.1 絕望的性能問題:ADO.NET 2.0竟然比1.0要慢1.1.1 問題描述1.1.2 悲觀和絕望1.1.3 換位思考1.1.4 排錯1.1.5 結論和收獲1.1.6 題外話和相關討論Safehandle的更多討論平衡、取舍、雙贏和RFC 1925Profiler的下載地址和相關資源1.2 不可思議:一個API同時打開了兩個文件1.2.1 問題描述1.2.2 第一印象1.2.3 深入分析1.2.4 革命尚未成功1.2.5 結論1.2.6 題外話和相關討論MSDN是最值得信賴的嗎你敢說CPU壞了DWORD和文件長度程序輸出0xcdcdcdcd,想到了什么1.3 簡單的問題最棘手:稀疏平常的ASP.NET Session Lost問題1.3.1 問題描述1.3.2 制定策略1.3.3 具體操作和結論1.3.4 題外話和相關討論排查session lost的經(jīng)驗1.4 本可以做得更好:SharePoint中文界面變英文1.4.1 問題描述1.4.2 排錯步驟1.4.3 錯過的線索第2章 匯編、異常、內存、同步和調試器——重要的知識點和神兵利器2.1 排錯的工具:調試器Windbg2.1.1 調試器的功能:檢查代碼和資料,保存dump文件, 斷點控制程序的執(zhí)行2.1.2 符號文件(Symbol file),把二進制和源代碼對應起來2.1.3 一個簡單的上手程序2.1.4 用Internet Explorer來操練調試器的基本命令vertarget檢查進程概況!peb 顯示Process Environment Blocklmvm 檢查模塊的加載信息.reload / !sym 加載符號文件lmf 列出當前進程中加載的所有模塊r,d,e 寄存器,內存的檢查和修改!address顯示內存頁信息S 搜索內存!runaway 檢查線程的CPU消耗~ 切換目標線程k,kb,kp,kv,kn 檢查call stacku 反匯編x 查找符號的二進制地址dds 對應二進制地址的符號2.1.5 檢查程序資料的小例子.frame 在棧中切換以便檢查局部變量dt 格式化顯示資料2.1.6 用Windbg控制程序進行實時調試(Live Debug)Wt Watch and Trace, 跟蹤執(zhí)行的強大命令斷點和條件斷點(condition breakpoint),高效地控制觀測目標偽寄存器,幫助保存調試的中間信息Step Out的實現(xiàn)2.1.7 遠程調試(Remote debug)2.1.8 如何通過Windbg命令行讓中文魔獸爭霸運行在英文系統(tǒng)上2.1.9 Dump文件2.1.10 CDB、NTSD和重定向到Kernel Debugging2.1.11 Debugger Extension,擴展Windbg的功能2.2 讀懂機器的語言:匯編,CPU執(zhí)行指令的最小單元2.2.1 需要用匯編來排錯的常見情況案例分析:用匯編讀懂VC編譯器的優(yōu)化問題描述我的分析案例分析:VC2003 編譯器的bug、debug模式正常,release模式會崩潰例子程序跟蹤匯編指令來分析案例分析:臭名昭著的DLL Hell如何導致ASP.NET出現(xiàn)Server Unavailable2.2.2 題外話和相關討論Release比 Debug快嗎2.3 理解操作系統(tǒng)對程序的反饋:異常(Exception)和通知(Debug Event)2.3.1 異常(Exception)的方方面面和一篇字字珠璣的文章案例分析:如何讓C++像C#一樣打印出函數(shù)調用棧(callstack)2.3.2 Adplus,抓取dump的方便工具案例分析:華生醫(yī)生(Dr. Watson)在什么情況下不能記錄Dump文件問題描述背景知識問題分析新的做法問題解決了,可是為什么華生醫(yī)生(Dr. Watson)抓不到dump呢2.3.3 通知(Debug Event)是操作系統(tǒng)跟調試器交流的一種方法案例分析:VB6的版本問題2.3.4 題外話和相關討論錯過第一現(xiàn)場后還從dump中分析出線索嗎Adplus,天天都用的工具未處理異常發(fā)生后的主動退出如何調試UnhandledExceptionFilter2.4 平坦內存空間中的層次結構:Heap和Stack2.4.1 Heap是對平坦空間的高效管理和利用2.4.2 PageHeap,調試Heap問題的工具簡單例子的多種情況Heap上的內存泄漏和內存碎片2.4.3 Stack overrun/corruption2.4.4 題外話和相關討論PageHeap的/unaligned參數(shù)Heap trace,系統(tǒng)幫你記錄下每次Heap的操作為何才分配了300MB內存,就報告Out of memory2.5 找準排查問題的對應層次2.5.1 從C運行庫看層次2.5.2 簡單的_CRTDBG_MAP_ALLOC定義就可以讓內存泄漏無可遁形2.5.3 BSTR Cache,建立在Heap之上的COM字符串內存管理2.5.4 題外話和相關討論CRT Debug Heap一定對Debug有幫助嗎C++中new操作符的尷尬2.6 理清多個線程對資源的競爭:同步和鎖2.6.1 句柄泄漏、死鎖和線程爭用,三個典型問題句柄泄漏(Handle Leak)死鎖(Deadlock)線程爭用 (contention)2.6.2 Windbg中的對應排錯!handle 檢查句柄信息!htrace 檢查操作句柄的歷史記錄!cs 列出CriticalSection的詳細信息排查CriticalSection leak( Orphan CriticalSection)Invalid handle exception案例分析:ArrayList.Add的時候發(fā)生IndexOutOfRangeException問題描述這個異常不簡單具體操作結論2.7 調試和設計2.7.1 一位熱心朋友的提問案例分析:反被聰明誤第3章 .NET Framework的原理和SOS調試——剖析CLR程序和CLR本身3.1 MetaData、JIT、GC和Exception的關鍵點3.1.1 MetaData(元資料)和引擎初始化3.1.2 JIT動態(tài)編譯3.1.3 GC 內存管理3.1.4 Exception Handling異常處理3.2 用Windbg探索CLR的實現(xiàn)3.2.1 開源的CLR實現(xiàn):Rotor3.2.2 對一個Hello world的WinForm程序庖丁解牛mscoree!_CorExeMain CLR引擎的入口EEStartupHelper 重要的引擎初始化函數(shù)mscorwks!SystemDomain::ExecuteMainMethod 執(zhí)行托管代碼的入口CallDescr /MakeJitWorker Jit引擎發(fā)動的地方NtUserWaitMessage 托管程序完成加載gc_heap::allocate_more_space/ GCHeap::GarbageCollect 通過GC管理內存的分配和  釋放AppDomain,ThreadPool,Exception,StackWalk,Security都是有趣的話題3.3 通過SOS快捷方便地調試托管程序3.3.1 CLR讓托管程序的調試變得非常簡單3.3.2 SOS的命令介紹3.4 用簡單的程序演示SOS的常見操作3.4.1 .load SOS 加載SOS到Windbg3.4.2??!dumpheap 統(tǒng)計托管內存使用信息3.4.3??!do 顯示托管對象的詳細信息3.4.4??!gcroot 查找托管對象的引用關系案例分析:ASP.NET High CPU和更多的CLR命令演示!threads查看托管線程!tp查看線程池和CPU占用率!SyncBlk查看托管線程的lock!ip2md 映像內存地址到托管函數(shù)名!savemodule 保存模塊到本地以便用reflector分析著名的blog:If broken it is,fix it you should3.5 題外話和相關討論3.5.1 ReleaseCOMObject 釋放COM對象時候的兩難困境3.5.2 PInvoke應該Pin住內存防止崩潰3.5.3 Pin住內存又會導致內存碎片3.5.4 臭名昭著的mixed DLL loading deadlock3.5.5 有趣且有用的練習和更多的資料第4章 崩潰,性能和資源泄漏——分享一些經(jīng)驗4.1 排錯開始前的準備工作4.1.1 用正確的態(tài)度對待問題4.1.2 用簡單的提問縮小排錯的范圍4.1.3 通過MPS REPORT獲取系統(tǒng)的詳細信息4.1.4 通過簡單的Dump分析獲取基本信息4.2 崩潰(Crash)4.2.1 崩潰的萬千種不同死相4.2.2 準確獲取DumpAdplus:最容易上手的dump腳本華生醫(yī)生(dr Watson)通過Image File Execution Options讓調試器隨目標程序一起啟動COM+和ASP.NET的dump獲取需要特殊配置4.2.3 crash dump中需要重點關注的信息案例分析:VC程序的崩潰問題描述MessageBox 嵌套調用從源代碼中發(fā)現(xiàn)的疑點從This指針找崩潰的根源結論4.2.4 小結和更多的資源4.2.5 題外話和相關討論HeapCorruptionStackCorruption4.3 性能(Performance)4.3.1 “你真牛,不如你再給我縮短10秒吧!”不是想要多快就能調到多快4.3.2 性能調優(yōu)的步驟,CPU利用率是關鍵4.3.3 無所不知的性能監(jiān)視器使用性能監(jiān)視器的基本步驟重要的計數(shù)器案例分析:博客園的性能問題案例分析:堵塞在SqlCommand.ExecuteReader上就一定在等sql嗎問題背景案例分析:堵塞在Assembly.Load上的deadlock問題背景案例分析:196個線程織成的一張網(wǎng)問題背景小結4.3.4 用Profiler精確定位性能瓶頸案例分析:DataTable中foreach和for loop性能差了50%問題背景4.3.5 題外話和相關討論Task manager跟performance monitor的差別性能監(jiān)視器的超級用法C++跟C#到底誰快沒有profiler怎么辦4.4 資源泄漏(Resource Leak)4.4.1 資源泄漏分輕重緩急4.4.2 內存泄漏排錯的基本步驟泄漏了什么,誰分配的,為什么無法釋放定位泄漏內存的類型和增長趨勢區(qū)分managed heap leak和native leak案例分析:IE7的內存泄漏問題描述重現(xiàn)問題和基本分析用傳統(tǒng)的Pageheap+UMDH找到問題根源方便強大的IIS Diagnostics工具結論分析IIS Diag4.4.3 托管內存泄漏案例分析:object chain讓排錯簡單明了問題背景案例分析:一個bt的案例碎片的其他原因4.4.4 句柄泄漏(Handle Leak)4.4.5 題外話和相關討論GDI LeakDesktop heap issue更多的資源

編輯推薦

  《Windows用戶態(tài)程序高效排錯》案例豐富,對現(xiàn)實中的實際問題進行了研究,并和讀者一起分析解決辦法;《Windows用戶態(tài)程序高效排錯》的寫作思路為先給出問題描述,然后提供線索,再進行分析,讓讀者在閱讀中也進行思考,以提高實際解決問題的能力?!禬indows用戶態(tài)程序高效排錯》適合希望學習排錯、調試知識的軟件開發(fā)、測試人員,希望深入學習Windows系統(tǒng)上用戶態(tài)程序的排錯知識的軟件開發(fā)、測試人員。

圖書封面

圖書標簽Tags

評論、評分、閱讀與下載


    Windows用戶態(tài)程序高效排錯 PDF格式下載


用戶評論 (總計24條)

 
 

  •     
      PDF在:
      http://files.cnblogs.com/lixiong/userdbg_msinternal.pdf
      
      
      今天一個朋友提醒我,說 Windows用戶態(tài)程序高效排錯 的全文應該可以免費放出來了。 我掐指一算, 早過了和出版社約定的時間。
      
      下面是
      
      Windows用戶態(tài)程序高效排錯 全文 PDF 的鏈接
      
      PDF在:
      http://files.cnblogs.com/lixiong/userdbg_msinternal.pdf
      
      
      
      注意:
      
      1. 這個就是原書一樣的內容。我太不負責了,里面的一些錯誤也沒有修改??闭`請參考:
      http://blog.csdn.net/eparg/archive/2007/12/07/1923194.aspx
      
      2. PDF下面寫了ms internal. 實際上里面的內容和書里面一樣。寫internal是為了當年在公司內部審閱方便。
      
      3. PDF看起來比較方便,里面的link可以直接點開。但是3年過去了,我相信里面很多鏈接都失效了,遇上此類情況請靈活使用搜索引擎。
      
      
      
      最后歡迎排磚。
      
  •      “這就是絕世武功的秘籍嗎?”
       “不,這只是秘籍的目錄!”
      
       沒錯,看完這本書,我腦子里閃現(xiàn)的就是周星馳鹿鼎記中與陳家洛的這句對白。區(qū)區(qū)200來頁,其包含的內容卻是遠勝于此。究其原因,恐怕是以下兩個:
      
      1. 書中列出了無數(shù)個鏈接,而有些鏈接過去的知識點,就夠你研究好半天了。比如SEH的使用,CLR的原理等等
      
      2. 書中大多講解的,還是工具的使用,無數(shù)個命令,參數(shù)的確也是比較難記,要掌握好這些工具,不是一兩個星期能搞定的事情。比如windbg, performance monitor等等。
      
       由此可能會覺得,這本書作者自己的思想少了點,鏈接的內容,工具的使用占了較大的篇幅。但其實作者融匯貫通了如此多的知識,加上自己的思考與實踐再呈現(xiàn)給大家,讀起來相當?shù)耐纯?,也是相當有用?br />   
       至此讀完了一遍,但正如我前面所形容的,這是一本武功秘籍的目錄,要想完全掌握書中的內容,還是要多閱讀,多思考,多實踐。并且,根據(jù)目錄的提示去擴展閱讀那些“絕世武功秘籍”。
      
      
  •     這本書總體開看,還是不錯的,不像很多其他的書,到處抄襲,至少是有不少原創(chuàng)內容。
      但也不如很多人捧的那樣好,原因我覺得是寫的不好,作者當工作筆記寫的,不是當書寫,所以內容文字還有待改進。其實,我覺得這本書的內容,作為電子版的話,應該不錯,但是作為印刷版,還是有不少地方需要改進,包括內容本身,文字敘述,還有章節(jié)安排。
  •     終于讀完了《Windows 用戶態(tài)程序高效排錯》(http://www.china-pub.com/37008)
      感想:
      1、這本書還要再讀幾遍,反復實踐!
      2、書中提供了大量的參考資源,都是要仔細研究的!
      3、作者以授之以漁的態(tài)度為讀者奉獻了一本經(jīng)典之作!
      4、曾經(jīng)看過評論說這本書的讀者面較窄,嚴重反對!凡是想一輩子吃寫程序這口飯的,這本書應該是必讀!就像《Borland 傳奇》一樣!(不管你是否想精通Debug,讀讀這本書不會浪費你多少時間,相反可能會有意想不到的收獲!)
      5、不能再盲人摸象了,寫程序一定要知其所以然啊!
      6、想說的話太多,一時說不出來,用一句話代替:這真是本好書?。。。?!
      
      補充:研究Debug技術,歡迎大家加入博客園Debug探索團隊(http://debug.cnblogs.com/)
  •     書中的鏈接匯總在
      http://blog.csdn.net/eparg/archive/2007/09/19/1792015.aspx
      
  •     比起IDE內置的調試器,windbg是更有力的排錯武器。通過分析運行時信息找到疑難錯誤的根源所在,這種感覺很不錯。
      
      反過來說,有了分析運行時錯誤的經(jīng)驗,對于減少開發(fā)過程中的缺陷也有積極的意義??少F的是作者在書中對于開發(fā)錯誤,系統(tǒng)配置錯誤和意外情況導致的問題也有很多探討和分析,使得適合本書的讀者范圍大大的增加了。
      
      作者不僅在介紹windbg的使用方法和實際調試的案例,揭示了windows和.NET系統(tǒng)底層的原理(當然只是調試過程中涉及到的部分),還向讀者指出了如何開發(fā)出錯誤更少的程序。
      
      作者在書中付了很多參考文章的地址,讀者可以籍此獲得更多的相關知識。美中不足的是參考文章分散在各章節(jié)中,實戰(zhàn)案例的分析也是如此,如果能整理為兩個專門列表,一個是參考資料、擴展閱讀列表,一個是案例分析列表,附在書后就更完美了。
      
      PS:
      作者提供的匯總連接:http://blog.csdn.net?/eparg/archive/2007/?09/19/1792015.aspx
  •     我算是從頭到尾關注這本書的少數(shù)人之一吧,最早知道熊力的《Windows用戶態(tài)程序高效排錯》這本書,是在去年6年,當然,當時還不叫這個名字,叫graepf的《個人總結的調試文章》(呵呵,差別很大吧),初見是在某論壇上,那時的我對論壇上的這類文章大多持懷疑態(tài)度,不過從第一眼看到文章里提到的那些實例,感覺就是找到寶藏,那份驚喜不亞于看到John Robbins的《.NET和Windows應用程序調試》,同時因為中文的原因,覺得讀起來非常解渴,尤其是對session lost的討論,如同在我眼前開了一道大門,從理論到實際,對session的深入理解,催生了具體的處理情況,尤其是對情況的分析,循循善誘,對像我這樣一出bug就感覺無從下手的人來說,就像明燈一樣指明了如何解決問題的道路。繼續(xù)讀下去,對內存泄露的話題,熊力依舊是舉重若輕,MSDN中的kb,各種實際案例信手拈來,可以看出都是厚積薄發(fā),尤其是對案例的反匯編代碼的解說詳細精到,同時嫻熟的運用WinDbg加以分析,更是讓人大呼過癮,不忍釋卷。到了今年初的時候,一個偶然的機會得到了該書的內部電子版,因為我的工作方向發(fā)生了變化,所以很遺憾沒有向熊力提供更多的反饋,不過即使略讀一番,對這本書仍是更加期待,不想一等又是半年,終于看到本書即將出版,一年多的等待終于有了結局,希望能有更多喜愛系統(tǒng)底層,喜歡探究系統(tǒng)奧秘的人來看看這本中國人自己的《.NET和Windows應用程序調試》!
      
  •   作者主動把pdf放在這,贊!
  •   這個不是《Windows用戶態(tài)程序高效排錯》原書
  •   樓上的, 這個就是原書, 我是作者.
  •   膜拜~~!剛想在china-pub上買呢
  •   xiongli太棒了. 期待新作哈
  •   我已經(jīng)從事軟件開發(fā)8年了,今天無意中看到了作者的這本書。
    我的感覺是很震撼。
    作者的工作態(tài)度,專業(yè)能力,鉆研精神,無不讓我這個平時庸庸碌碌,懶懶散散的笨人在北方的這個寒冷冬日里汗流浹背,無地自容。
  •   感謝作者~~
  •   感謝您的分享..............
  •   多謝您的評論。
    “這只是秘籍的目錄!”
    作為作者,我認為您的這句話是出版兩年來最貼切的評論。
  •   那我就頂!
  •   這一點就類似于《Real-time rendering》呢,1000多頁厚,也只是作為摘要。延伸的參考文獻有1400多項
  •   太可怕了,非十年二十年之功不可得。
    學習這種精神!
  •   的確比較少來. 我一般3個月來一次看看評論...
  •   評論確實相當貼切,一定要從目錄延伸開去,才能得到最大的收獲。
  •   推薦書何必用“狗屁” “TMD”和一堆感嘆號? ^_^
  •   你可以把這些都理解成當時激動的心情就行啦
  •   :) 有點理解啦
 

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網(wǎng) 手機版

京ICP備13047387號-7