1.\" $NetBSD: ddb.4,v 1.195 2020/08/23 09:55:58 wiz 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 August 23, 2020 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 alpha 455print register operands 456.It m68k 457use Motorola syntax 458.It vax 459don't assume that each external label is a procedure entry mask 460.El 461.El 462.It Ic kill Ar pid Ns Op , Ns Ar signal_number 463Send a signal to the process specified by the 464.Ar pid . 465Note that 466.Ar pid 467is interpreted using the current radix (see 468.Cm trace/t 469command for details). 470If 471.Ar signal_number 472isn't specified, the SIGTERM signal is sent. 473.It Ic match Ns Op Cm /p 474A synonym for 475.Ic next . 476.It Ic next Ns Op Cm /p 477Stop at the matching return instruction. 478If 479.Cm /p 480is specified, print the call nesting depth and the 481cumulative instruction count at each call or return. 482Otherwise, only print when the matching return is hit. 483.It Ic print Ns Oo Cm /axzodurc Oc Ar address Op Ar address ... 484Print addresses 485.Ar address 486according to the modifier character, as per 487.Ic examine . 488Valid modifiers are: 489.Cm /a , 490.Cm /x , 491.Cm /z , 492.Cm /o , 493.Cm /d , 494.Cm /u , 495.Cm /r , 496and 497.Cm /c 498(as per 499.Ic examine ) . 500If no modifier is specified, the most recent one specified is used. 501.Ar address 502may be a string, and is printed 503.Dq as-is . 504For example: 505.Bd -literal -offset indent 506print/x "eax = " $eax "\enecx = " $ecx "\en" 507.Ed 508.Pp 509will produce: 510.Bd -literal -offset indent 511eax = xxxxxx 512ecx = yyyyyy 513.Ed 514.It Ic ps Ns Oo Cm /a Oc Ns Oo Cm /n Oc Ns Oo Cm /w Oc Ns Oo Cm /l Oc 515A synonym for 516.Ic show all procs . 517.It Ic reboot Op Ar flags 518Reboot, using the optionally supplied boot 519.Ar flags , 520which is a bitmask supporting the same values as for 521.Xr reboot 2 . 522Some of the more useful flags: 523.Bl -column "Value" "RB_POWERDOWN" "Description" 524.It Sy "Value" Ta Sy "Name" Ta Sy "Description" 525.It 0x1 Ta RB_ASKNAME Ta Ask for file name to reboot from 526.It 0x2 Ta RB_SINGLE Ta Reboot to single user mode 527.It 0x4 Ta RB_NOSYNC Ta Don't sync before reboot 528.It 0x8 Ta RB_HALT Ta Halt instead of reboot 529.It 0x40 Ta RB_KDB Ta Boot into kernel debugger 530.It 0x100 Ta RB_DUMP Ta Dump unconditionally before reboot 531.It 0x808 Ta RB_POWERDOWN Ta Power off (or at least halt) 532.El 533.Pp 534Note: Limitations of the command line interface preclude 535specification of a boot string. 536.It Ic search Ns Oo Cm /bhl Oc Ar address Ar value \ 537Oo Ar mask Oc Oo , Ns Ar count Oc 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 set Cm $ Ns Ar variable Oo Cm = Oc Ar expression 562Set the named variable or register to the value of 563.Ar expression . 564Valid variable names are described in 565.Sx VARIABLES . 566.It Ic show all callout 567Display information about callouts in the system. 568See 569.Xr callout 9 570for more information on callouts. 571.It Ic show all locks Ns Op Cm /t 572Display details information about all active locks. 573If 574.Cm /t 575is specified, stack traces of LWPs holding locks are also printed. 576This command is only useful if a kernel is compiled with 577.Cd options LOCKDEBUG . 578.It Ic show all mount Ns Op Cm /f 579Display all mount points. 580If 581.Cm /f 582is specified, the complete vnode list is printed. 583.It Ic show all pages 584Display basic information about all physical pages managed by the VM system. 585For more detailed information about a single page, use 586.Ic show page . 587.It Ic show all pools Ns Op Cm /clp 588Display all pool information. 589Modifiers are the same as 590.Ic show pool . 591.It Ic "show\ all\ procs" Ns Oo Cm /a Oc Ns Oo Cm /n Oc Ns Oo Cm /w Oc Ns \ 592Oo Cm /l Oc 593Display all process information. 594Valid modifiers: 595.Bl -tag -width 3n 596.It Cm /n 597show process information in a 598.Xr ps 1 599style format. 600Information printed includes: process ID, parent process ID, 601process group, UID, process status, process flags, number of LWPs, 602command name, and process wait channel message. 603.It Cm /a 604show each process ID, command name, kernel virtual addresses of 605each process' proc structure, u-area, and vmspace structure. 606The vmspace address is also the address of the process' 607vm_map structure, and can be used in the 608.Ic show map 609command. 610.It Cm /w 611show each LWP ID, process ID, command name, system call emulation, 612priority, wait channel message and wait channel address. 613LWPs currently running on a CPU are marked with the '\&>' sign. 614.It Cm /l 615show each LWP ID, process ID, process status, CPU ID the LWP runs on, 616process flags, kernel virtual address of LWP structure, 617LWP name and wait channel message. 618LWPs currently running on a CPU are marked with the '\&>' sign. 619This is the default. 620.El 621.It Ic show routes 622Dump the entire 623.Dv AF_INET 624routing table. 625This command is available only on systems which support inet. 626.It Ic show breaks 627Display all breakpoints. 628.It Ic show buf Ns Oo Cm /f Oc Ar address 629Print the struct buf at 630.Ar address . 631The 632.Cm /f 633does nothing at this time. 634.It Ic show event Ns Oo Cm /f Oc Ns Oo Cm /i Oc Ns Oo Cm /m Oc Ns \ 635Oo Cm /t Oc 636Print all the non-zero 637.Xr evcnt 9 638event counters. 639Valid modifiers: 640.Bl -tag -width 3n 641.It Cm /f 642event counters with a count of zero are printed as well. 643.It Cm /i 644interrupted counters will be displayed. 645.It Cm /m 646misc counters will be displayed. 647.It Cm /t 648trap counters will be displayed. 649.El 650.Pp 651If none of 652.Cm /i , 653.Cm /m , 654or 655.Cm /t 656are specified, all are shown. 657You can combine any of these. 658For example, the modifier 659.Cm /itf 660will select both interrupt and trap events, including those that are non-zero. 661.It Ic show files Ar address 662Display information about the vnodes of the files that are currently 663open by the process associated with the proc structure at 664.Ar address . 665This address can be found using the 666.Ic show all procs /a 667command. 668If the kernel is compiled with 669.Cd options LOCKDEBUG 670then details about the locking of the underlying uvm object will also 671be displayed. 672.It Ic show lock Ar address 673Display information about a lock at 674.Ar address . 675This command is only useful if a kernel is compiled with 676.Cd options LOCKDEBUG . 677.It Ic show lockstats 678Display information about lock statistics. 679This command is only useful if a kernel is compiled with 680.Cd options LOCKDEBUG . 681.It Ic show map Ns Oo Cm /f Oc Ar address 682Print the vm_map at 683.Ar address . 684If 685.Cm /f 686is specified, the complete map is printed. 687.It Ic show mount Ns Oo Cm /f Oc Ar address 688Print the mount structure at 689.Ar address . 690If 691.Cm /f 692is specified, the complete vnode list is printed. 693.It Ic show mbuf Ns Oo Cm /cdv Oc Ar address 694Print the mbuf structure at 695.Ar address . 696Valid modifiers: 697.Bl -tag -width 4n -compact 698.It Cm /c 699The mbufs in the chain are NOT followed. 700.It Cm /d 701The data is dumped. 702.It Cm /v 703Decode the mbuf chain as a packet. 704It currently supports Ethernet, PPP, PPPoE, ARP, IPv4, ICMP, IPv6, ICMP6, TCP 705and UDP. 706.El 707.It Ic show ncache Ar address 708Dump the namecache list associated with vnode at 709.Ar address . 710.It Ic show object Ns Oo Cm /f Oc Ar address 711Print the vm_object at 712.Ar address . 713If 714.Cm /f 715is specified, the complete object is printed. 716.It Ic show page Ns Oo Cm /f Oc Ar address 717Print the vm_page at 718.Ar address . 719If 720.Cm /f 721is specified, the complete page is printed. 722.It Ic show panic 723Print the current "panic" string. 724.It Ic show pool Ns Oo Cm /clp Oc Ar address 725Print the pool at 726.Ar address . 727Valid modifiers: 728.Bl -tag -width 4n -compact 729.It Cm /c 730Print the cachelist and its statistics for this pool. 731.It Cm /l 732Print the log entries for this pool. 733.It Cm /p 734Print the pagelist for this pool. 735.El 736.It Ic show proc Ns Oo Cm /ap Oc Ar address | pid 737Show information about a process and its LWPs. 738LWPs currently running on a CPU are marked with the '\&>' sign. 739.Bl -tag -width 4n -compact 740.It Cm /a 741The argument passed is the kernel virtual address 742of LWP structure. 743.It Cm /p 744The argument passed is a PID. 745Note that 746.Ar pid 747is interpreted using the current radix (see 748.Cm trace/t 749command for details). 750This is the default. 751.El 752.It Ic show registers Ns Op Cm /u 753Display the register set. 754If 755.Cm /u 756is specified, display user registers instead of kernel registers 757or the currently save one. 758.Pp 759Warning: support for 760.Cm /u 761is machine dependent. 762If not supported, incorrect information will be displayed. 763.It Ic show sched_qs 764Print the state of the scheduler's run queues. 765For each run queue that has an LWP, the run queue index and the list 766of LWPs will be shown. 767If the run queue has LWPs, but the sched_whichqs bit is not set for that 768queue, the queue index will be prefixed with a 769.Sq \&! . 770.It Ic show socket Ns Oo Cm /ampv Oc 771Print usage of system's socket buffers. 772By default, empty sockets aren't printed. 773.Bl -tag -width 4n -compact 774.It Cm /a 775Print all processes which use the socket. 776.It Cm /m 777Print mbuf chain in the socket buffer. 778.It Cm /p 779By default, a process which uses the socket is printed (only one socket). 780If 781.Cm /p 782is specified, the process isn't printed. 783.It Cm /v 784Verbose mode. 785If 786.Cm /v 787is specified, all sockets are printed. 788.El 789.It Ic show uvmexp 790Print a selection of UVM counters and statistics. 791.It Ic show kernhist Ns Oo Cm /i Oc Oo Ar addr Ns Oo , Ns Ar count Oc Oc 792Dumps all the kernel histories if no address is specified, or the history 793at the address. 794If 795.Cm /i 796is specified, display information about the named history or all histories, 797instead of history entries. 798If 799.Ar count 800is specified, only the last 801.Ar count 802entries will be displayed. 803Currently the 804.Ar count 805handling is only performed if a single history is requested. 806This command is available only if a kernel is compiled with one or more 807of the kernel history options 808.Cd KERNHIST , 809.Cd SYSCALL_DEBUG , 810.Cd USB_DEBUG , 811.Cd BIOHIST , 812or 813.Cd UVMHIST . 814.It Ic show vnode Ns Oo Cm /f Oc Ar address 815Print the vnode at 816.Ar address . 817If 818.Cm /f 819is specified, the complete vnode is printed. 820.It Ic show vnode_lock Ns Oo Cm /f Oc Ar address 821Print the vnode which has its lock at 822.Ar address . 823If 824.Cm /f 825is specified, the complete vnode is printed. 826.It Ic show watches 827Display all watchpoints. 828.It Ic sifting Ns Oo Cm /F Oc Ar string 829Search the symbol tables for all symbols of which 830.Ar string 831is a substring, and display them. 832If 833.Cm /F 834is specified, a character is displayed immediately after each symbol 835name indicating the type of symbol. 836.Pp 837Object symbols display 838.Sy + , 839function symbols display 840.Sy * , 841section symbols display 842.Sy & , 843and file symbols display 844.Sy / . 845.Pp 846To sift for a string beginning with a number, escape the first 847character with a backslash as: 848.Bd -literal -offset indent 849sifting \\386 850.Ed 851.It Ic step Ns Oo Cm /p Oc Op , Ns Ar count 852Single-step 853.Ar count 854times. 855If 856.Cm /p 857is specified, print each instruction at each step. 858Otherwise, only print the last instruction. 859.Pp 860Warning: depending on the machine type, it may not be possible 861to single-step through some low-level code paths or user-space 862code. 863On machines with software-emulated single-stepping (e.g., pmax), 864stepping through code executed by interrupt handlers will probably 865do the wrong thing. 866.It Ic sync 867Sync the disks, force a crash dump, and then reboot. 868.It Ic trace Ns Oo Cm /u Ns Oo Cm l Oc Oc Oo Ar frame-address Oc Ns \ 869Oo , Ns Ar count Oc 870Stack trace from 871.Ar frame-address . 872If 873.Cm /u 874is specified, trace user-space, otherwise trace kernel-space. 875.Ar count 876is the number of frames to be traced. 877If 878.Ar count 879is omitted, all frames are printed. 880If 881.Cm /l 882is specified, the trace is printed and also stored in the kernel 883message buffer. 884.Pp 885Warning: user-space stack trace is valid only if the machine dependent 886code supports it. 887.It Ic trace/t Ns Oo Cm l Oc Oo Ar pid Oc Ns Oo , Ns Ar count Oc 888Stack trace by 889.Dq thread 890(process, on 891.Nx ) 892rather than by stack frame address. 893Note that 894.Ar pid 895is interpreted using the current radix, whilst 896.Ic ps 897displays pids in decimal; prefix 898.Ar pid 899with 900.Sq 0t 901to force it to be interpreted as decimal (see 902.Sx VARIABLES 903section for radix). 904If 905.Cm /l 906is specified, the trace is printed and also stored in the kernel 907message buffer. 908.Pp 909Warning: trace by pid is valid only if the machine dependent code 910supports it. 911.It Ic trace/a Ns Oo Cm l Oc Oo Ar lwpaddr Oc Ns Oo , Ns Ar count Oc 912Stack trace by light weight process (LWP) address 913rather than by stack frame address. 914If 915.Cm /l 916is specified, the trace is printed and also stored in the kernel 917message buffer. 918.Pp 919Warning: trace by LWP address is valid only if the machine dependent 920code supports it. 921.It Ic until Ns Op Cm /p 922Stop at the next call or return instruction. 923If 924.Cm /p 925is specified, print the call nesting depth and the 926cumulative instruction count at each call or return. 927Otherwise, only print when the matching return is hit. 928.It Ic watch Ar address Ns Oo , Ns Ar size Oc 929Set a watchpoint for a region. 930Execution stops when an attempt to modify the region occurs. 931.Ar size 932defaults to 4. 933.Pp 934If you specify a wrong space address, the request is 935rejected with an error message. 936.Pp 937Warning: attempts to watch wired kernel memory may cause 938an unrecoverable error in some systems such as i386. 939Watchpoints on user addresses work the best. 940.It Ic whatis Ar address 941Describe what an address is. 942.It Ic write Ns Oo Cm /bhlBHL Oc Ar address Ar expression Oo Ar expression ... Oc 943Write the 944.Ar expression Ns s 945at succeeding locations. 946The unit size is specified with a modifier character, as per 947.Ic examine . 948Valid modifiers are: 949.Cm /b , 950.Cm /h , 951and 952.Cm /l . 953If no modifier is specified, 954.Cm /l 955is used. 956.Pp 957Specifying the modifiers in upper case, 958.Cm /B , 959.Cm /H , 960.Cm /L , 961will prevent 962.Nm 963from reading the memory location first, which is useful for avoiding 964side effects when writing to I/O memory regions. 965.Pp 966Warning: since there is no delimiter between 967.Ar expression Ns s , 968strange things may occur. 969It's best to enclose each 970.Ar expression 971in parentheses. 972.It Ic x Ns Oo Cm / Ns Ar modifier Oc Ar address Ns Op , Ns Ar count 973A synonym for 974.Ic examine . 975.\" XXX - these commands aren't implemented; jhawk 19 May 2000 976.\" .It Ic xf 977.\" Examine forward. 978.\" .Ic xf 979.\" re-executes the most recent 980.\" .Ic execute 981.\" command with the same parameters except that 982.\" .Ar address 983.\" is set to 984.\" .Ar next . 985.\" .It Ic xb 986.\" Examine backward. 987.\" .Ic xb 988.\" re-executes the most recent 989.\" .Ic execute 990.\" command with the same parameters, except that 991.\" .Ar address 992.\" is set to the last start address minus its size. 993.El 994.Sh MACHINE-SPECIFIC COMMANDS 995The "glue" code that hooks 996.Nm 997into the 998.Nx 999kernel for any given port can also add machine specific commands 1000to the 1001.Nm 1002command parser. 1003All of these commands are preceded by the command word 1004.Em machine 1005to indicate that they are part of the machine-specific command 1006set (e.g. 1007.Ic machine reboot ) . 1008Some of these commands are: 1009.Ss AARCH64 1010.Bl -tag -width "traptrace" -compact 1011.It Ic cpu 1012Switch to another CPU. 1013.It Ic cpuinfo 1014Print CPU information about the ``struct cpuinfo''. 1015.It Ic frame 1016Given a trap frame address, print out the trap frame. 1017.It Ic lwp 1018Print lwp information about the ``struct lwp''. 1019.It Ic pte 1020Print PTE information. 1021.It Ic reset 1022Reset the system. 1023.It Ic sysreg 1024Print system registers. 1025.It Ic watch 1026Set or clear a hardware watchpoint. 1027Pass the address to be watched, or watchpoint number to clear the watchpoint. 1028Optional modifiers are 1029.Dq l 1030for load access, 1031.Dq s 1032for store access, 1033.Dq 1 1034for 8 bit width, 1035.Dq 2 1036for 16 bit, 1037.Dq 3 1038for 24 bit, 1039.Dq 4 1040for 32 bit, 1041.Dq 5 1042for 40 bit, 1043.Dq 6 1044for 48 bit, 1045.Dq 7 1046for 56 bit, 1047.Dq 8 1048for 64 bit. 1049.El 1050.Ss ALPHA 1051.Bl -tag -width "traptrace" -compact 1052.It Ic cpu 1053Switch to another CPU. 1054.\" .It Ic halt 1055.\" Call the PROM monitor to halt the CPU. 1056.\" .It Ic reboot 1057.\" Call the PROM monitor to reboot the CPU. 1058.El 1059.Ss AMD64 1060.Bl -tag -width "traptrace" -compact 1061.It Ic cpu 1062Switch to another CPU. 1063.El 1064.Ss ARM32 1065.Bl -tag -width "traptrace" -compact 1066.It Ic frame 1067Given a trap frame address, print out the trap frame. 1068.It Ic reset 1069Reset the system. 1070.El 1071.Ss HPPA 1072.Bl -tag -width "traptrace" -compact 1073.It Ic frame 1074Without an address the default trap frame is printed. 1075Otherwise, the trap frame address can be given, or, when the 1076.Dq l 1077modifier is used, an LWP address. 1078.El 1079.Ss I386 1080.Bl -tag -width "traptrace" -compact 1081.It Ic cpu 1082Switch to another CPU. 1083.El 1084.Ss IA64 1085.Bl -tag -width "traptrace" -compact 1086.It Ic vector 1087Without a vector, information about all 256 vectors is shown. 1088Otherwise, the given vector is shown. 1089.El 1090.Ss MIPS 1091.Bl -tag -width "traptrace" -compact 1092.It Ic cp0 1093Dump CP0 (coprocessor 0) register values. 1094.It Ic cpu 1095Switch to another CPU. 1096.It Ic kvtop 1097Print the physical address for a given kernel virtual address. 1098.\" .It Ic mfcr -- document this! 1099.\" .It Ic mtcr -- document this! 1100.It Ic nmi 1101Send an NMI to a different CPU. 1102This DDB command is currently only implemented for Cavium 1103Octeon CPUs. 1104.It Ic reset 1105Reset the system. 1106Not implemented for many CPUs and/or systems. 1107.It Ic tlb 1108Print out the Translation Lookaside Buffer (TLB). 1109Use the 1110.Cm /v 1111modifier to show only valid TLB entries. 1112.It Ic watch 1113Set a hardware watchpoint on an address or a TLB ASID. 1114Pass the address to be watched. 1115If no address is specified, show a list of active watchpoints. 1116The modifiers are 1117.Cm /m 1118i for trap on an instruction fetch, 1119.Cm /r 1120for trap on a read, 1121.Cm /w 1122for trap on a write, 1123.Cm /m 1124for a mask on the address to match, 1125.Cm /a 1126for trap on a TLB ASID match. 1127The 1128.Cm /m 1129and 1130.Cm /a 1131modifiers require an extra argument for the mask and ASID respectively. 1132.It Ic unwatch 1133Clear a hardware watchpoint. 1134If an address is specified, clear watchpoints that match that address. 1135If no address is specified, clear all watchpoints. 1136.El 1137.Ss POWERPC 4xx 1138.Bl -tag -width "traptrace" -compact 1139.It Ic ctx 1140Print process MMU context information. 1141.It Ic pv 1142Print PA->VA mapping information. 1143.It Ic reset 1144Reset the system. 1145.It Ic tf 1146Display the contents of the trapframe. 1147.It Ic tlb 1148Display instruction translation storage buffer information. 1149.It Ic dcr 1150Set the DCR register. 1151Must be between 0x00 and 0x3ff. 1152.It Ic user 1153Display user memory. 1154Use the 1155.Dq i 1156modifier to get instruction decoding. 1157.El 1158.Ss POWERPC OEA 1159.Bl -tag -width "traptrace" -compact 1160.It Ic bat 1161Print BAT registers and translations. 1162.It Ic mmu 1163Print MMU registers. 1164.El 1165.Ss SH3 1166.Bl -tag -width "traptrace" -compact 1167.It Ic tlb 1168Print TLB entries. 1169.It Ic cache 1170Print cache entries. 1171.It Ic frame 1172Print switch frame and trap frames. 1173.It Ic stack 1174Print kernel stack usage. 1175Only works in 1176.Nx 1177kernels compiled with the 1178.Dv KSTACK_DEBUG 1179option. 1180.El 1181.Ss SPARC 1182.Bl -tag -width "traptrace" -compact 1183.It Ic cpu 1184Switch to another CPU. 1185.It Ic prom 1186Enter the Sun PROM monitor. 1187.It Ic proc 1188Display some information about the LWP pointed to, or curlwp. 1189.It Ic pcb 1190Display information about the 1191.Dq struct pcb 1192listed. 1193.It Ic page 1194Display the pointer to the 1195.Dq struct vm_page 1196for this physical address. 1197.El 1198.Ss SPARC64 1199.Bl -tag -width "traptrace" -compact 1200.It Ic ctx 1201Print process context information. 1202.It Ic cpu 1203Switch to another CPU. 1204.It Ic dtlb 1205Print data translation look-aside buffer context information. 1206.It Ic dtsb 1207Display data translation storage buffer information. 1208.It Ic kmap 1209Display information about the listed mapping in the kernel pmap. 1210Use the 1211.Dq f 1212modifier to get a full listing. 1213.It Ic extract 1214Extract the physical address for a given virtual address from the kernel pmap. 1215.It Ic fpstate 1216Dump the FPU state. 1217.It Ic itlb 1218Print instruction translation look-aside buffer context information. 1219.It Ic itsb 1220Display instruction translation storage buffer information. 1221.It Ic lwp 1222Display a struct lwp 1223.It Ic pcb 1224Display information about the 1225.Dq struct pcb 1226listed. 1227.It Ic pctx 1228Attempt to change process context. 1229.It Ic page 1230Display the pointer to the 1231.Dq struct vm_page 1232for this physical address. 1233.It Ic phys 1234Display physical memory. 1235.It Ic pmap 1236Display the pmap. 1237Use the 1238.Dq f 1239modifier to get a fuller listing. 1240.It Ic proc 1241Display some information about the process pointed to, or curproc. 1242.It Ic prom 1243Enter the OFW PROM. 1244.It Ic pv 1245Display the 1246.Dq struct pv_entry 1247pointed to. 1248.It Ic sir 1249Reset the machine and enter prom (do a Software Initiated Reset). 1250.It Ic stack 1251Dump the window stack. 1252Use the 1253.Dq u 1254modifier to get userland information. 1255.It Ic tf 1256Display full trap frame state. 1257This is most useful for inclusion with bug reports. 1258.It Ic ts 1259Display trap state. 1260.It Ic traptrace 1261Display or set trap trace information. 1262Use the 1263.Dq r 1264and 1265.Dq f 1266modifiers to get reversed and full information, respectively. 1267.It Ic watch 1268Set or clear a physical or virtual hardware watchpoint. 1269Pass the address to be watched, or 1270.Dq 0 1271(or omit the address) to clear the watchpoint. 1272Optional modifiers are 1273.Dq p 1274for physical address, 1275.Dq r 1276for trap on read access (default: trap on write access only), 1277.Dq b 1278for 8 bit width, 1279.Dq h 1280for 16 bit, 1281.Dq l 1282for 32 bit or 1283.Dq L 1284for 64 bit. 1285.It Ic window 1286Print register window information. 1287Argument is a stack frame number (0 is 1288top of stack, which is used when no index is given). 1289.El 1290.Ss SUN2, SUN3 and SUN3X 1291.Bl -tag -width "traptrace" -compact 1292.It Ic abort 1293Drop into monitor via abort (allows continue). 1294.It Ic halt 1295Exit to Sun PROM monitor as in 1296.Xr halt 8 . 1297.It Ic reboot 1298Reboot the machine as in 1299.Xr reboot 8 . 1300.It Ic pgmap 1301Given an address, print the address, segment map, page map, and 1302Page Table Entry (PTE). 1303.El 1304.Ss VAX 1305.Bl -tag -width "traptrace" -compact 1306.It Ic cpu 1307Switch to another CPU. 1308.El 1309.Sh VARIABLES 1310.Nm 1311accesses registers and variables as 1312.Cm $ Ns Ar name . 1313Register names are as per the 1314.Ic show registers 1315command. 1316Some variables are suffixed with numbers, and may have a modifier 1317following a colon immediately after the variable name. 1318For example, register variables may have a 1319.Sq u 1320modifier to indicate user register 1321(e.g., 1322.Li "$eax:u" ) . 1323.Pp 1324Built-in variables currently supported are: 1325.Bl -tag -offset indent -width "maxwidth" -compact 1326.It Va dumpstack 1327If non-zero (the default), 1328causes a stack trace to be printed when 1329.Nm 1330is entered on panic. 1331.It Va fromconsole 1332If non-zero (the default), 1333the kernel allows to enter 1334.Nm 1335from the console (by break signal or special key sequence). 1336If the kernel configuration option 1337.D1 Cd options DDB_FROMCONSOLE=0 1338is used, 1339.Va fromconsole 1340will be initialized to off. 1341.It Va lines 1342The number of lines. 1343This is used by the 1344.Ic more 1345feature. 1346When this variable is set to zero the 1347.Ic more 1348feature is disabled. 1349.It Va maxoff 1350Addresses are printed as 1351.Li 'symbol'+offset 1352unless 1353.Li offset 1354is greater than 1355.Va maxoff . 1356.It Va maxwidth 1357The width of the displayed line. 1358.Nm 1359wraps the current line by printing new line when 1360.Va maxwidth 1361column is reached. 1362When this variable is set to zero 1363.Nm 1364doesn't perform any wrapping. 1365.It Va onpanic 1366If greater than zero (the default is 1), 1367.Nm 1368will be invoked when the kernel panics. 1369If the kernel configuration option 1370.D1 Cd options DDB_ONPANIC=0 1371is used, 1372.Va onpanic 1373will be initialized to off, causing a stack trace to be printed and 1374the system to be rebooted instead of 1375.Nm 1376being entered. 1377Setting 1378.Va onpanic 1379to \-1 suppresses the stack trace before reboot. 1380.It Va radix 1381Input and output radix. 1382.It Va tabstops 1383Tab stop width. 1384.It Va tee_msgbuf 1385If explicitly set to non zero (zero is the default) all 1386.Nm 1387output will not only be displayed on screen but 1388also be fed to the msgbuf. 1389The default of the variable can be set using the kernel configuration option 1390.D1 Cd options DDB_TEE_MSGBUF=1 1391which will initialize 1392.Va tee_msgbuf 1393to be 1. 1394This option is especially handy for poor souls 1395who don't have a serial console but want to recall 1396.Nm 1397output from a crash investigation. 1398This option is more generic than the /l command modifier possible for 1399selected commands as discussed above to log the output. 1400Mixing both /l 1401and this setting can give double loggings. 1402.It Va panicstackframes 1403Number of stack frames to display on panic. 1404Useful to avoid scrolling away the interesting frames on a glass tty. 1405Default value is 1406.Dv 65535 1407(all frames), useful value around 1408.Dv 10 . 1409.\" .It Va work Ns Sy xx 1410.\" Temporary work variable. 1411.\" .Sq Sy xx 1412.\" is between 0 and 31. 1413.El 1414.Pp 1415All built-in variables are accessible via 1416.Xr sysctl 3 . 1417.Sh EXPRESSIONS 1418Almost all expression operators in C are supported, except 1419.Sq \&~ , 1420.Sq \&^ , 1421and unary 1422.Sq \&& . 1423Special rules in 1424.Nm 1425are: 1426.Bl -tag -offset indent -width "identifier" 1427.It Ar identifier 1428name of a symbol. 1429It is translated to the address (or value) of it. 1430.Sq \&. 1431and 1432.Sq \&: 1433can be used in the identifier. 1434If supported by an object format dependent routine, 1435.Sm off 1436.Xo 1437.Oo Ar filename : Oc 1438.Ar function 1439.Oo : Ar line\ number Oc , 1440.Xc 1441.Sm on 1442.Sm off 1443.Xo 1444.Oo Ar filename : Oc 1445.Ar variable , 1446.Xc 1447.Sm on 1448and 1449.Sm off 1450.Xo 1451.Ar filename 1452.Oo : Ar "line number" Oc , 1453.Xc 1454.Sm on 1455can be accepted as a symbol. 1456The symbol may be prefixed with 1457.Ar symbol_table_name\^ : : 1458(e.g., 1459.Li emulator::mach_msg_trap ) 1460to specify other than kernel symbols. 1461.It Ar number 1462number. 1463Radix is determined by the first two characters: 1464.Sq 0x 1465- hex, 1466.Sq 0o 1467- octal, 1468.Sq 0t 1469- decimal, 1470otherwise follow current radix. 1471.It Cm \&. 1472.Ar dot 1473.It Cm + 1474.Ar next 1475.It Cm .. 1476address of the start of the last line examined. 1477Unlike 1478.Ar dot 1479or 1480.Ar next , 1481this is only changed by the 1482.Ic examine 1483or 1484.Ic write 1485commands. 1486.It Cm \&" \"" XXX: emacs highlighting 1487last address explicitly specified. 1488.It Cm $ Ns Ar name 1489register name or variable. 1490It is translated to the value of it. 1491It may be followed by a 1492.Sq \&: 1493and modifiers as described above. 1494.It Cm # 1495a binary operator which rounds up the left hand side to the next 1496multiple of right hand side. 1497.It Cm * Ns Ar expr 1498expression indirection. 1499It may be followed by a 1500.Sq \&: 1501and modifiers as described above. 1502.El 1503.Sh SEE ALSO 1504.Xr reboot 2 , 1505.Xr options 4 , 1506.Xr crash 8 , 1507.Xr reboot 8 , 1508.Xr sysctl 8 , 1509.Xr cnmagic 9 1510.Sh HISTORY 1511The 1512.Nm 1513kernel debugger was written as part of the MACH project at 1514Carnegie-Mellon University. 1515