1.\" $NetBSD: ddb.4,v 1.202 2022/04/28 07:17:52 msaitoh Exp $ 2.\" 3.\" Copyright (c) 1997 - 2019 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.\" 18.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 19.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 20.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 21.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 22.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28.\" POSSIBILITY OF SUCH DAMAGE. 29.\" 30.\" --- 31.\" This manual page was derived from a -man.old document which bore 32.\" the following copyright message: 33.\" --- 34.\" 35.\" Mach Operating System 36.\" Copyright (c) 1991,1990 Carnegie Mellon University 37.\" All Rights Reserved. 38.\" 39.\" Permission to use, copy, modify and distribute this software and its 40.\" documentation is hereby granted, provided that both the copyright 41.\" notice and this permission notice appear in all copies of the 42.\" software, derivative works or modified versions, and any portions 43.\" thereof, and that both notices appear in supporting documentation. 44.\" 45.\" CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 46.\" CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR 47.\" ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 48.\" 49.\" Carnegie Mellon requests users of this software to return to 50.\" 51.\" Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 52.\" School of Computer Science 53.\" Carnegie Mellon University 54.\" Pittsburgh PA 15213-3890 55.\" 56.\" any improvements or extensions that they make and grant Carnegie Mellon 57.\" the rights to redistribute these changes. 58.\" 59.Dd April 28, 2022 60.Dt DDB 4 61.Os 62.Sh NAME 63.Nm ddb 64.Nd in-kernel debugger 65.Sh SYNOPSIS 66.Cd options DDB 67.Pp 68To enable history editing: 69.Cd options DDB_HISTORY_SIZE=integer 70.Pp 71To disable entering 72.\" XXX: hack; .Nm automatically introduces newline in SYNOPSIS 73.Ic ddb 74upon kernel panic: 75.Cd options DDB_ONPANIC=0 76.Pp 77To enable teeing all 78.\" XXX: hack; .Nm automatically introduces newline in SYNOPSIS 79.Ic ddb 80output to the kernel msgbuf: 81.Cd options DDB_TEE_MSGBUF=1 82.Pp 83To specify commands which will be executed on each entry to 84.Ic ddb : 85.Cd options DDB_COMMANDONENTER="trace;show registers" 86In this case, "trace" and then "show registers" will be executed automatically. 87.Pp 88To enable extended online help: 89.Cd options DDB_VERBOSE_HELP . 90.Sh DESCRIPTION 91.Nm 92is the in-kernel debugger. 93It may be entered at any time via a special key sequence, and 94optionally may be invoked when the kernel panics. 95.Sh ENTERING THE DEBUGGER 96Unless 97.Dv DDB_ONPANIC 98is set to 0, 99.Nm 100will be activated whenever the kernel would otherwise panic. 101.Pp 102.Nm 103may also be activated from the console. 104In general, sending a break on a serial console will activate 105.Nm . 106There are also key sequences for each port that will activate 107.Nm 108from the keyboard: 109.Bl -tag -offset indent -width "xen domU" -compact 110.It alpha 111<Ctrl>-<Alt>-<Esc> on PC style keyboards. 112.It amd64 113<Ctrl>-<Alt>-<Esc> 114.It "" 115<Break> on serial console. 116.It amiga 117<LAlt>-<LAmiga>-<F10> 118.It atari 119<Alt>-<LeftShift>-<F9> 120.It evbarm 121<Ctrl>-<Alt>-<Esc> on PC style keyboards. 122.It "" 123<Break> on serial console. 124.It "" 125Some models: 126+++++ 127(five plus signs) on serial console. 128.It hp300 129<Shift>-<Reset> 130.It hpcarm 131<Ctrl>-<Alt>-<Esc> 132.It hpcmips 133<Ctrl>-<Alt>-<Esc> 134.It hpcsh 135<Ctrl>-<Alt>-<Esc> 136.It hppa 137<Ctrl>-<Alt>-<Esc> on PC style keyboards. 138.It "" 139+++++ 140(five plus signs) on PDC console 141.It "" 142<Break> on serial console. 143.It i386 144<Ctrl>-<Alt>-<Esc> 145.It "" 146<Break> on serial console. 147.It mac68k 148<Command>-<Power>, or the Interrupt switch. 149.It macppc 150Some models: 151<Command>-<Option>-<Power> 152.It mvme68k 153Abort switch on CPU card. 154.It pmax 155<Do> on LK-201 rcons console. 156.It "" 157<Break> on serial console. 158.It sandpoint 159<Break> on serial console. 160.It sparc 161<L1>-A, or <Stop>-A on a Sun keyboard. 162.It "" 163<Break> on serial console. 164.It sparc64 165<L1>-A, or <Stop>-A on a Sun keyboard. 166.It "" 167<Break> on serial console. 168.It sun3 169<L1>-A, or <Stop>-A on a Sun keyboard. 170.It "" 171<Break> on serial console. 172.It vax 173<Esc>-<Shift>-D on serial console. 174.It x68k 175Interrupt switch on the body. 176.It xen dom0 177<Ctrl>-<Alt>-<Esc> on PC style keyboards. 178.It "" 179+++++ 180(five plus signs) on serial console. 181.It xen domU 182+++++ 183(five plus signs) on serial console. 184.It zaurus 185<Ctrl>-<Alt>-<Esc> 186.El 187.Pp 188The key sequence to activate 189.Nm 190can be changed by modifying 191.Dq hw.cnmagic 192with 193.Xr sysctl 8 . 194If the console is not dedicated to 195.Nm 196the sequence should not be easily typed by accident. 197In addition, 198.Nm 199may be explicitly activated by the debugging code in the kernel 200if 201.Cm DDB 202is configured. 203.Pp 204Commands can be automatically run when 205.Nm 206is entered by using 207.Cd options DDB_COMMANDONENTER 208or by setting 209.Ar ddb.commandonenter 210with 211.Xr sysctl 8 . 212Multiple commands can be separated by a semi-colon. 213.Sh COMMAND SYNTAX 214The general command syntax is: 215.Bd -ragged -offset indent 216.Ic command Ns Op / Ns Ar modifier 217.Ar address 218.Op , Ns Ar count 219.Ed 220.Pp 221The current memory location being edited is referred to as 222.Ar dot , 223and the next location is 224.Ar next . 225They are displayed as hexadecimal numbers. 226.Pp 227Commands that examine and/or modify memory update 228.Ar dot 229to the address of the last line examined or the last location 230modified, and set 231.Ar next 232to the next location to be examined or modified. 233Other commands don't change 234.Ar dot , 235and set 236.Ar next 237to be the same as 238.Ar dot . 239.Pp 240A blank line repeats the previous command from the address 241.Ar next 242with the previous 243.Cm count 244and no modifiers. 245Specifying 246.Cm address 247sets 248.Em dot 249to the address. 250If 251.Cm address 252is omitted, 253.Em dot 254is used. 255A missing 256.Cm count 257is taken to be 1 for printing commands, and infinity for stack traces. 258.Pp 259The syntax: 260.Bd -ragged -offset indent 261.Cm \&, Ns Ar count 262.Ed 263.Pp 264repeats the previous command, just as a blank line does, but with 265the specified 266.Cm count . 267.Pp 268.Nm 269has a 270.Xr more 1 Ns -like 271functionality; if a number of lines in a command's output exceeds the number 272defined in the 273.Va lines 274variable, then 275.Nm 276displays 277.Dq "--db more--" 278and waits for a response, which may be one of: 279.Bl -tag -offset indent -width "<return>" 280.It Aq return 281one more line. 282.It Aq space 283one more page. 284.It Ic q 285abort the current command, and return to the command input mode. 286.El 287.Pp 288You can set 289.Va lines 290variable to zero to disable this feature. 291.Pp 292If 293.Nm 294history editing is enabled (by defining the 295.D1 Cd options DDB_HISTORY_SIZE=num 296kernel option), then a history of the last 297.Cm num 298commands is kept. 299The history can be manipulated with the following key sequences: 300.Bl -tag -offset indent -width "<Ctrl>-P" 301.It <Ctrl>-P 302retrieve previous command in history (if any). 303.It <Ctrl>-N 304retrieve next command in history (if any). 305.El 306.Sh COMMANDS 307.Nm 308supports the following commands: 309.Bl -tag -width 5n 310.It Ic \&! Ns Ar address Ns Oo ( Ar expression Ns Oo Ar ,... Oc ) Oc 311A synonym for 312.Ic call . 313.It Ic break Ns Oo Cm /u Oc Ar address Ns Op , Ns Ar count 314Set a breakpoint at 315.Ar address . 316If 317.Ar count 318is supplied, continues 319.Pq Ar count Ns \-1 320times before stopping at the breakpoint. 321If the breakpoint is set, a breakpoint number is printed with 322.Sq \&# . 323This number can be used to 324.Ic delete 325the breakpoint, or to add 326conditions to it. 327.Pp 328If 329.Cm /u 330is specified, 331set a breakpoint at a user-space address. 332Without 333.Cm /u , 334.Ar address 335is considered to be in the kernel-space, and an address in the wrong 336space will be rejected, and an error message will be emitted. 337This modifier may only be used if it is supported by machine dependent 338routines. 339.Pp 340Warning: if a user text is shadowed by a normal user-space debugger, 341user-space breakpoints may not work correctly. 342Setting a breakpoint at the low-level code paths may also cause 343strange behavior. 344.It Ic bt Ns Oo Cm /ul Oc Oo Ar frame-address Oc Ns Oo , Ns Ar count Oc 345A synonym for 346.Ic trace . 347.It Ic bt/t Ns Oo Cm /ul Oc Oo Ar pid Oc Ns Oo , Ns Ar count Oc 348A synonym for 349.Ic trace/t . 350.It Ic bt/a Ns Oo Cm /ul Oc Oo Ar lwpaddr Oc Ns Oo , Ns Ar count Oc 351A synonym for 352.Ic trace/a . 353.It Ic call Ar address Ns Oo ( Ns Ar expression Ns Oo Ar ,... Oc ) Oc 354Call the function specified by 355.Ar address 356with the argument(s) listed in parentheses. 357Parentheses may be omitted if the function takes no arguments. 358The number of arguments is currently limited to 10. 359.It Ic continue Ns Op Cm /c 360Continue execution until a breakpoint or watchpoint. 361If 362.Cm /c 363is specified, count instructions while executing. 364Some machines (e.g., pmax) also count loads and stores. 365.Pp 366Warning: when counting, the debugger is really silently 367single-stepping. 368This means that single-stepping on low-level may cause strange 369behavior. 370.It Ic delete Ar "address" | Cm # Ns Ar number 371Delete a breakpoint. 372The target breakpoint may be specified by 373.Ar address , 374as per 375.Ic break , 376or by the breakpoint number returned by 377.Ic break 378if it's prefixed with 379.Sq Cm \&# . 380.It Ic dmesg Op Ar count 381Prints the contents of the kernel message buffer. 382The optional 383.Ar count 384argument will limit printing to at most the last 385.Ar count 386bytes of the message buffer. 387.It Ic dwatch Ar address 388Delete the watchpoint at 389.Ar address 390that was previously set with 391.Ic watch 392command. 393.It Ic examine Ns Oo Cm / Ns Ar modifier Oc Ar address Ns Op , Ns Ar count 394Display the address locations according to the format in 395.Ar modifier . 396Multiple modifier formats display multiple locations. 397If 398.Ar modifier 399isn't specified, the modifier from the last use of 400.Ic examine 401is used. 402.Pp 403The valid format characters for 404.Ar modifier 405are: 406.Bl -tag -offset indent -width 2n -compact 407.It Cm b 408examine bytes (8 bits). 409.It Cm h 410examine half-words (16 bits). 411.It Cm l 412examine words (legacy 413.Dq long , 41432 bits). 415.It Cm q 416examine quad-words (64 bits). 417.It Cm L 418examine long words (implementation dependent) 419.It Cm a 420print the location being examined. 421.It Cm A 422print the location with a line number if possible. 423.It Cm x 424display in unsigned hex. 425.It Cm z 426display in signed hex. 427.It Cm o 428display in unsigned octal. 429.It Cm d 430display in signed decimal. 431.It Cm u 432display in unsigned decimal. 433.It Cm r 434display in current radix, signed. 435.It Cm c 436display low 8 bits as a character. 437Non-printing characters as displayed as an octal escape code 438(e.g., 439.Sq \e000 ) . 440.It Cm s 441display the NUL terminated string at the location. 442Non-printing characters are displayed as octal escapes. 443.It Cm m 444display in unsigned hex with a character dump at the end of each line. 445The location is displayed as hex at the beginning of each line. 446.It Cm p 447display as a pointer and it's symbol if possible. 448.It Cm i 449display as a machine instruction. 450.It Cm I 451display as a machine instruction, with possible alternative formats 452depending upon the machine: 453.Bl -tag -offset indent -width "sparc" -compact 454.It m68k 455use Motorola syntax 456.It vax 457don't assume that each external label is a procedure entry mask 458.El 459.El 460.It Ic kill Ar pid Ns Op , Ns Ar signal_number 461Send a signal to the process specified by the 462.Ar pid . 463Note that 464.Ar pid 465is interpreted using the current radix (see 466.Cm trace/t 467command for details). 468If 469.Ar signal_number 470isn't specified, the SIGTERM signal is sent. 471.It Ic match Ns Op Cm /p 472A synonym for 473.Ic next . 474.It Ic next Ns Op Cm /p 475Stop at the matching return instruction. 476If 477.Cm /p 478is specified, print the call nesting depth and the 479cumulative instruction count at each call or return. 480Otherwise, only print when the matching return is hit. 481.It Ic print Ns Oo Cm /axzodurc Oc Ar address Op Ar address ... 482Print addresses 483.Ar address 484according to the modifier character, as per 485.Ic examine . 486Valid modifiers are: 487.Cm /a , 488.Cm /x , 489.Cm /z , 490.Cm /o , 491.Cm /d , 492.Cm /u , 493.Cm /r , 494and 495.Cm /c 496(as per 497.Ic examine ) . 498If no modifier is specified, the most recent one specified is used. 499.Ar address 500may be a string, and is printed 501.Dq as-is . 502For example: 503.Bd -literal -offset indent 504print/x "eax = " $eax "\enecx = " $ecx "\en" 505.Ed 506.Pp 507will produce: 508.Bd -literal -offset indent 509eax = xxxxxx 510ecx = yyyyyy 511.Ed 512.It Ic ps Ns Oo Cm /a Oc Ns Oo Cm /n Oc Ns Oo Cm /w Oc Ns Oo Cm /l Oc 513A synonym for 514.Ic show all procs . 515.It Ic reboot Op Ar flags 516Reboot, using the optionally supplied boot 517.Ar flags , 518which is a bitmask supporting the same values as for 519.Xr reboot 2 . 520Some of the more useful flags: 521.Bl -column "Value" "RB_POWERDOWN" "Description" 522.It Sy "Value" Ta Sy "Name" Ta Sy "Description" 523.It 0x1 Ta RB_ASKNAME Ta Ask for file name to reboot from 524.It 0x2 Ta RB_SINGLE Ta Reboot to single user mode 525.It 0x4 Ta RB_NOSYNC Ta Don't sync before reboot 526.It 0x8 Ta RB_HALT Ta Halt instead of reboot 527.It 0x40 Ta RB_KDB Ta Boot into kernel debugger 528.It 0x100 Ta RB_DUMP Ta Dump unconditionally before reboot 529.It 0x808 Ta RB_POWERDOWN Ta Power off (or at least halt) 530.El 531.Pp 532Note: Limitations of the command line interface preclude 533specification of a boot string. 534.It Ic search Ns Oo Cm /bhl Oc Ar address Ar value \ 535Oo Ar mask Oc Oo , Ns Ar count Oc 536Search memory from 537.Ar address 538for 539.Ar value . 540The unit size is specified with a modifier character, as per 541.Ic examine . 542Valid modifiers are: 543.Cm /b , 544.Cm /h , 545and 546.Cm /l . 547If no modifier is specified, 548.Cm /l 549is used. 550.Pp 551This command might fail in interesting ways if it doesn't find 552.Ar value . 553This is because 554.Nm 555doesn't always recover from touching bad memory. 556The optional 557.Ar count 558limits the search. 559.It Ic set Cm $ Ns Ar variable Oo Cm = Oc Ar expression 560Set the named variable or register to the value of 561.Ar expression . 562Valid variable names are described in 563.Sx VARIABLES . 564.It Ic show all callout 565Display information about callouts in the system. 566See 567.Xr callout 9 568for more information on callouts. 569.It Ic show all locks Ns Op Cm /t 570Display details information about all active locks. 571If 572.Cm /t 573is specified, stack traces of LWPs holding locks are also printed. 574This command is only useful if a kernel is compiled with 575.Cd options LOCKDEBUG . 576.It Ic show all mount Ns Op Cm /f 577Display all mount points. 578If 579.Cm /f 580is specified, the complete vnode list is printed. 581.It Ic show all pages 582Display basic information about all physical pages managed by the VM system. 583For more detailed information about a single page, use 584.Ic show page . 585.It Ic show all pools Ns Op Cm /clpsS 586Display all pool information. 587Modifiers are the same as 588.Ic show pool . 589.It Ic "show\ all\ procs" Ns Oo Cm /a Oc Ns Oo Cm /n Oc Ns Oo Cm /w Oc Ns \ 590Oo Cm /l Oc 591Display all process information. 592Valid modifiers: 593.Bl -tag -width 3n 594.It Cm /n 595show process information in a 596.Xr ps 1 597style format. 598Information printed includes: process ID, parent process ID, 599process group, UID, process status, process flags, number of LWPs, 600command name, and process wait channel message. 601.It Cm /a 602show each process ID, command name, kernel virtual addresses of 603each process' proc structure, u-area, and vmspace structure. 604The vmspace address is also the address of the process' 605vm_map structure, and can be used in the 606.Ic show map 607command. 608.It Cm /w 609show each LWP ID, process ID, command name, system call emulation, 610priority, wait channel message and wait channel address. 611LWPs currently running on a CPU are marked with the '\&>' sign. 612.It Cm /l 613show each LWP ID, process ID, process status, CPU ID the LWP runs on, 614process flags, kernel virtual address of LWP structure, 615LWP name and wait channel message. 616LWPs currently running on a CPU are marked with the '\&>' sign. 617This is the default. 618.El 619.It Ic show routes 620Dump the entire 621.Dv AF_INET 622routing table. 623This command is available only on systems which support inet. 624.It Ic show breaks 625Display all breakpoints. 626.It Ic show buf Ns Oo Cm /f Oc Ar address 627Print the struct buf at 628.Ar address . 629The 630.Cm /f 631does nothing at this time. 632.It Ic show event Ns Oo Cm /f Oc Ns Oo Cm /i Oc Ns Oo Cm /m Oc Ns \ 633Oo Cm /t Oc 634Print all the non-zero 635.Xr evcnt 9 636event counters. 637Valid modifiers: 638.Bl -tag -width 3n 639.It Cm /f 640event counters with a count of zero are printed as well. 641.It Cm /i 642interrupted counters will be displayed. 643.It Cm /m 644misc counters will be displayed. 645.It Cm /t 646trap counters will be displayed. 647.El 648.Pp 649If none of 650.Cm /i , 651.Cm /m , 652or 653.Cm /t 654are specified, all are shown. 655You can combine any of these. 656For example, the modifier 657.Cm /itf 658will select both interrupt and trap events, including those that are non-zero. 659.It Ic show files Ar address 660Display information about the vnodes of the files that are currently 661open by the process associated with the proc structure at 662.Ar address . 663This address can be found using the 664.Ic show all procs /a 665command. 666If the kernel is compiled with 667.Cd options LOCKDEBUG 668then details about the locking of the underlying uvm object will also 669be displayed. 670.It Ic show lock Ar address 671Display information about a lock at 672.Ar address . 673This command is only useful if a kernel is compiled with 674.Cd options LOCKDEBUG . 675.It Ic show lockstats 676Display information about lock statistics. 677This command is only useful if a kernel is compiled with 678.Cd options LOCKDEBUG . 679.It Ic show map Ns Oo Cm /f Oc Ar address 680Print the vm_map at 681.Ar address . 682If 683.Cm /f 684is specified, the complete map is printed. 685.It Ic show mount Ns Oo Cm /f Oc Ar address 686Print the mount structure at 687.Ar address . 688If 689.Cm /f 690is specified, the complete vnode list is printed. 691.It Ic show mbuf Ns Oo Cm /cdv Oc Ar address 692Print the mbuf structure at 693.Ar address . 694Valid modifiers: 695.Bl -tag -width 4n -compact 696.It Cm /c 697The mbufs in the chain are NOT followed. 698.It Cm /d 699The data is dumped. 700.It Cm /v 701Decode the mbuf chain as a packet. 702It currently supports Ethernet, PPP, PPPoE, ARP, IPv4, ICMP, IPv6, ICMP6, TCP 703and UDP. 704.El 705.It Ic show ncache Ar address 706Dump the namecache list associated with vnode at 707.Ar address . 708.It Ic show object Ns Oo Cm /f Oc Ar address 709Print the vm_object at 710.Ar address . 711If 712.Cm /f 713is specified, the complete object is printed. 714.It Ic show page Ns Oo Cm /f Oc Ar address 715Print the vm_page at 716.Ar address . 717If 718.Cm /f 719is specified, the complete page is printed. 720.It Ic show panic 721Print the current "panic" string. 722.It Ic show pool Ns Oo Cm /clpsS Oc Ar address 723Print the pool at 724.Ar address . 725Valid modifiers: 726.Bl -tag -width 4n -compact 727.It Cm /c 728Print the cachelist and its statistics for this pool. 729.It Cm /l 730Print the log entries for this pool. 731.It Cm /p 732Print the pagelist for this pool. 733.It Cm /s 734Print a short (one line) list per pool, showing the wait channel, pool 735address, allocation size, alignment, allocated pages, allocated items, 736consumed items, allocation requests, allocation frees, pages allocated, 737pages freed, and currently idle pages, respectively. 738.It Cm /S 739Skip pools with zero allocations. 740.El 741.It Ic show proc Ns Oo Cm /ap Oc Ar address | pid 742Show information about a process and its LWPs. 743LWPs currently running on a CPU are marked with the '\&>' sign. 744.Bl -tag -width 4n -compact 745.It Cm /a 746The argument passed is the kernel virtual address 747of LWP structure. 748.It Cm /p 749The argument passed is a PID. 750Note that 751.Ar pid 752is interpreted using the current radix (see 753.Cm trace/t 754command for details). 755This is the default. 756.El 757.It Ic show registers Ns Op Cm /u 758Display the register set. 759If 760.Cm /u 761is specified, display user registers instead of kernel registers 762or the currently save one. 763.Pp 764Warning: support for 765.Cm /u 766is machine dependent. 767If not supported, incorrect information will be displayed. 768.It Ic show sched_qs 769Print the state of the scheduler's run queues. 770For each run queue that has an LWP, the run queue index and the list 771of LWPs will be shown. 772If the run queue has LWPs, but the sched_whichqs bit is not set for that 773queue, the queue index will be prefixed with a 774.Sq \&! . 775.It Ic show socket Ns Oo Cm /ampv Oc 776Print usage of system's socket buffers. 777By default, empty sockets aren't printed. 778.Bl -tag -width 4n -compact 779.It Cm /a 780Print all processes which use the socket. 781.It Cm /m 782Print mbuf chain in the socket buffer. 783.It Cm /p 784By default, a process which uses the socket is printed (only one socket). 785If 786.Cm /p 787is specified, the process isn't printed. 788.It Cm /v 789Verbose mode. 790If 791.Cm /v 792is specified, all sockets are printed. 793.El 794.It Ic show uvmexp 795Print a selection of UVM counters and statistics. 796.It Ic show kernhist Ns Oo Cm /i Oc Oo Ar addr Ns Oo , Ns Ar count Oc Oc 797Dumps all the kernel histories if no address is specified, or the history 798at the address. 799If 800.Cm /i 801is specified, display information about the named history or all histories, 802instead of history entries. 803If 804.Ar count 805is specified, only the last 806.Ar count 807entries will be displayed. 808Currently the 809.Ar count 810handling is only performed if a single history is requested. 811This command is available only if a kernel is compiled with one or more 812of the kernel history options 813.Cd KERNHIST , 814.Cd SYSCALL_DEBUG , 815.Cd USB_DEBUG , 816.Cd BIOHIST , 817or 818.Cd UVMHIST . 819.It Ic show vmem Ar address 820Print the vmem at 821.Ar address . 822.It Ic show vmems 823Display all vmems. 824.It Ic show vnode Ns Oo Cm /f Oc Ar address 825Print the vnode at 826.Ar address . 827If 828.Cm /f 829is specified, the complete vnode is printed. 830.It Ic show vnode_lock Ns Oo Cm /f Oc Ar address 831Print the vnode which has its lock at 832.Ar address . 833If 834.Cm /f 835is specified, the complete vnode is printed. 836.It Ic show watches 837Display all watchpoints. 838.It Ic sifting Ns Oo Cm /F Oc Ar string 839Search the symbol tables for all symbols of which 840.Ar string 841is a substring, and display them. 842If 843.Cm /F 844is specified, a character is displayed immediately after each symbol 845name indicating the type of symbol. 846.Pp 847Object symbols display 848.Sy + , 849function symbols display 850.Sy * , 851section symbols display 852.Sy & , 853and file symbols display 854.Sy / . 855.Pp 856To sift for a string beginning with a number, escape the first 857character with a backslash as: 858.Bd -literal -offset indent 859sifting \\386 860.Ed 861.It Ic step Ns Oo Cm /p Oc Op , Ns Ar count 862Single-step 863.Ar count 864times. 865If 866.Cm /p 867is specified, print each instruction at each step. 868Otherwise, only print the last instruction. 869.Pp 870Warning: depending on the machine type, it may not be possible 871to single-step through some low-level code paths or user-space 872code. 873On machines with software-emulated single-stepping (e.g., pmax), 874stepping through code executed by interrupt handlers will probably 875do the wrong thing. 876.It Ic sync 877Sync the disks, force a crash dump, and then reboot. 878.It Ic trace Ns Oo Cm /u Ns Oo Cm l Oc Oc Oo Ar frame-address Oc Ns \ 879Oo , Ns Ar count Oc 880Stack trace from 881.Ar frame-address . 882If 883.Cm /u 884is specified, trace user-space, otherwise trace kernel-space. 885.Ar count 886is the number of frames to be traced. 887If 888.Ar count 889is omitted, all frames are printed. 890If 891.Cm /l 892is specified, the trace is printed and also stored in the kernel 893message buffer. 894.Pp 895Warning: user-space stack trace is valid only if the machine dependent 896code supports it. 897.It Ic trace/t Ns Oo Cm l Oc Oo Ar pid Oc Ns Oo , Ns Ar count Oc 898Stack trace by 899.Dq thread 900(process, on 901.Nx ) 902rather than by stack frame address. 903Note that 904.Ar pid 905is interpreted using the current radix, whilst 906.Ic ps 907displays pids in decimal; prefix 908.Ar pid 909with 910.Sq 0t 911to force it to be interpreted as decimal (see 912.Sx VARIABLES 913section for radix). 914If 915.Cm /l 916is specified, the trace is printed and also stored in the kernel 917message buffer. 918.Pp 919Warning: trace by pid is valid only if the machine dependent code 920supports it. 921.It Ic trace/a Ns Oo Cm l Oc Oo Ar lwpaddr Oc Ns Oo , Ns Ar count Oc 922Stack trace by light weight process (LWP) address 923rather than by stack frame address. 924If 925.Cm /l 926is specified, the trace is printed and also stored in the kernel 927message buffer. 928.Pp 929Warning: trace by LWP address is valid only if the machine dependent 930code supports it. 931.It Ic until Ns Op Cm /p 932Stop at the next call or return instruction. 933If 934.Cm /p 935is specified, print the call nesting depth and the 936cumulative instruction count at each call or return. 937Otherwise, only print when the matching return is hit. 938.It Ic watch Ar address Ns Oo , Ns Ar size Oc 939Set a watchpoint for a region. 940Execution stops when an attempt to modify the region occurs. 941.Ar size 942defaults to 4. 943.Pp 944If you specify a wrong space address, the request is 945rejected with an error message. 946.Pp 947Warning: attempts to watch wired kernel memory may cause 948an unrecoverable error in some systems such as i386. 949Watchpoints on user addresses work the best. 950.It Ic whatis Ar address 951Describe what an address is. 952.It Ic write Ns Oo Cm /bhlqBHLQ Oc Ar address Ar expression Oo Ar expression ... Oc 953Write the 954.Ar expression Ns s 955at succeeding locations. 956The unit size is specified with a modifier character, as per 957.Ic examine . 958Valid modifiers are: 959.Cm /b , 960.Cm /h , 961.Cm /l , 962and 963.Cm /q . 964If no modifier is specified, 965.Cm /l 966is used. 967.Pp 968Specifying the modifiers in upper case, 969.Cm /B , 970.Cm /H , 971.Cm /L , 972.Cm /Q , 973will prevent 974.Nm 975from reading the memory location first, which is useful for avoiding 976side effects when writing to I/O memory regions. 977.Pp 978Warning: since there is no delimiter between 979.Ar expression Ns s , 980strange things may occur. 981It's best to enclose each 982.Ar expression 983in parentheses. 984.It Ic x Ns Oo Cm / Ns Ar modifier Oc Ar address Ns Op , Ns Ar count 985A synonym for 986.Ic examine . 987.\" XXX - these commands aren't implemented; jhawk 19 May 2000 988.\" .It Ic xf 989.\" Examine forward. 990.\" .Ic xf 991.\" re-executes the most recent 992.\" .Ic execute 993.\" command with the same parameters except that 994.\" .Ar address 995.\" is set to 996.\" .Ar next . 997.\" .It Ic xb 998.\" Examine backward. 999.\" .Ic xb 1000.\" re-executes the most recent 1001.\" .Ic execute 1002.\" command with the same parameters, except that 1003.\" .Ar address 1004.\" is set to the last start address minus its size. 1005.El 1006.Sh MACHINE-SPECIFIC COMMANDS 1007The "glue" code that hooks 1008.Nm 1009into the 1010.Nx 1011kernel for any given port can also add machine specific commands 1012to the 1013.Nm 1014command parser. 1015All of these commands are preceded by the command word 1016.Em machine 1017to indicate that they are part of the machine-specific command 1018set (e.g. 1019.Ic machine reboot ) . 1020Some of these commands are: 1021.Ss AARCH64 1022.Bl -tag -width "traptrace" -compact 1023.It Ic break 1024Set or clear a hardware breakpoint. 1025.It Ic cpu 1026Switch to another CPU. 1027.It Ic cpuinfo 1028Print CPU information about the ``struct cpuinfo''. 1029.It Ic frame 1030Given a trap frame address, print out the trap frame. 1031.It Ic lwp 1032Print lwp information about the ``struct lwp''. 1033.It Ic pte 1034Print PTE information. 1035.It Ic reset 1036Reset the system. 1037.It Ic sysreg 1038Print system registers. 1039.It Ic watch 1040Set or clear a hardware watchpoint. 1041Pass the address to be watched, or watchpoint number to clear the watchpoint. 1042Optional modifiers are 1043.Dq r 1044for read access, 1045.Dq w 1046for write access (default: trap on read or write access), 1047.Dq b 1048for 8 bit width, 1049.Dq h 1050for 16 bit, 1051.Dq l 1052for 32 bit or, 1053.Dq q 1054for 64 bit (default: 32 bit). 1055.El 1056.Ss ALPHA 1057.Bl -tag -width "traptrace" -compact 1058.It Ic cpu 1059Switch to another CPU. 1060.\" .It Ic halt 1061.\" Call the PROM monitor to halt the CPU. 1062.\" .It Ic reboot 1063.\" Call the PROM monitor to reboot the CPU. 1064.El 1065.Ss AMD64 1066.Bl -tag -width "traptrace" -compact 1067.It Ic cpu 1068Switch to another CPU. 1069.El 1070.Ss ARM32 1071.Bl -tag -width "traptrace" -compact 1072.It Ic frame 1073Given a trap frame address, print out the trap frame. 1074.It Ic reset 1075Reset the system. 1076.El 1077.Ss HPPA 1078.Bl -tag -width "traptrace" -compact 1079.It Ic frame 1080Without an address the default trap frame is printed. 1081Otherwise, the trap frame address can be given, or, when the 1082.Dq l 1083modifier is used, an LWP address. 1084.El 1085.Ss I386 1086.Bl -tag -width "traptrace" -compact 1087.It Ic cpu 1088Switch to another CPU. 1089.El 1090.Ss IA64 1091.Bl -tag -width "traptrace" -compact 1092.It Ic vector 1093Without a vector, information about all 256 vectors is shown. 1094Otherwise, the given vector is shown. 1095.El 1096.Ss MIPS 1097.Bl -tag -width "traptrace" -compact 1098.It Ic cp0 1099Dump CP0 (coprocessor 0) register values. 1100.It Ic cpu 1101Switch to another CPU. 1102.It Ic kvtop 1103Print the physical address for a given kernel virtual address. 1104.\" .It Ic mfcr -- document this! 1105.\" .It Ic mtcr -- document this! 1106.It Ic nmi 1107Send an NMI to a different CPU. 1108This DDB command is currently only implemented for Cavium 1109Octeon CPUs. 1110.It Ic reset 1111Reset the system. 1112Not implemented for many CPUs and/or systems. 1113.It Ic tlb 1114Print out the Translation Lookaside Buffer (TLB). 1115Use the 1116.Cm /v 1117modifier to show only valid TLB entries. 1118.It Ic watch 1119Set a hardware watchpoint on an address or a TLB ASID. 1120Pass the address to be watched. 1121If no address is specified, show a list of active watchpoints. 1122The modifiers are 1123.Cm /m 1124i for trap on an instruction fetch, 1125.Cm /r 1126for trap on a read, 1127.Cm /w 1128for trap on a write, 1129.Cm /m 1130for a mask on the address to match, 1131.Cm /a 1132for trap on a TLB ASID match. 1133The 1134.Cm /m 1135and 1136.Cm /a 1137modifiers require an extra argument for the mask and ASID respectively. 1138.It Ic unwatch 1139Clear a hardware watchpoint. 1140If an address is specified, clear watchpoints that match that address. 1141If no address is specified, clear all watchpoints. 1142.El 1143.Ss POWERPC 4xx 1144.Bl -tag -width "traptrace" -compact 1145.It Ic ctx 1146Print process MMU context information. 1147.It Ic pv 1148Print PA->VA mapping information. 1149.It Ic reset 1150Reset the system. 1151.It Ic tf 1152Display the contents of the trapframe. 1153.It Ic tlb 1154Display instruction translation storage buffer information. 1155.It Ic dcr 1156Set the DCR register. 1157Must be between 0x00 and 0x3ff. 1158.It Ic user 1159Display user memory. 1160Use the 1161.Dq i 1162modifier to get instruction decoding. 1163.El 1164.Ss POWERPC OEA 1165.Bl -tag -width "traptrace" -compact 1166.It Ic bat 1167Print BAT registers and translations. 1168.It Ic mmu 1169Print MMU registers. 1170.El 1171.Ss SH3 1172.Bl -tag -width "traptrace" -compact 1173.It Ic tlb 1174Print TLB entries. 1175.It Ic cache 1176Print cache entries. 1177.It Ic frame 1178Print switch frame and trap frames. 1179.It Ic stack 1180Print kernel stack usage. 1181Only works in 1182.Nx 1183kernels compiled with the 1184.Dv KSTACK_DEBUG 1185option. 1186.El 1187.Ss SPARC 1188.Bl -tag -width "traptrace" -compact 1189.It Ic cpu 1190Switch to another CPU. 1191.It Ic prom 1192Enter the Sun PROM monitor. 1193.It Ic proc 1194Display some information about the LWP pointed to, or curlwp. 1195.It Ic pcb 1196Display information about the 1197.Dq struct pcb 1198listed. 1199.It Ic page 1200Display the pointer to the 1201.Dq struct vm_page 1202for this physical address. 1203.El 1204.Ss SPARC64 1205.Bl -tag -width "traptrace" -compact 1206.It Ic ctx 1207Print process context information. 1208.It Ic cpu 1209Switch to another CPU. 1210.It Ic dtlb 1211Print data translation look-aside buffer context information. 1212.It Ic dtsb 1213Display data translation storage buffer information. 1214.It Ic kmap 1215Display information about the listed mapping in the kernel pmap. 1216Use the 1217.Dq f 1218modifier to get a full listing. 1219.It Ic extract 1220Extract the physical address for a given virtual address from the kernel pmap. 1221.It Ic fpstate 1222Dump the FPU state. 1223.It Ic itlb 1224Print instruction translation look-aside buffer context information. 1225.It Ic itsb 1226Display instruction translation storage buffer information. 1227.It Ic lwp 1228Display a struct lwp 1229.It Ic pcb 1230Display information about the 1231.Dq struct pcb 1232listed. 1233.It Ic pctx 1234Attempt to change process context. 1235.It Ic page 1236Display the pointer to the 1237.Dq struct vm_page 1238for this physical address. 1239.It Ic phys 1240Display physical memory. 1241.It Ic pmap 1242Display the pmap. 1243Use the 1244.Dq f 1245modifier to get a fuller listing. 1246.It Ic proc 1247Display some information about the process pointed to, or curproc. 1248.It Ic prom 1249Enter the OFW PROM. 1250.It Ic pv 1251Display the 1252.Dq struct pv_entry 1253pointed to. 1254.It Ic sir 1255Reset the machine and enter prom (do a Software Initiated Reset). 1256.It Ic stack 1257Dump the window stack. 1258Use the 1259.Dq u 1260modifier to get userland information. 1261.It Ic tf 1262Display full trap frame state. 1263This is most useful for inclusion with bug reports. 1264.It Ic ts 1265Display trap state. 1266.It Ic traptrace 1267Display or set trap trace information. 1268Use the 1269.Dq r 1270and 1271.Dq f 1272modifiers to get reversed and full information, respectively. 1273.It Ic watch 1274Set or clear a physical or virtual hardware watchpoint. 1275Pass the address to be watched, or 1276.Dq 0 1277(or omit the address) to clear the watchpoint. 1278Optional modifiers are 1279.Dq p 1280for physical address, 1281.Dq r 1282for trap on read access (default: trap on write access only), 1283.Dq b 1284for 8 bit width, 1285.Dq h 1286for 16 bit, 1287.Dq l 1288for 32 bit or 1289.Dq L 1290for 64 bit. 1291.It Ic window 1292Print register window information. 1293Argument is a stack frame number (0 is 1294top of stack, which is used when no index is given). 1295.El 1296.Ss SUN2, SUN3 and SUN3X 1297.Bl -tag -width "traptrace" -compact 1298.It Ic abort 1299Drop into monitor via abort (allows continue). 1300.It Ic halt 1301Exit to Sun PROM monitor as in 1302.Xr halt 8 . 1303.It Ic reboot 1304Reboot the machine as in 1305.Xr reboot 8 . 1306.It Ic pgmap 1307Given an address, print the address, segment map, page map, and 1308Page Table Entry (PTE). 1309.El 1310.Ss VAX 1311.Bl -tag -width "traptrace" -compact 1312.It Ic cpu 1313Switch to another CPU. 1314.El 1315.Sh VARIABLES 1316.Nm 1317accesses registers and variables as 1318.Cm $ Ns Ar name . 1319Register names are as per the 1320.Ic show registers 1321command. 1322Some variables are suffixed with numbers, and may have a modifier 1323following a colon immediately after the variable name. 1324For example, register variables may have a 1325.Sq u 1326modifier to indicate user register 1327(e.g., 1328.Li "$eax:u" ) . 1329.Pp 1330Built-in variables currently supported are: 1331.Bl -tag -offset indent -width "maxwidth" -compact 1332.It Va dumpstack 1333If non-zero (the default), 1334causes a stack trace to be printed when 1335.Nm 1336is entered on panic. 1337.It Va fromconsole 1338If non-zero (the default), 1339the kernel allows to enter 1340.Nm 1341from the console (by break signal or special key sequence). 1342If the kernel configuration option 1343.D1 Cd options DDB_FROMCONSOLE=0 1344is used, 1345.Va fromconsole 1346will be initialized to off. 1347.It Va lines 1348The number of lines. 1349This is used by the 1350.Ic more 1351feature. 1352When this variable is set to zero the 1353.Ic more 1354feature is disabled. 1355.It Va maxoff 1356Addresses are printed as 1357.Li 'symbol'+offset 1358unless 1359.Li offset 1360is greater than 1361.Va maxoff . 1362.It Va maxwidth 1363The width of the displayed line. 1364.Nm 1365wraps the current line by printing new line when 1366.Va maxwidth 1367column is reached. 1368When this variable is set to zero 1369.Nm 1370doesn't perform any wrapping. 1371.It Va onpanic 1372If greater than zero (the default is 1), 1373.Nm 1374will be invoked when the kernel panics. 1375If the kernel configuration option 1376.D1 Cd options DDB_ONPANIC=0 1377is used, 1378.Va onpanic 1379will be initialized to off, causing a stack trace to be printed and 1380the system to be rebooted instead of 1381.Nm 1382being entered. 1383Setting 1384.Va onpanic 1385to \-1 suppresses the stack trace before reboot. 1386.It Va radix 1387Input and output radix. 1388.It Va tabstops 1389Tab stop width. 1390.It Va tee_msgbuf 1391If explicitly set to non zero (zero is the default) all 1392.Nm 1393output will not only be displayed on screen but 1394also be fed to the msgbuf. 1395The default of the variable can be set using the kernel configuration option 1396.D1 Cd options DDB_TEE_MSGBUF=1 1397which will initialize 1398.Va tee_msgbuf 1399to be 1. 1400This option is especially handy for poor souls 1401who don't have a serial console but want to recall 1402.Nm 1403output from a crash investigation. 1404This option is more generic than the /l command modifier possible for 1405selected commands as discussed above to log the output. 1406Mixing both /l 1407and this setting can give double loggings. 1408.It Va panicstackframes 1409Number of stack frames to display on panic. 1410Useful to avoid scrolling away the interesting frames on a glass tty. 1411Default value is 1412.Dv 65535 1413(all frames), useful value around 1414.Dv 10 . 1415.\" .It Va work Ns Sy xx 1416.\" Temporary work variable. 1417.\" .Sq Sy xx 1418.\" is between 0 and 31. 1419.El 1420.Pp 1421All built-in variables are accessible via 1422.Xr sysctl 3 . 1423.Sh EXPRESSIONS 1424Almost all expression operators in C are supported, except 1425.Sq \&~ , 1426.Sq \&^ , 1427and unary 1428.Sq \&& . 1429Special rules in 1430.Nm 1431are: 1432.Bl -tag -offset indent -width "identifier" 1433.It Ar identifier 1434name of a symbol. 1435It is translated to the address (or value) of it. 1436.Sq \&. 1437and 1438.Sq \&: 1439can be used in the identifier. 1440If supported by an object format dependent routine, 1441.Sm off 1442.Xo 1443.Oo Ar filename : Oc 1444.Ar function 1445.Oo : Ar line\ number Oc , 1446.Xc 1447.Sm on 1448.Sm off 1449.Xo 1450.Oo Ar filename : Oc 1451.Ar variable , 1452.Xc 1453.Sm on 1454and 1455.Sm off 1456.Xo 1457.Ar filename 1458.Oo : Ar "line number" Oc , 1459.Xc 1460.Sm on 1461can be accepted as a symbol. 1462The symbol may be prefixed with 1463.Ar symbol_table_name\^ : : 1464(e.g., 1465.Li emulator::mach_msg_trap ) 1466to specify other than kernel symbols. 1467.It Ar number 1468number. 1469Radix is determined by the first two characters: 1470.Sq 0x 1471- hex, 1472.Sq 0o 1473- octal, 1474.Sq 0t 1475- decimal, 1476otherwise follow current radix. 1477.It Cm \&. 1478.Ar dot 1479.It Cm + 1480.Ar next 1481.It Cm .. 1482address of the start of the last line examined. 1483Unlike 1484.Ar dot 1485or 1486.Ar next , 1487this is only changed by the 1488.Ic examine 1489or 1490.Ic write 1491commands. 1492.It Cm \&" \"" XXX: emacs highlighting 1493last address explicitly specified. 1494.It Cm $ Ns Ar name 1495register name or variable. 1496It is translated to the value of it. 1497It may be followed by a 1498.Sq \&: 1499and modifiers as described above. 1500.It Cm # 1501a binary operator which rounds up the left hand side to the next 1502multiple of right hand side. 1503.It Cm * Ns Ar expr 1504expression indirection. 1505It may be followed by a 1506.Sq \&: 1507and modifiers as described above. 1508.El 1509.Sh SEE ALSO 1510.Xr reboot 2 , 1511.Xr options 4 , 1512.Xr crash 8 , 1513.Xr reboot 8 , 1514.Xr sysctl 8 , 1515.Xr cnmagic 9 , 1516.Xr ddb 9 1517.Sh HISTORY 1518The 1519.Nm 1520kernel debugger was written as part of the MACH project at 1521Carnegie-Mellon University. 1522