Oracle Solaris Modular Debugger Guide

Appendix B Notes

Warnings

The following warning information applies to the use of MDB.

Use of the Error Recovery Mechanism

The debugger and its dmods execute in the same address space, and thus it is quite possible that a buggy dmod can cause MDB to dump core or otherwise misbehave. The MDB resume capability, described in Signal Handling, provides a limited recovery mechanism for these situations. However, it is not possible for MDB to know definitively whether the dmod in question has corrupted only its own state, or the debugger's global state. Therefore a resume operation cannot be guaranteed to be safe, or to prevent a subsequent crash of the debugger. The safest course of action following a resume is to save any important debug information, and then quit and restart the debugger.

Use of the Debugger to Modify the Live Operating System

The use of the debugger to modify (that is, write to) the address space of live running operating system is extremely dangerous, and may result in a system panic in the event the user damages a kernel data structure.

Use of kmdb to Stop the Live Operating System

The use of kmdb to stop the live operating system using mdb -K or by setting a breakpoint in the live operating system is intended for use by developers and not on production systems. When the operating system kernel is stopped by kmdb, operating system services and networking are not executing, and other systems on the network that depend upon the target system will not be able to contact the target system.

Notes

Limitations on Examining Process Core Files

MDB does not provide support for examining process core files that were generated by a release of the Solaris operating system preceding Solaris 2.6. If a core file from one operating system release is examined on a different operating system release, the run-time link-editor debugging interface (librtld_db) may not be able to initialize. In this case, symbol information for shared libraries will not be available. Furthermore, since shared mappings are not present in user core files, the text section and read-only data of shared libraries may not match the data that was present in the process at the time it dumped core. Core files from Solaris x86 systems may not be examined on Solaris SPARC systems, and vice-versa.

Limitations on Examining Crash Dump Files

Crash dumps from Solaris 7 and earlier releases may only be examined with the aid of the libkvm from the corresponding operating system release. If a crash dump from one operating system release is examined using the dmods from a different operating system release, changes in the kernel implementation may prevent some dcmds or walkers from working properly. MDB will issue a warning message if it detects this condition. Crash dumps from Solaris x86 systems may not be examined on Solaris SPARC systems, and vice-versa.

Relationship Between 32-bit and 64-bit Debugger

MDB provides support for debugging both 32-bit and 64-bit programs. Once it has examined the target and determined its data model, MDB will automatically re-execute the mdb binary that has the same data model as the target, if necessary. This approach simplifies the task of writing debugger modules, because the modules that are loaded will use the same data model as the primary target. Only the 64-bit debugger may be used to debug 64-bit target programs. The 64-bit debugger can only be used on a system that is running the 64-bit operating environment.

Limitations on Memory Available to kmdb

The memory available to kmdb is allocated when the debugger is loaded, and cannot be expanded after that point in time. If debugger commands attempt to allocate more memory than is available, they will not be able to execute. The debugger will attempt to gracefully recover from low memory situations, but may be forced to terminate the system under dire circumstances. System memory constraints are especially acute on x86 platforms that use the 32–bit operating system kernel.

Developer Information

The mdb(1) man page provides a detailed description of built-in mdb features for easy developer reference. The header file <sys/mdb_modapi.h> contains prototypes for the functions in the MDB Module API, and the SUNWmdbdm package provides source code for an example module in the directory /usr/demo/mdb.