1.\" $NetBSD: ddb.4,v 1.29 1999/01/08 13:23:56 msaitoh Exp $ 2.\" 3.\" Copyright (c) 1997, 1998 The NetBSD Foundation, Inc. 4.\" All rights reserved. 5.\" 6.\" This code is derived from software contributed to The NetBSD Foundation 7.\" by Luke Mewburn 8.\" 9.\" Redistribution and use in source and binary forms, with or without 10.\" modification, are permitted provided that the following conditions 11.\" are met: 12.\" 1. Redistributions of source code must retain the above copyright 13.\" notice, this list of conditions and the following disclaimer. 14.\" 2. Redistributions in binary form must reproduce the above copyright 15.\" notice, this list of conditions and the following disclaimer in the 16.\" documentation and/or other materials provided with the distribution. 17.\" 3. All advertising materials mentioning features or use of this software 18.\" must display the following acknowledgement: 19.\" This product includes software developed by the NetBSD 20.\" Foundation, Inc. and its contributors. 21.\" 4. Neither the name of The NetBSD Foundation nor the names of its 22.\" contributors may be used to endorse or promote products derived 23.\" from this software without specific prior written permission. 24.\" 25.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 26.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 27.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 28.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 29.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 30.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 31.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 32.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 33.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 34.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 35.\" POSSIBILITY OF SUCH DAMAGE. 36.\" 37.\" --- 38.\" This manual page was derived from a -man.old document which bore 39.\" the following copyright message: 40.\" --- 41.\" 42.\" Mach Operating System 43.\" Copyright (c) 1991,1990 Carnegie Mellon University 44.\" All Rights Reserved. 45.\" 46.\" Permission to use, copy, modify and distribute this software and its 47.\" documentation is hereby granted, provided that both the copyright 48.\" notice and this permission notice appear in all copies of the 49.\" software, derivative works or modified versions, and any portions 50.\" thereof, and that both notices appear in supporting documentation. 51.\" 52.\" CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 53.\" CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR 54.\" ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 55.\" 56.\" Carnegie Mellon requests users of this software to return to 57.\" 58.\" Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 59.\" School of Computer Science 60.\" Carnegie Mellon University 61.\" Pittsburgh PA 15213-3890 62.\" 63.\" any improvements or extensions that they make and grant Carnegie Mellon 64.\" the rights to redistribute these changes. 65.\" 66.Dd November 17, 1997 67.Dt DDB 4 68.Os NetBSD 69.Sh NAME 70.Nm ddb 71.Nd in-kernel debugger 72.Sh SYNOPSIS 73.Cd options DDB 74.Pp 75To enable history editing: 76.Cd options DDB_HISTORY_SIZE=integer 77.Pp 78To disable entering 79.Nm 80upon kernel panic: 81.Cd options DDB_ONPANIC=0 82.Sh DESCRIPTION 83.Nm 84is the in-kernel debugger. 85It may be entered at any time via a special key sequence, and 86optionally may be invoked when the kernel panics. 87.Sh ENTERING THE DEBUGGER 88Unless 89.Dv DDB_ONPANIC 90is set to 0, 91.Nm 92will be activated whenever the kernel would otherwise panic. 93.Pp 94.Nm 95may also be activated from the console. 96In general, sending a break on a serial console will activate 97.Nm "" . 98There are also key sequences for each port that will activate 99.Nm 100from the keyboard: 101.Bl -tag -offset indent -width "mvme68k" 102.It alpha 103<Ctrl>-<Alt>-<Esc> on PC style keyboards. 104.It amiga 105<LAlt>-<LAmiga>-<F10> 106.It atari 107<Alt>-<LeftShift>-<F9> 108.It hp300 109<Shift>-<Reset> 110.It i386 111<Ctrl>-<Alt>-<Esc> 112.It mac68k 113<Command>-<Power>, or the Interrupt switch. 114.It mvme68k 115Abort switch on CPU card. 116.It pmax 117<Do> on 118.Tn LK-201 119rcons console. 120.br 121<Break> on serial console. 122.It sparc 123<L1>-A, or <Stop>-A on a 124.Tn Sun 125keyboard. 126.br 127<Break> on serial console. 128.It sun3 129<L1>-A, or <Stop>-A on a 130.Tn Sun 131keyboard. 132.br 133<Break> on serial console. 134.It sun3x 135<L1>-A, or <Stop>-A on a 136.Tn Sun 137keyboard. 138.br 139<Break> on serial console. 140.It x68k 141Interrupt switch on the body. 142.El 143.Pp 144In addition, 145.Nm 146may be explicitly activated by the debugging code in the kernel 147if 148.Cm DDB 149is configured. 150.Sh COMMAND SYNTAX 151.Pp 152The general command syntax is: 153.Bd -ragged -offset indent 154.Ic command Ns Op Cm / Ns Ar modifier 155.Ar address 156.Op Cm , Ns Ar count 157.Ed 158.Pp 159The current memory location being edited is referred to as 160.Ar dot , 161and the next location is 162.Ar next . 163They are displayed as hexadecimal numbers. 164.Pp 165Commands that examine and/or modify memory update 166.Ar dot 167to the address of the last line examined or the last location 168modified, and set 169.Ar next 170to the next location to be examined or modified. 171Other commands don't change 172.Ar dot , 173and set 174.Ar next 175to be the same as 176.Ar dot . 177.Pp 178A blank line repeats the previous command from the address 179.Ar next 180with a 181.Cm count 182of 1 and no modifiers. 183Specifying 184.Cm address 185sets 186.Em dot 187to the address. 188If 189.Cm address 190is omitted, 191.Em dot 192is used. 193A missing 194.Cm count 195is taken to be 1 for printing commands, and infinity for stack traces. 196.Pp 197.Nm 198has a 199.Xr more 1 -like 200functionality; if a number of lines in a command's output exceeds the number 201defined in the 202.Va lines 203variable, then 204.Nm 205displays 206.Dq "--db more--" 207and waits for a response, which may be one of: 208.Bl -tag -offset indent -width "<return>" 209.It <return> 210one more line. 211.It <space> 212one more page. 213.It Ic q 214abort the current command, and return to the command input mode. 215.El 216.Pp 217If 218.Nm 219history editing is enabled (by defining the 220.D1 Cd options DDB_HISTORY_SIZE=num 221kernel option), then a history of the last 222.Cm num 223commands is kept. 224The history can be manipulated with the following key sequences: 225.Bl -tag -offset indent -width "<Ctrl>-P" 226.It <Ctrl>-P 227retrieve previous command in history (if any). 228.It <Ctrl>-N 229retrieve next command in history (if any). 230.El 231.Sh COMMANDS 232.Nm 233supports the following commands: 234.Bl -tag -width 5n 235.It Xo 236.Ic examine Ns Op Cm / Ns Ar modifier 237.Ar address Ns Op Cm , Ns Ar count 238.Xc 239Display the address locations according to the format in 240.Ar modifier . 241Multiple modifier formats display multiple locations. 242If 243.Ar modifier 244isn't specified, the modifier from the last use of 245.Ic examine 246is used. 247.Pp 248The valid format characters for 249.Ar modifier 250are: 251.Bl -tag -offset indent -width 2n 252.It Cm b 253examine bytes (8 bits). 254.It Cm h 255examine half-words (16 bits). 256.It Cm l 257examine long-words (32 bits). 258.It Cm a 259print the location being examined. 260.It Cm A 261print the location with a line number if possible. 262.It Cm x 263display in unsigned hex. 264.It Cm z 265display in signed hex. 266.It Cm o 267display in unsigned octal. 268.It Cm d 269display in signed decimal. 270.It Cm u 271display in unsigned decimal. 272.It Cm r 273display in current radix, signed. 274.It Cm c 275display low 8 bits as a character. 276Non-printing characters as displayed as an octal escape code 277(e.g., 278.Sq \e000 ) . 279.It Cm s 280display the NUL terminated string at the location. 281Non-printing characters are displayed as octal escapes. 282.It Cm m 283display in unsigned hex with a character dump at the end of each line. 284The location is displayed as hex at the beginning of each line. 285.It Cm i 286display as a machine instruction. 287.It Cm I 288display as a machine instruction, with possible alternative formats 289depending upon the machine: 290.Bl -tag -offset indent -width "sparc" 291.It alpha 292print register operands 293.It m68k 294use Motorola syntax 295.It pc532 296print instruction bytes in hex 297.It vax 298don't assume that each external label is a procedure entry mask 299.El 300.El 301.It Xo 302.Ic x Ns Op Cm / Ns Ar modifier 303.Ar address Ns Op Cm , Ns Ar count 304.Xc 305A synonym for 306.Ic examine . 307.It Ic xf 308Examine forward. 309.Ic xf 310re-executes the most recent 311.Ic execute 312command with the same parameters except that 313.Ar address 314is set to 315.Ar next . 316.It Ic xb 317Examine backward. 318.Ic xb 319re-executes the most recent 320.Ic execute 321command with the same parameters, except that 322.Ar address 323is set to the last start address minus its size. 324.It Xo 325.Ic print Ns Op Cm /axzodurc 326.Ar address Op Ar address ... 327.Xc 328Print addresses 329.Ar address 330according to the modifier character, as per 331.Ic examine . 332Valid modifiers are: 333.Cm /a , 334.Cm /x , 335.Cm /z , 336.Cm /o , 337.Cm /d , 338.Cm /u , 339.Cm /r , 340and 341.Cm /c 342(as per 343.Ic examine ) . 344If no modifier is specified, the most recent one specified is used. 345.Ar address 346may be a string, and is printed 347.Dq as-is . 348For example: 349.Bd -literal -offset indent 350print/x "eax = " $eax "\enecx = " $ecx "\en" 351.Ed 352.Pp 353will produce: 354.Bd -literal -offset indent 355eax = xxxxxx 356ecx = yyyyyy 357.Ed 358.It Xo 359.Ic write Ns Op Cm /bhl 360.Ar address 361.Ar expression Op Ar expression ... 362.Xc 363Write the 364.Ar expression Ns s 365at succeeding locations. 366The unit size is specified with a modifier character, as per 367.Ic examine . 368Valid modifiers are: 369.Cm /b , 370.Cm /h , 371and 372.Cm /l . 373If no modifier is specified, 374.Cm /l 375is used. 376.Pp 377Warning: since there is no delimiter between 378.Ar expression Ns s , 379strange things may occur. 380It's best to enclose each 381.Ar expression 382in parentheses. 383.It Xo 384.Ic set 385.Cm $ Ns Ar variable 386.Op Cm = 387.Ar expression 388.Xc 389Set the named variable or register to the value of 390.Ar expression . 391Valid variable names are described in 392.Sx VARIABLES . 393.It Xo 394.Cm break Ns Op Cm /u 395.Ar address Ns Op Cm , Ns Ar count 396.Xc 397Set a breakpoint at 398.Ar address . 399If 400.Ar count 401is supplied, continues 402.Pq Ar count Ns -1 403times before stopping at the breakpoint. 404If the breakpoint is set, a breakpoint number is printed with 405.Sq # . 406This number can be used to 407.Ic delete 408the breakpoint, or to add 409conditions to it. 410.Pp 411If 412.Cm /u 413is specified, 414set a breakpoint at a user-space address. 415Without 416.Cm /u , 417.Ar address 418is considered to be in the kernel-space, and an address in the wrong 419space will be rejected, and an error message will be emitted. 420This modifier may only be used if it is supported by machine dependent 421routines. 422.Pp 423Warning: if a user text is shadowed by a normal user-space debugger, 424user-space breakpoints may not work correctly. 425Setting a breakpoint at the low-level code paths may also cause 426strange behavior. 427.It Xo 428.Ic delete 429.Ar "address" | 430.Cm # Ns Ar number 431.Xc 432Delete a breakpoint. 433The target breakpoint may be specified by 434.Ar address , 435as per 436.Ic break , 437or by the breakpoint number returned by 438.Ic break 439if it's prefixed with 440.Sq Cm # . 441.It Xo 442.Ic step Ns Op Cm /p 443.Op Cm , Ns Ar count 444.Xc 445Single-step 446.Ar count 447times. 448If 449.Cm /p 450is specified, print each instruction at each step. 451Otherwise, only print the last instruction. 452.Pp 453Warning: depending on the machine type, it may not be possible 454to single-step through some low-level code paths or user-space 455code. 456On machines with software-emulated single-stepping (e.g., pmax), 457stepping through code executed by interrupt handlers will probably 458do the wrong thing. 459.It Ic continue Ns Op Cm /c 460Continue execution until a breakpoint or watchpoint. 461If 462.Cm /c 463is specified, count instructions while executing. 464Some machines (e.g., pmax) also count loads and stores. 465.Pp 466Warning: when counting, the debugger is really silently 467single-stepping. 468This means that single-stepping on low-level may cause strange 469behavior. 470.It Ic until Ns Op Cm /p 471Stop at the next call or return instruction. 472If 473.Cm /p 474is specified, print the call nesting depth and the 475cumulative instruction count at each call or return. 476Otherwise, only print when the matching return is hit. 477.It Ic next Ns Op Cm /p 478Stop at the matching return instruction. 479If 480.Cm /p 481is specified, print the call nesting depth and the 482cumulative instruction count at each call or return. 483Otherwise, only print when the matching return is hit. 484.It Ic match Ns Op Cm /p 485A synonym for 486.Ic next . 487.It Xo 488.Cm trace Ns Op Cm /u 489.Sm off 490.Op Ar frame-address 491.Op Cm , Ar count 492.Sm on 493.Xc 494Stack trace from 495.Ar frame-address . 496If 497.Cm /u 498is specified, trace user-space, otherwise trace kernel-space. 499.Ar count 500is the number of frames to be traced. 501If 502.Ar count 503is omitted, all frames are printed. 504.Pp 505Warning: user-space stack trace is valid only if the machine dependent 506code supports it. 507.It Xo 508.Cm trace/t 509.Sm off 510.Op Ar pid 511.Op Cm , Ar count 512.Sm on 513.Xc 514Stack trace by 515.Dq thread 516(process, on 517.Nx ) 518rather than by stack frame address. 519Note that 520.Ar pid 521is interpreted using the current radix, whilst 522.Ic ps 523displays pids in decimal; prefix 524.Ar pid 525with 526.Sq 0t 527to force it to be interpreted as decimal. 528.Pp 529Warning: trace by pid is valid only if the machine dependent code 530supports it. 531.It Xo 532.Ic search Ns Op Cm /bhl 533.Ar address 534.Ar value 535.Op Ar mask 536.Op Cm , Ns Ar count 537.Xc 538Search memory from 539.Ar address 540for 541.Ar value . 542The unit size is specified with a modifier character, as per 543.Ic examine . 544Valid modifiers are: 545.Cm /b , 546.Cm /h , 547and 548.Cm /l . 549If no modifier is specified, 550.Cm /l 551is used. 552.Pp 553This command might fail in interesting ways if it doesn't find 554.Ar value . 555This is because 556.Nm 557doesn't always recover from touching bad memory. 558The optional 559.Ar count 560limits the search. 561.It Ic reboot Op Ar flags 562Reboot, using the optionally supplied boot 563.Ar flags . 564.Pp 565Note: Limitations of the command line interface preclude 566specification of a boot string. 567.It Xo 568.Sm off 569.Ic "show\ all\ procs" 570.Op Cm /a 571.Op Cm /n 572.Op Cm /w 573.Sm on 574.Xc 575Display all process information. 576Valid modifiers: 577.Bl -tag -width 3n 578.It Cm /n 579show process information in a 580.Xr ps 1 581style format (this is the default). 582Information printed includes: process ID, parent process ID, 583process group, UID, process status, process flags, process 584command name, and process wait channel message. 585.It Cm /a 586show the kernel virtual addresses of each process' 587proc structure, u-are, and vmspace structure. 588The vmspace address is also the address of the process' 589vm_map structure, and can be used in the 590.Ic "show map" 591command. 592.It Cm /w 593show each process' PID, command, system call emulation, wait channel 594address, and wait channel message. 595.El 596.It Xo 597.Sm off 598.Ic ps 599.Op Cm /a 600.Op Cm /n 601.Op Cm /w 602.Sm on 603.Xc 604A synonym for 605.Ic "show all procs" . 606.It Ic "show registers" Ns Op Cm /u 607Display the register set. 608If 609.Cm /u 610is specified, display user registers instead of kernel registers 611or the currently save one. 612.Pp 613Warning: support for 614.Cm /u 615is machine dependent. 616If not supported, incorrect information will be displayed. 617.It Xo 618.Ic "show map" Ns Op Cm /f 619.Ar address 620.Xc 621Print the vm_map at 622.Ar address . 623If 624.Cm /f 625is specified the complete map is printed. 626.It Xo 627.Ic "show object" Ns Op Cm /f 628.Ar address 629.Xc 630Print the vm_object at 631.Ar address . 632If 633.Cm /f 634is specified the complete object is printed. 635.It Ic "show watches" 636Display all watchpoints. 637.It Xo 638.Ic watch 639.Sm off 640.Ar address 641.Op Cm , Ar size 642.Sm on 643.Xc 644Set a watchpoint for a region. 645Execution stops when an attempt to modify the region occurs. 646.Ar size 647defaults to 4. 648.Pp 649If you specify a wrong space address, the request is 650rejected with an error message. 651.Pp 652Warning: attempts to watch wired kernel memory may cause 653an unrecoverable error in some systems such as i386. 654Watchpoints on user addresses work the best. 655.It Xo 656.Ic dwatch 657.Ar address 658.Xc 659Delete the watchpoint at 660.Ar address 661that was previously set with 662.Ic watch 663command. 664.It Xo 665.Ic kill 666.Ar pid Ns Op Cm , Ns Ar signal_number 667.Xc 668Send a signal to the process specified by the 669.Ar pid . 670If 671.Ar signal_number 672isn't specified, the SIGTERM signal is sent. 673.It Xo 674.Ic call 675.Sm off 676.Ar address 677.Oo 678.Cm ( Ar expression 679.Op Ar ,... 680.Cm ) 681.Oc 682.Sm on 683.Xc 684Call the function specified by 685.Ar address 686with the argument(s) listed in parentheses. 687Parentheses may be omitted if the function takes no arguments. 688The number of arguments is currently limited to 10. 689.El 690.Sh MACHINE-SPECIFIC COMMANDS 691The "glue" code that hooks 692.Nm 693into the 694.Nx 695kernel for any given port can also add machine specific commands 696to the 697.Nm 698command parser. 699All of these commands are preceded by the command word 700.Em machine 701to indicate that they are part of the machine-specific command 702set (e.g. 703.Ic "machine reboot" 704). 705Some of these commands are: 706.Ss ALPHA 707.Bl -tag -width "intrchain" 708.It Ic halt 709Call the PROM monitor to halt the CPU. 710.It Ic reboot 711Call the PROM monitor to reboot the CPU. 712.El 713.Ss ARM32 714.Bl -tag -width "intrchain" 715.It Ic vmstat 716Equivalent to 717.Xr vmstat 8 718output with "-s" option (statistics). 719.It Ic vnode 720Print out a description of a vnode. 721.It Ic intrchain 722Print the list of IRQ handlers. 723.It Ic panic 724Print the current "panic" string. 725.It Ic frame 726Given a trap frame address, print out the trap frame. 727.El 728.Ss MIPS 729.Bl -tag -width "intrchain" 730.It Ic halt 731Call the PROM monitor to halt the CPU. 732.It Ic tlb 733Print out the Translation Lookaside Buffer (TLB). 734.It Ic trapdump 735Print out the Trap Log. 736Only works in 737.Nx 738kernels compiled with 739.Dv DEBUG 740option. 741.El 742.Ss SPARC 743.Bl -tag -width "intrchain" 744.It Ic prom 745Exit to the Sun PROM monitor. 746.El 747.Ss SUN3 and SUN3X 748.Bl -tag -width "intrchain" 749.It Ic abort 750Drop into monitor via abort (allows continue). 751.It Ic halt 752Exit to Sun PROM monitor as in 753.Xr halt 8 . 754.It Ic reboot 755Reboot the machine as in 756.Xr reboot 8 . 757.It Ic pgmap 758Given an address, print the address, segment map, page map, and 759Page Table Entry (PTE). 760.El 761.Sh VARIABLES 762.Nm 763accesses registers and variables as 764.Cm $ Ns Ar name . 765Register names are as per the 766.Ic "show registers" 767command. 768Some variables are suffixed with numbers, and may have a modifier 769following a colon immediately after the variable name. 770For example, register variables may have a 771.Sq u 772modifier to indicate user register 773(e.g., 774.Li "$eax:u" ) . 775.Pp 776Built-in variables currently supported are: 777.Bl -tag -offset indent -width "maxwidth" 778.It Va lines 779The number of lines. 780This is used by the 781.Ic more 782feature. 783.It Va maxoff 784Addresses are printed as 785.Li 'symbol'+offset 786unless 787.Li offset 788is greater than 789.Va maxoff . 790.It Va maxwidth 791The width of the displayed line. 792.It Va onpanic 793If non-zero (the default), 794.Nm 795will be invoked when the kernel panics. 796If the kernel configuration option 797.D1 Cd options DDB_ONPANIC=0 798is used, 799.Va onpanic 800will be initialised to off. 801.It Va radix 802Input and output radix. 803.It Va tabstops 804Tab stop width. 805.It Va work Ns Sy xx 806Temporary work variable. 807.Sq Sy xx 808is between 0 and 31. 809.El 810.Pp 811All built-in variables are accessible via 812.Xr sysctl 3 . 813.Sh EXPRESSIONS 814Almost all expression operators in C are supported, except 815.Sq ~ , 816.Sq ^ , 817and unary 818.Sq & . 819Special rules in 820.Nm 821are: 822.Bl -tag -offset indent -width "identifier" 823.It Ar identifier 824name of a symbol. 825It is translated to the address (or value) of it. 826.Sq . 827and 828.Sq : 829can be used in the identifier. 830If supported by an object format dependent routine, 831.Sm off 832.Xo 833.Oo Ar filename : Oc 834.Ar function 835.Oo : Ar "line number" Oc , 836.Xc 837.Xo 838.Oo Ar filename : Oc 839.Ar variable , 840.Xc 841and 842.Xo 843.Ar filename 844.Oo : Ar "line number" Oc , 845.Xc 846.Sm on 847can be accepted as a symbol. 848The symbol may be prefixed with 849.Ar "symbol_table_name" Ns :: 850(e.g., 851.Li emulator::mach_msg_trap ) 852to specify other than kernel symbols. 853.It Ar number 854number. 855Radix is determined by the first two characters: 856.Sq 0x 857- hex, 858.Sq 0o 859- octal, 860.Sq 0t 861- decimal, 862otherwise follow current radix. 863.It Cm . 864.Ar dot 865.It Cm + 866.Ar next 867.It Cm .. 868address of the start of the last line examined. 869Unlike 870.Ar dot 871or 872.Ar next , 873this is only changed by the 874.Ic examine 875or 876.Ic write 877commands. 878.It Cm , 879last address explicitly specified. 880.It Cm $ Ns Ar name 881register name or variable. 882It is translated to the value of it. 883It may be followed by a 884.Sq : 885and modifiers as described above. 886.It Cm a 887multiple of right-hand side. 888.It Cm * Ns Ar expr 889expression indirection. 890It may be followed by a 891.Sq : 892and modifiers as described above. 893.El 894 895.Sh HISTORY 896The 897.Nm 898kernel debugger was written as part of the MACH project at 899Carnegie-Mellon University. 900.Sh SEE ALSO 901.Xr options 4 , 902.Xr sysctl 8 903