Table of Contents
Audience
New and Changed Features
Organization
Related Documents
Reader's Comments
Conventions
1 Introduction to Kernel Debugging
1.1 Linking a Kernel Image for Debugging
1.2 Debugging Kernel Programs
1.3 Debugging the Running Kernel
1.4 Analyzing a Crash Dump File
2 Kernel Debugging Utilities
2.1 The dbx Debugger
2.1.1 Kernel Debugging Flag
2.1.2 Debugging Stripped Images
2.1.3 Examining Memory Contents
2.1.4 Printing the Values of Variables and Data Structures
2.1.5 Displaying a Data Structure Format
2.1.6 Debugging Multiple Threads
2.1.7 Examining the Exception Frame
2.1.8 Extracting the Preserved Message Buffer
2.1.9 Debugging on SMP Systems
2.2 The kdbx Debugger
2.2.1 Beginning a kdbx Session
2.2.2 The kdbx Debugger Commands
2.2.3 Using kdbx Debugger Extensions
2.2.3.1 Displaying the Address Resolution Protocol Table
2.2.3.2 Performing Commands on Array Elements
2.2.3.3 Displaying the Buffer Table
2.2.3.4 Displaying the Callout Table and Absolute Callout Table
2.2.3.5 Casting Information Stored in a Specific Address
2.2.3.6 Displaying Machine Configuration
2.2.3.7 Converting the Base of Numbers
2.2.3.8 Displaying CPU Use Statistics
2.2.3.9 Disassembling Instructions
2.2.3.10 Displaying Remote Exported Entries
2.2.3.11 Displaying the File Table
2.2.3.12 Displaying the udb and tcb Tables
2.2.3.13 Performing Commands on Lists
2.2.3.14 Displaying the lockstats Structures
2.2.3.15 Displaying lockinfo Structures
2.2.3.16 Displaying the Mount Table
2.2.3.17 Displaying the Namecache Structures
2.2.3.18 Displaying Processes' Open Files
2.2.3.19 Converting the Contents of Memory to Symbols
2.2.3.20 Displaying the Process Control Block for a Thread
2.2.3.21 Formatting Command Arguments
2.2.3.22 Displaying the Process Table
2.2.3.23 Converting an Address to a Procedure name
2.2.3.24 Displaying Sockets from the File Table
2.2.3.25 Displaying a Summary of the System Information
2.2.3.26 Displaying a Summary of Swap Space
2.2.3.27 Displaying the Task Table
2.2.3.28 Displaying Information About Threads
2.2.3.29 Displaying a Stack Trace of Threads
2.2.3.30 Displaying a u Structure
2.2.3.31 Displaying References to the ucred Structure
2.2.3.32 Removing Aliases
2.2.3.33 Displaying the vnode Table
2.3 The kdebug Debugger
2.3.1 Getting Ready to Use the kdebug Debugger
2.3.2 Invoking the kdebug Debugger
2.3.3 Diagnosing kdebug Setup Problems
2.3.4 Notes on Using the kdebug Debugger
2.4 The crashdc Utility
3 Writing Extensions to the kdbx Debugger
3.1 Basic Considerations for Writing Extensions
3.2 Standard kdbx Library Functions
3.2.1 Special kdbx Extension Data Types
3.2.2 Converting an Address to a Procedure Name
3.2.3 Getting a Representation of an Array Element
3.2.4 Retrieving an Array Element Value
3.2.5 Returning the Size of an Array
3.2.6 Casting a Pointer to a Data Structure
3.2.7 Checking Arguments Passed to an Extension
3.2.8 Checking the Fields in a Structure
3.2.9 Setting the kdbx Context
3.2.10 Passing Commands to the dbx Debugger
3.2.11 Dereferencing a Pointer
3.2.12 Displaying the Error Messages Stored in Fields
3.2.13 Converting a Long Address to a String Address
3.2.14 Freeing Memory
3.2.15 Passing Commands to the kdbx Debugger
3.2.16 Getting the Address of an Item in a Linked List
3.2.17 Passing an Extension to kdbx
3.2.18 Getting the Next Token as an Integer
3.2.19 Getting the Next Token as a String
3.2.20 Displaying a Message
3.2.21 Displaying Status Messages
3.2.22 Exiting from an Extension
3.2.23 Reading the Values in Structure Fields
3.2.24 Returning a Line of kdbx Output
3.2.25 Reading an Area of Memory
3.2.26 Reading the Response to a kdbx Command
3.2.27 Reading Symbol Representations
3.2.28 Reading a Symbol's Address
3.2.29 Reading the Value of a Symbol
3.2.30 Getting the Address of a Data Representation
3.2.31 Converting a String to a Number
3.3 Examples of kdbx Extensions
3.4 Compiling Custom Extensions
3.5 Debugging Custom Extensions
4 Managing Crash Dumps
4.1 Crash Dump Creation
4.2 Choosing the Contents of Crash Dumps
4.2.1 Including User Page Tables in Partial Crash Dumps
4.2.2 Selecting Partial or Full Crash Dumps
4.3 Planning Crash Dump Space
4.3.1 Estimating the Size of Partial Crash Dumps
4.3.2 Estimating the Size of Full Crash Dumps
4.3.3 Adjusting the Primary Swap Partition's Crash Dump Threshold
4.4 Crash Dump File Creation and Crash Dump Logging
4.4.1 Crash Dump File Creation
4.4.2 Crash Dump Logging
4.5 Planning and Allocating File System Space for Crash Dump Files
4.6 Compressing and Uncompressing Crash Dump Files
4.7 Creating Dumps of a Hung System
5 Crash Analysis Examples
5.1 Guidelines for Examining Crash Dump Files
5.2 Identifying a Crash Caused by a Software Problem
5.2.1 Using dbx to Determine the Cause of a Software Panic
5.2.2 Using kdbx to Determine the Cause of a Software Panic
5.3 Identifying a Hardware Exception
5.3.1 Using dbx to Determine the Cause of a Hardware Error
5.3.2 Using kdbx to Determine the Cause of a Hardware Error
5.4 Finding a Panic String in a Thread Other Than the Current Thread
5.5 Identifying the Cause of a Crash on an SMP System