您好,欢迎光临本网站![请登录][注册会员]  
文件名称: Advanced .NET Debugging
  所属分类: .Net
  开发工具:
  文件大小: 6mb
  下载次数: 0
  上传时间: 2012-12-22
  提 供 者: xiaolo******
 详细说明: 如果你是一个.NET开发人员(不是高级大虾),这本书绝对让你对.NET的认识登上一个新的台阶(前提是你有耐心去学习.NET的内在机制)。 CONTENTS Foreword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxi About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxiii PART I: OVERVIEW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Chapter 1: Introduction to the Tools . . . . . . . . . . . . . . . . . . . . . . . . . 3 Debugging Tools for Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 .NET 2.0—Redistributable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 .NET 2.0—SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 SOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 SOSEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 CLR Profiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Performance Counters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Reflector for .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 PowerDbg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Managed Debugging Assistants . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Chapter 2: CLR Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 High-Level Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 CLR and the Windows Loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Loading Native Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Loading .NET Assemblies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Application Domains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 The System Application Domain . . . . . . . . . . . . . . . . . . . . . . . . . . 37 The Shared Application Domain . . . . . . . . . . . . . . . . . . . . . . . . . 37 The Default Application Domain . . . . . . . . . . . . . . . . . . . . . . . . . 37 Assembly Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 From the Library of Gary Chen Assembly Manifest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Type Metadata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Sync Block Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Type Handle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Method Descriptors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Metadata Tokens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 EEClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Chapter 3: Basic Debugging Tasks . . . . . . . . . . . . . . . . . . . . . . . . . 69 The Debugger and the Debugger Target . . . . . . . . . . . . . . . . . . . . . . 69 Symbols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Controlling Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Breaking Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Resuming Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Stepping Through Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Exiting a Debugging Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Loading Managed Code Extensions . . . . . . . . . . . . . . . . . . . . . . . . . 85 Loading the SOS Extension DLL . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Loading the SOSEX Extension DLL . . . . . . . . . . . . . . . . . . . . . . . . 89 Controlling CLR Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Setting Breakpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Setting Breakpoints on JIT Compiled Functions . . . . . . . . . . . . . . . . 93 Setting Breakpoints on Functions Not Yet JIT Compiled . . . . . . . . . . 96 Setting Breakpoints in Precompiled Assemblies . . . . . . . . . . . . . . . 98 Setting Breakpoints on Generic Methods . . . . . . . . . . . . . . . . . . . 101 Object Inspection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Dumping Raw Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Dumping Value Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Dumping Basic Reference Types . . . . . . . . . . . . . . . . . . . . . . . . . 116 Dumping Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Dumping Stack Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Finding Object Sizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Dumping Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Thread Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 ClrStack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 x Contents From the Library of Gary Chen DumpStack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 EEStack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 COMState . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Code Inspection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Unassembling Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Getting a Method Descriptor from a Code Address . . . . . . . . . . . 144 Showing the Intermediate Language Instructions . . . . . . . . . . . . . . 145 CLR Internals Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 Getting the CLR Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 Finding the Method Descriptor from a Name . . . . . . . . . . . . . . . . 147 Dumping the Sync Block of an Object . . . . . . . . . . . . . . . . . . . . 148 Dumping the Method Table of an Object . . . . . . . . . . . . . . . . . . . 148 Dumping Information About the Managed Heap and Garbage Collector . . . . . . . . . . . . . . . . . . . . . . . . . . 148 Diagnostics Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Finding the Application Domain of an Object . . . . . . . . . . . . . . . 149 Process Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 SOSEX Extension Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Extended Breakpoint Support . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Managed Metadata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 Stack Traces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Object Inspection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 Automated Deadlock Detection . . . . . . . . . . . . . . . . . . . . . . . . . 159 Managed Heap and Garbage Collector Commands . . . . . . . . . . 161 Crash Dump Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 PART II: APPLIED DEBUGGING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Chapter 4: Assembly Loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 CLR Loader Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Assembly Identity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Global Assembly Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Default Load Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Load-from Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 Load without Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 Simple Assembly Load Failure . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 Contents xi From the Library of Gary Chen Load Context Failure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Interoperability and DllNotFoundException . . . . . . . . . . . . . . . . . . . 195 Debugging Light Weight Code Generation . . . . . . . . . . . . . . . . . . . 197 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Chapter 5: Managed Heap and Garbage Collection . . . . . . . . . . . 203 Windows Memory Architecture Overview . . . . . . . . . . . . . . . . . . . 204 Allocating Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 Garbage Collector Internals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Generations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Roots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 Finalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 Reclaiming GC Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Large Object Heap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Pinning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 Garbage Collection Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 Debugging Managed Heap Corruptions . . . . . . . . . . . . . . . . . . . . . 254 Debugging Managed Heap Fragmentation . . . . . . . . . . . . . . . . . . . 262 Debugging Out of Memory Exceptions . . . . . . . . . . . . . . . . . . . . . 272 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 Chapter 6: Synchronization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 Synchronization Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 Thread Synchronization Primitives . . . . . . . . . . . . . . . . . . . . . . . . . 294 Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 Mutex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 Semaphore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 ReaderWriterLock(Slim) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 Thread Pool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 Synchronization Internals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 Object Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 Sync Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 Thin Locks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 Synchronization Scenarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 Basic Deadlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 Orphaned Lock Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 xii Contents From the Library of Gary Chen Thread Abortion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 Finalizer Hangs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 Chapter 7: Interoperability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 Platform Invocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 COM Interoperability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 Runtime Callable Wrapper . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 Debugging P/Invoke Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 Calling Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 Delegates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 Debugging Interop Leaks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 Debugging COM Interop Finalization . . . . . . . . . . . . . . . . . . . . . . . 378 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388 PART III: ADVANCED TOPICS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 Chapter 8: Postmortem Debugging . . . . . . . . . . . . . . . . . . . . . . . . 391 Dump File Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 Generating Dump Files Using the Debuggers . . . . . . . . . . . . . . . . 394 Generating Dump Files Using ADPlus . . . . . . . . . . . . . . . . . . . . . 401 Debugging Dump Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 The Data Access Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404 Dump File Analysis: Unhandled .NET Exception . . . . . . . . . . . . . . 407 Windows Error Reporting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 Windows Error Reporting Architecture . . . . . . . . . . . . . . . . . . . . 410 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438 Chapter 9: Power Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 PowerDbg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 Installing PowerDbg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 Analyze-PowerDbgThreads . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 Send-PowerDbgCommand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 Extending PowerDbg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 Contents xiii From the Library of Gary Chen Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448 SOS Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448 .NET Framework Source-Level Debugging . . . . . . . . . . . . . . . . . . 451 Visual Studio 2010 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456 CLR Profiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460 Running the CLR Profiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460 Summary View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462 Histogram Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 Graph Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 WinDbg and the CmdTree Command . . . . . . . . . . . . . . . . . . . . . . . 467 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469 Chapter 10: CLR 4.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 Debugging Tools for Windows . . . . . . . . . . . . . . . . . . . . . . . . . . 471 .NET 4.0 Redistributable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472 SOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472 Managed Heap and Garbage Collection . . . . . . . . . . . . . . . . . . . . 472 Extended Diagnostics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 Background Garbage Collection . . . . . . . . . . . . . . . . . . . . . . . . 478 Synchronization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 Thread Pool and Tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481 Barrier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481 CountdownEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482 ManualResetEventSlim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482 SemaphoreSlim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482 SpinWait and SpinLock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482 Interoperability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 Postmortem Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 ...展开收缩
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 相关搜索: .Net Debugging CLR
 输入关键字,在本站1000多万海量源码库中尽情搜索: