شروع دوره های تخصصی, پایتون | هوش مصنوعی 18 دی شروع دوره های تخصصی, پایتون | هوش مصنوعی 18 دی
ثبت نام
Mario Hewardt

ADVANCED .NET DEBUGGING

نویسنده :Mario Hewardt

    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

    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

    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

    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

    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

    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
    Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487

1394/07/27 5465 433
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...