Title and Copyright Information |
About This Manual |
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 | Invoking the dbx Debugger for Kernel Debugging |
2.1.2 | Debugging Stripped Images |
2.1.3 | Specifying the Location of Loadable Modules for Crash Dumps |
2.1.4 | Examining Memory Contents |
2.1.5 | Printing the Values of Variables and Data Structures |
2.1.6 | Displaying a Data Structure Format |
2.1.7 | Debugging Multiple Threads |
2.1.8 | Examining the Exception Frame |
2.1.9 | Examining the User Program Stack |
2.1.10 | Extracting the Preserved Message Buffer |
2.1.11 | 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 | Crash Analysis Examples |
4.1 | Guidelines for Examining Crash Dump Files |
4.2 | Identifying a Crash Caused by a Software Problem |
4.2.1 | Using dbx to Determine the Cause of a Software Panic |
4.2.2 | Using kdbx to Determine the Cause of a Software Panic |
4.3 | Identifying a Hardware Exception |
4.3.1 | Using dbx to Determine the Cause of a Hardware Error |
4.3.2 | Using kdbx to Determine the Cause of a Hardware Error |
4.4 | Finding a Panic String in a Thread Other Than the Current Thread |
4.5 | Identifying the Cause of a Crash on an SMP System |
A | Output from the crashdc Command |
Examples |
3-1 | Template Extension Using Lists |
3-2 | Extension That Uses Linked Lists: callout.c |
3-3 | Template Extensions Using Arrays |
3-4 | Extension That Uses Arrays: file.c |
3-5 | Extension That Uses Global Symbols: sum.c |
Figures |
2-1 | Using a Gateway System During Remote Debugging |
Tables |
2-1 | The dbx Address Modes |
Index |