Sold Out
Book Categories |
List of Sidebars | xv | ||
Foreword | xvii | ||
Acknowledgments | xxi | ||
Introduction | xxiii | ||
Part I | The Gestalt of Debugging | ||
Chapter 1 | Bugs: Where They Come From and How You Solve Them | 3 | |
Bugs and Debugging | 3 | ||
What Are Bugs? | 4 | ||
Process Bugs and Solutions | 6 | ||
Planning for Debugging | 11 | ||
Prerequisites to Debugging | 12 | ||
The Skill Set | 12 | ||
Learning the Skill Set | 14 | ||
The Debugging Process | 15 | ||
Step 1 | Duplicate the Bug | 16 | |
Step 2 | Describe the Bug | 17 | |
Step 3 | Always Assume That the Bug Is Yours | 17 | |
Step 4 | Divide and Conquer | 17 | |
Step 5 | Think Creatively | 18 | |
Step 6 | Leverage Tools | 18 | |
Step 7 | Start Heavy Debugging | 19 | |
Step 8 | Verify That the Bug Is Fixed | 19 | |
Step 9 | Learn and Share | 21 | |
Final Debugging Process Secret | 21 | ||
Summary | 21 | ||
Chapter 2 | Getting Started Debugging | 23 | |
Track Changes Until You Throw Away | |||
The Project | 23 | ||
Version Control Systems | 24 | ||
Bug Tracking Systems | 27 | ||
Choosing the Right Systems for You | 28 | ||
Schedule Time for Building Debugging Systems | 29 | ||
Build All Builds with Debugging Symbols | 30 | ||
Treat Warnings as Errors--Maybe | 31 | ||
Know Where Your DLLs Load | 33 | ||
Design a Lightweight Diagnostic System for Release Builds | 40 | ||
Frequent Builds and Smoke Tests Are Mandatory | 42 | ||
Frequent Builds | 42 | ||
Smoke Tests | 43 | ||
Build the Installation Program Immediately | 45 | ||
QA Must Test with Debug Builds | 45 | ||
Summary | 46 | ||
Chapter 3 | Debugging During Coding | 47 | |
Part II | Power Debugging | ||
Chapter 4 | How Do Debuggers Work? | 85 | |
Types of Windows Debuggers | 86 | ||
User-Mode Debuggers | 86 | ||
Kernel-Mode Debuggers | 87 | ||
Windows 2000 Operating System Support for Debuggees | 92 | ||
Windows 2000 Heap Checking | 92 | ||
Automatically Starting in a Debugger | 95 | ||
Quick Break Keys | 95 | ||
MinDBG: A Simple Win32 Debugger | 96 | ||
WDBG: A Real Debugger | 110 | ||
Reading and Writing Memory | 112 | ||
Breakpoints and Single Stepping | 114 | ||
Symbol Tables, Symbol Engines, and Stack Walking | 124 | ||
Step Into, Step Over, and Step Out | 139 | ||
An Interesting Development Problem with WDBG | 140 | ||
So You Want to Write Your Own Debugger | 143 | ||
What's Next for WDBG? | 144 | ||
Summary | 145 | ||
Chapter 5 | Power Debugging with the Visual C++ Debugger | 147 | |
Advanced Breakpoints and How to Use Them | 148 | ||
Advanced Breakpoint Syntax and Location Breakpoints | 149 | ||
Quickly Breaking on Any Function | 150 | ||
Breakpoints on System or Exported Functions | 151 | ||
Location Breakpoint Modifiers | 153 | ||
Global Expression and Conditional Breakpoints | 156 | ||
Windows Message Breakpoints | 158 | ||
Remote Debugging | 160 | ||
Tips and Tricks | 163 | ||
Setting Breakpoints | 164 | ||
The Watch Window | 164 | ||
The Set Next Statement Command | 170 | ||
Debugging Visual Basic Compiled Code | 171 | ||
Summary | 172 | ||
Chapter 6 | Power Debugging with x86 Assembly Language and the Visual C++ Debugger Disassembly Window | 175 | |
The Basics of the CPU | 176 | ||
Registers | 177 | ||
Instruction Format and Memory Addressing | 179 | ||
A Word About the Visual C++ Inline Assembler | 181 | ||
Instructions You Need to Know | 182 | ||
Stack Manipulation | 182 | ||
Very Common Simple Instructions | 184 | ||
Common Sequence: Function Entry and Exit | 184 | ||
Variable Access: Global Variables, Parameters, and Local Variables | 186 | ||
Calling Procedures and Returning | 190 | ||
Calling Conventions | 191 | ||
Calling Conventions Example | 193 | ||
More Instructions You Need to Know | 197 | ||
Data Manipulation | 197 | ||
Pointer Manipulation | 199 | ||
Comparing and Testing | 200 | ||
Jump and Branch Instructions | 200 | ||
Looping | 203 | ||
String Manipulation | 204 | ||
Common Assembly-Language Constructs | 207 | ||
FS Register Access | 207 | ||
Structure and Class References | 209 | ||
A Complete Example | 210 | ||
The Disassembly Window | 214 | ||
Navigating | 214 | ||
Viewing Parameters on the Stack | 215 | ||
The Set Next Statement Command | 217 | ||
The Memory Window and the Disassembly Window | 218 | ||
Tips and Tricks | 222 | ||
Endians | 222 | ||
Garbage Code | 223 | ||
Registers and the Watch Window | 223 | ||
Learn from ASM Files | 223 | ||
Summary | 224 | ||
Chapter 7 | Power Debugging with the Visual Basic Debugger | 225 | |
Visual Basic P-Code | 226 | ||
A P-Code History Lesson | 226 | ||
Ramifications of Using P-Code | 227 | ||
Error Trapping: Break In or Break On Options | 229 | ||
Break On All Errors | 230 | ||
Break On Unhandled Errors | 230 | ||
Break In Class Module | 231 | ||
A Final Plea for Decent Error Trapping | 231 | ||
Visual Basic Debugger Windows | 231 | ||
The Locals Window | 232 | ||
The Immediate Window | 232 | ||
The Watch Window | 233 | ||
Tips and Tricks | 235 | ||
Add the Run To Cursor Button to the Debug Toolbar | 235 | ||
Avoid Compile On Demand | 235 | ||
Group Projects Are the Way to Go for Debugging | 235 | ||
Visual Basic Debugging and Reality Might Conflict | 236 | ||
Summary | 236 | ||
Part III | Power Tools and Techniques | ||
Chapter 8 | Finding Source and Line Information with Just a Crash Address | 239 | |
Creating and Reading a MAP File | 240 | ||
MAP File Contents | 241 | ||
Finding the Function, Source File, and Line Number | 244 | ||
Using CrashFinder | 245 | ||
Implementation Highlights | 248 | ||
What's Next for CrashFinder? | 254 | ||
Summary | 254 | ||
Chapter 9 | Crash Handlers | 255 | |
Structured Exception Handling vs. C++ Exception Handling | 256 | ||
Structured Exception Handling | 256 | ||
C++ Exception Handling | 259 | ||
Combining SEH and C++ Exception Handling | 260 | ||
The SetUnhandledExceptionFilter API Function | 264 | ||
Using the CrashHandler API | 265 | ||
Translating Exception_Pointers Structures | 293 | ||
Summary | 295 | ||
Chapter 10 | Debugging Windows 2000 Services and DLLs That Load into Services | 297 | |
Service Basics | 298 | ||
The API Dance | 298 | ||
The Security Dance | 299 | ||
Debugging Services | 300 | ||
Debugging the Core Code | 301 | ||
Debugging the Basic Service | 301 | ||
Debugging for Real | 306 | ||
Summary | 306 | ||
Chapter 11 | Multimachine, Multiprocess Tracing | 307 | |
TraceSrv Requirements | 308 | ||
TraceSrv and Dcomcnfg | 317 | ||
Initial Problems with TraceSrv | 319 | ||
TraceView and Security | 321 | ||
Using TraceSrv | 323 | ||
Summary | 325 | ||
Chapter 12 | Multithreaded Deadlocks | 327 | |
Multithreading Tips and Tricks | 327 | ||
Don't Do It | 328 | ||
Multithread Only Small, Discrete Pieces | 328 | ||
Synchronize at the Lowest Level | 328 | ||
Review the Code--And Review the Code Again | 328 | ||
Test on Multiprocessor Machines | 329 | ||
DeadlockDetection Requirements | 329 | ||
High-Level Design Issues with DeadlockDetection | 332 | ||
Using DeadlockDetection | 334 | ||
Implementing DeadlockDetection | 337 | ||
Hooking Imported Functions | 337 | ||
Implementation Highlights | 345 | ||
What's Next for DeadlockDetection? | 357 | ||
Summary | 359 | ||
Chapter 13 | Automated Testing | 361 | |
The Bane of Unit Testing: User Interfaces | 361 | ||
Tester Requirements | 362 | ||
Using Tester | 364 | ||
Implementing Tester | 368 | ||
What's Next for Tester? | 385 | ||
Summary | 386 | ||
Chapter 14 | Limiting OutputDebugString Calls | 387 | |
Also-Ran Solutions | 388 | ||
LIMODS Requirements | 389 | ||
Using LIMODS | 389 | ||
Living with MFC | 389 | ||
Calling LIMODS from Your Code | 391 | ||
Selecting Which Source Files to Trace From | 393 | ||
Implementing LIMODS | 394 | ||
Determining Source Code Ranges | 394 | ||
LOM Files Explained | 395 | ||
Excluding Source Files from LOM Files | 396 | ||
What LIMODSDLL.DLL Hooks | 397 | ||
Handling __cdecl Hooks | 397 | ||
Hooking Functions Exported by Ordinal Value | 399 | ||
General Implementation Issues | 402 | ||
What's Next for LIMODS? | 404 | ||
Summary | 404 | ||
Chapter 15 | The Debug C Run-Time Library | 405 | |
Features of the Debug C Run-Time Library | 406 | ||
Using the Debug C Run-Time Library | 407 | ||
Choosing the Right C Run-Time Library for Your Application | 409 | ||
Using MemDumperValidator | 411 | ||
Using MemDumperValidator with C++ | 418 | ||
Using MemDumperValidator with C | 419 | ||
Deep Validations | 420 | ||
Implementing MemDumperValidator | 424 | ||
Initialization and Termination in C++ | 426 | ||
Where Have All the Leak Reports Gone? | 427 | ||
Using MemStress | 428 | ||
An Interesting Stress Problem | 430 | ||
Summary | 431 | ||
Part IV | Appendixes | ||
Appendix A | Reading Dr. Watson Log Files | 435 | |
Windows 2000 Dr. Watson Log | 435 | ||
Windows 98 Dr. Watson Log | 442 | ||
Appendix B | Resources for Windows Developers | 445 | |
Books | 445 | ||
Software Development | 446 | ||
Languages | 446 | ||
Debugging and Testing | 447 | ||
Windows and Windows Technologies | 447 | ||
The CPU and Hardware | 448 | ||
Tools | 449 | ||
Web Sites | 450 | ||
Index |
Title: Debugging applications Manufacturer: WonderClubWonderClub Item Number: 9780735608863 Number: 1 Product Description: Debugging applications Universal Product Code (UPC): 9780735608863 WonderClub Stock Keeping Unit (WSKU): 9780735608863 Rating: 5/5 based on 1 Reviews Image Location: https://wonderclub.com/images/covers/88/63/9780735608863.jpg Weight: 0.200 kg (0.44 lbs) Width: 7.350 cm (2.89 inches) Heigh : 9.230 cm (3.63 inches) Depth: 1.370 cm (0.54 inches) Date Added: August 25, 2020, Added By: Ross Date Last Edited: August 25, 2020, Edited By: Ross
|