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