1.\" 2.\" Mach Operating System 3.\" Copyright (c) 1991,1990 Carnegie Mellon University 4.\" Copyright (c) 2007 Robert N. M. Watson 5.\" All Rights Reserved. 6.\" 7.\" Permission to use, copy, modify and distribute this software and its 8.\" documentation is hereby granted, provided that both the copyright 9.\" notice and this permission notice appear in all copies of the 10.\" software, derivative works or modified versions, and any portions 11.\" thereof, and that both notices appear in supporting documentation. 12.\" 13.\" CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 14.\" CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR 15.\" ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 16.\" 17.\" Carnegie Mellon requests users of this software to return to 18.\" 19.\" Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 20.\" School of Computer Science 21.\" Carnegie Mellon University 22.\" Pittsburgh PA 15213-3890 23.\" 24.\" any improvements or extensions that they make and grant Carnegie Mellon 25.\" the rights to redistribute these changes. 26.\" 27.\" changed a \# to #, since groff choked on it. 28.\" 29.\" HISTORY 30.\" ddb.4,v 31.\" Revision 1.1 1993/07/15 18:41:02 brezak 32.\" Man page for DDB 33.\" 34.\" Revision 2.6 92/04/08 08:52:57 rpd 35.\" Changes from OSF. 36.\" [92/01/17 14:19:22 jsb] 37.\" Changes for OSF debugger modifications. 38.\" [91/12/12 tak] 39.\" 40.\" Revision 2.5 91/06/25 13:50:22 rpd 41.\" Added some watchpoint explanation. 42.\" [91/06/25 rpd] 43.\" 44.\" Revision 2.4 91/06/17 15:47:31 jsb 45.\" Added documentation for continue/c, match, search, and watchpoints. 46.\" I've not actually explained what a watchpoint is; maybe Rich can 47.\" do that (hint, hint). 48.\" [91/06/17 10:58:08 jsb] 49.\" 50.\" Revision 2.3 91/05/14 17:04:23 mrt 51.\" Correcting copyright 52.\" 53.\" Revision 2.2 91/02/14 14:10:06 mrt 54.\" Changed to new Mach copyright 55.\" [91/02/12 18:10:12 mrt] 56.\" 57.\" Revision 2.2 90/08/30 14:23:15 dbg 58.\" Created. 59.\" [90/08/30 dbg] 60.\" 61.\" $FreeBSD$ 62.\" 63.Dd July 13, 2016 64.Dt DDB 4 65.Os 66.Sh NAME 67.Nm ddb 68.Nd interactive kernel debugger 69.Sh SYNOPSIS 70In order to enable kernel debugging facilities include: 71.Bd -ragged -offset indent 72.Cd options KDB 73.Cd options DDB 74.Ed 75.Pp 76To prevent activation of the debugger on kernel 77.Xr panic 9 : 78.Bd -ragged -offset indent 79.Cd options KDB_UNATTENDED 80.Ed 81.Pp 82In order to print a stack trace of the current thread on the console 83for a panic: 84.Bd -ragged -offset indent 85.Cd options KDB_TRACE 86.Ed 87.Pp 88To print the numerical value of symbols in addition to the symbolic 89representation, define: 90.Bd -ragged -offset indent 91.Cd options DDB_NUMSYM 92.Ed 93.Pp 94To enable the 95.Xr gdb 1 96backend, so that remote debugging with 97.Xr kgdb 1 98is possible, include: 99.Bd -ragged -offset indent 100.Cd options GDB 101.Ed 102.Sh DESCRIPTION 103The 104.Nm 105kernel debugger is an interactive debugger with a syntax inspired by 106.Xr gdb 1 . 107If linked into the running kernel, 108it can be invoked locally with the 109.Ql debug 110.Xr keymap 5 111action. 112The debugger is also invoked on kernel 113.Xr panic 9 114if the 115.Va debug.debugger_on_panic 116.Xr sysctl 8 117MIB variable is set non-zero, 118which is the default 119unless the 120.Dv KDB_UNATTENDED 121option is specified. 122.Pp 123The current location is called 124.Va dot . 125The 126.Va dot 127is displayed with 128a hexadecimal format at a prompt. 129The commands 130.Ic examine 131and 132.Ic write 133update 134.Va dot 135to the address of the last line 136examined or the last location modified, and set 137.Va next 138to the address of 139the next location to be examined or changed. 140Other commands do not change 141.Va dot , 142and set 143.Va next 144to be the same as 145.Va dot . 146.Pp 147The general command syntax is: 148.Ar command Ns Op Li / Ns Ar modifier 149.Oo Ar addr Oc Ns Op Li , Ns Ar count 150.Pp 151A blank line repeats the previous command from the address 152.Va next 153with 154count 1 and no modifiers. 155Specifying 156.Ar addr 157sets 158.Va dot 159to the address. 160Omitting 161.Ar addr 162uses 163.Va dot . 164A missing 165.Ar count 166is taken 167to be 1 for printing commands or infinity for stack traces. 168A 169.Ar count 170of -1 is equivalent to a missing 171.Ar count . 172Options that are supplied but not supported by the given 173.Ar command 174are usually ignored. 175.Pp 176The 177.Nm 178debugger has a pager feature (like the 179.Xr more 1 180command) 181for the output. 182If an output line exceeds the number set in the 183.Va lines 184variable, it displays 185.Dq Li --More-- 186and waits for a response. 187The valid responses for it are: 188.Pp 189.Bl -tag -compact -width ".Li SPC" 190.It Li SPC 191one more page 192.It Li RET 193one more line 194.It Li q 195abort the current command, and return to the command input mode 196.El 197.Pp 198Finally, 199.Nm 200provides a small (currently 10 items) command history, and offers 201simple 202.Nm emacs Ns -style 203command line editing capabilities. 204In addition to 205the 206.Nm emacs 207control keys, the usual 208.Tn ANSI 209arrow keys may be used to 210browse through the history buffer, and move the cursor within the 211current line. 212.Sh COMMANDS 213.Bl -tag -width indent -compact 214.It Xo 215.Ic examine Ns Op Li / Ns Cm AISabcdghilmorsuxz ... 216.Oo Ar addr Oc Ns Op Li , Ns Ar count 217.Xc 218.It Xo 219.Ic x Ns Op Li / Ns Cm AISabcdghilmorsuxz ... 220.Oo Ar addr Oc Ns Op Li , Ns Ar count 221.Xc 222Display the addressed locations according to the formats in the modifier. 223Multiple modifier formats display multiple locations. 224If no format is specified, the last format specified for this command 225is used. 226.Pp 227The format characters are: 228.Bl -tag -compact -width indent 229.It Cm b 230look at by bytes (8 bits) 231.It Cm h 232look at by half words (16 bits) 233.It Cm l 234look at by long words (32 bits) 235.It Cm g 236look at by quad words (64 bits) 237.It Cm a 238print the location being displayed 239.It Cm A 240print the location with a line number if possible 241.It Cm x 242display in unsigned hex 243.It Cm z 244display in signed hex 245.It Cm o 246display in unsigned octal 247.It Cm d 248display in signed decimal 249.It Cm u 250display in unsigned decimal 251.It Cm r 252display in current radix, signed 253.It Cm c 254display low 8 bits as a character. 255Non-printing characters are displayed as an octal escape code (e.g., 256.Ql \e000 ) . 257.It Cm s 258display the null-terminated string at the location. 259Non-printing characters are displayed as octal escapes. 260.It Cm m 261display in unsigned hex with character dump at the end of each line. 262The location is also displayed in hex at the beginning of each line. 263.It Cm i 264display as an instruction 265.It Cm I 266display as an instruction with possible alternate formats depending on the 267machine, but none of the supported architectures have an alternate format 268.It Cm S 269display a symbol name for the pointer stored at the address 270.El 271.Pp 272.It Ic xf 273Examine forward: 274execute an 275.Ic examine 276command with the last specified parameters to it 277except that the next address displayed by it is used as the start address. 278.Pp 279.It Ic xb 280Examine backward: 281execute an 282.Ic examine 283command with the last specified parameters to it 284except that the last start address subtracted by the size displayed by it 285is used as the start address. 286.Pp 287.It Ic print Ns Op Li / Ns Cm acdoruxz 288.It Ic p Ns Op Li / Ns Cm acdoruxz 289Print 290.Ar addr Ns s 291according to the modifier character (as described above for 292.Cm examine ) . 293Valid formats are: 294.Cm a , x , z , o , d , u , r , 295and 296.Cm c . 297If no modifier is specified, the last one specified to it is used. 298The argument 299.Ar addr 300can be a string, in which case it is printed as it is. 301For example: 302.Bd -literal -offset indent 303print/x "eax = " $eax "\enecx = " $ecx "\en" 304.Ed 305.Pp 306will print like: 307.Bd -literal -offset indent 308eax = xxxxxx 309ecx = yyyyyy 310.Ed 311.Pp 312.It Xo 313.Ic write Ns Op Li / Ns Cm bhl 314.Ar addr expr1 Op Ar expr2 ... 315.Xc 316.It Xo 317.Ic w Ns Op Li / Ns Cm bhl 318.Ar addr expr1 Op Ar expr2 ... 319.Xc 320Write the expressions specified after 321.Ar addr 322on the command line at succeeding locations starting with 323.Ar addr . 324The write unit size can be specified in the modifier with a letter 325.Cm b 326(byte), 327.Cm h 328(half word) or 329.Cm l 330(long word) respectively. 331If omitted, 332long word is assumed. 333.Pp 334.Sy Warning : 335since there is no delimiter between expressions, strange 336things may happen. 337It is best to enclose each expression in parentheses. 338.Pp 339.It Ic set Li $ Ns Ar variable Oo Li = Oc Ar expr 340Set the named variable or register with the value of 341.Ar expr . 342Valid variable names are described below. 343.Pp 344.It Ic break Ns Oo Li / Ns Cm u Oc Oo Ar addr Oc Ns Op Li , Ns Ar count 345.It Ic b Ns Oo Li / Ns Cm u Oc Oo Ar addr Oc Ns Op Li , Ns Ar count 346Set a break point at 347.Ar addr . 348If 349.Ar count 350is supplied, the 351.Ic continue 352command will not stop at this break point on the first 353.Ar count 354\- 1 times that it is hit. 355If the break point is set, a break point number is 356printed with 357.Ql # . 358This number can be used in deleting the break point 359or adding conditions to it. 360.Pp 361If the 362.Cm u 363modifier is specified, this command sets a break point in user 364address space. 365Without the 366.Cm u 367option, the address is considered to be in the kernel 368space, and a wrong space address is rejected with an error message. 369This modifier can be used only if it is supported by machine dependent 370routines. 371.Pp 372.Sy Warning : 373If a user text is shadowed by a normal user space debugger, 374user space break points may not work correctly. 375Setting a break 376point at the low-level code paths may also cause strange behavior. 377.Pp 378.It Ic delete Op Ar addr 379.It Ic d Op Ar addr 380.It Ic delete Li # Ns Ar number 381.It Ic d Li # Ns Ar number 382Delete the specified break point. 383The break point can be specified by a 384break point number with 385.Ql # , 386or by using the same 387.Ar addr 388specified in the original 389.Ic break 390command, or by omitting 391.Ar addr 392to get the default address of 393.Va dot . 394.Pp 395.It Ic watch Oo Ar addr Oc Ns Op Li , Ns Ar size 396Set a watchpoint for a region. 397Execution stops when an attempt to modify the region occurs. 398The 399.Ar size 400argument defaults to 4. 401If you specify a wrong space address, the request is rejected 402with an error message. 403.Pp 404.Sy Warning : 405Attempts to watch wired kernel memory 406may cause unrecoverable error in some systems such as i386. 407Watchpoints on user addresses work best. 408.Pp 409.It Ic hwatch Oo Ar addr Oc Ns Op Li , Ns Ar size 410Set a hardware watchpoint for a region if supported by the 411architecture. 412Execution stops when an attempt to modify the region occurs. 413The 414.Ar size 415argument defaults to 4. 416.Pp 417.Sy Warning : 418The hardware debug facilities do not have a concept of separate 419address spaces like the watch command does. 420Use 421.Ic hwatch 422for setting watchpoints on kernel address locations only, and avoid 423its use on user mode address spaces. 424.Pp 425.It Ic dhwatch Oo Ar addr Oc Ns Op Li , Ns Ar size 426Delete specified hardware watchpoint. 427.Pp 428.It Ic step Ns Oo Li / Ns Cm p Oc Ns Op Li , Ns Ar count 429.It Ic s Ns Oo Li / Ns Cm p Oc Ns Op Li , Ns Ar count 430Single step 431.Ar count 432times. 433If the 434.Cm p 435modifier is specified, print each instruction at each step. 436Otherwise, only print the last instruction. 437.Pp 438.Sy Warning : 439depending on machine type, it may not be possible to 440single-step through some low-level code paths or user space code. 441On machines with software-emulated single-stepping (e.g., pmax), 442stepping through code executed by interrupt handlers will probably 443do the wrong thing. 444.Pp 445.It Ic continue Ns Op Li / Ns Cm c 446.It Ic c Ns Op Li / Ns Cm c 447Continue execution until a breakpoint or watchpoint. 448If the 449.Cm c 450modifier is specified, count instructions while executing. 451Some machines (e.g., pmax) also count loads and stores. 452.Pp 453.Sy Warning : 454when counting, the debugger is really silently single-stepping. 455This means that single-stepping on low-level code may cause strange 456behavior. 457.Pp 458.It Ic until Ns Op Li / Ns Cm p 459Stop at the next call or return instruction. 460If the 461.Cm p 462modifier is specified, print the call nesting depth and the 463cumulative instruction count at each call or return. 464Otherwise, 465only print when the matching return is hit. 466.Pp 467.It Ic next Ns Op Li / Ns Cm p 468.It Ic match Ns Op Li / Ns Cm p 469Stop at the matching return instruction. 470If the 471.Cm p 472modifier is specified, print the call nesting depth and the 473cumulative instruction count at each call or return. 474Otherwise, only print when the matching return is hit. 475.Pp 476.It Xo 477.Ic trace Ns Op Li / Ns Cm u 478.Op Ar pid | tid Ns 479.Op Li , Ns Ar count 480.Xc 481.It Xo 482.Ic t Ns Op Li / Ns Cm u 483.Op Ar pid | tid Ns 484.Op Li , Ns Ar count 485.Xc 486.It Xo 487.Ic where Ns Op Li / Ns Cm u 488.Op Ar pid | tid Ns 489.Op Li , Ns Ar count 490.Xc 491.It Xo 492.Ic bt Ns Op Li / Ns Cm u 493.Op Ar pid | tid Ns 494.Op Li , Ns Ar count 495.Xc 496Stack trace. 497The 498.Cm u 499option traces user space; if omitted, 500.Ic trace 501only traces 502kernel space. 503The optional argument 504.Ar count 505is the number of frames to be traced. 506If 507.Ar count 508is omitted, all frames are printed. 509.Pp 510.Sy Warning : 511User space stack trace is valid 512only if the machine dependent code supports it. 513.Pp 514.It Xo 515.Ic search Ns Op Li / Ns Cm bhl 516.Ar addr 517.Ar value 518.Op Ar mask Ns 519.Op Li , Ns Ar count 520.Xc 521Search memory for 522.Ar value . 523The optional 524.Ar count 525argument limits the search. 526.\" 527.Pp 528.It Xo 529.Ic findstack 530.Ar addr 531.Xc 532Prints the thread address for a thread kernel-mode stack of which contains the 533specified address. 534If the thread is not found, search the thread stack cache and prints the 535cached stack address. 536Otherwise, prints nothing. 537.Pp 538.It Ic show Cm all procs Ns Op Li / Ns Cm m 539.It Ic ps Ns Op Li / Ns Cm m 540Display all process information. 541The process information may not be shown if it is not 542supported in the machine, or the bottom of the stack of the 543target process is not in the main memory at that time. 544The 545.Cm m 546modifier will alter the display to show VM map 547addresses for the process and not show other information. 548.\" 549.Pp 550.It Ic show Cm all trace 551.It Ic alltrace 552Show a stack trace for every thread in the system. 553.Pp 554.It Ic show Cm all ttys 555Show all TTY's within the system. 556Output is similar to 557.Xr pstat 8 , 558but also includes the address of the TTY structure. 559.\" 560.Pp 561.It Ic show Cm all vnets 562Show the same output as "show vnet" does, but lists all 563virtualized network stacks within the system. 564.\" 565.Pp 566.It Ic show Cm allchains 567Show the same information like "show lockchain" does, but 568for every thread in the system. 569.\" 570.Pp 571.It Ic show Cm alllocks 572Show all locks that are currently held. 573This command is only available if 574.Xr witness 4 575is included in the kernel. 576.\" 577.Pp 578.It Ic show Cm allpcpu 579The same as "show pcpu", but for every CPU present in the system. 580.\" 581.Pp 582.It Ic show Cm allrman 583Show information related with resource management, including 584interrupt request lines, DMA request lines, I/O ports, I/O memory 585addresses, and Resource IDs. 586.\" 587.Pp 588.It Ic show Cm apic 589Dump data about APIC IDT vector mappings. 590.\" 591.Pp 592.It Ic show Cm breaks 593Show breakpoints set with the "break" command. 594.\" 595.Pp 596.It Ic show Cm bio Ar addr 597Show information about the bio structure 598.Vt struct bio 599present at 600.Ar addr . 601See the 602.Pa sys/bio.h 603header file and 604.Xr g_bio 9 605for more details on the exact meaning of the structure fields. 606.\" 607.Pp 608.It Ic show Cm buffer Ar addr 609Show information about the buf structure 610.Vt struct buf 611present at 612.Ar addr . 613See the 614.Pa sys/buf.h 615header file for more details on the exact meaning of the structure fields. 616.\" 617.Pp 618.It Ic show Cm callout Ar addr 619Show information about the callout structure 620.Vt struct callout 621present at 622.Ar addr . 623.\" 624.Pp 625.It Ic show Cm cbstat 626Show brief information about the TTY subsystem. 627.\" 628.Pp 629.It Ic show Cm cdev 630Without argument, show the list of all created cdev's, consisting of devfs 631node name and struct cdev address. 632When address of cdev is supplied, show some internal devfs state of the cdev. 633.\" 634.Pp 635.It Ic show Cm conifhk 636Lists hooks currently waiting for completion in 637run_interrupt_driven_config_hooks(). 638.\" 639.Pp 640.It Ic show Cm cpusets 641Print numbered root and assigned CPU affinity sets. 642See 643.Xr cpuset 2 644for more details. 645.\" 646.Pp 647.It Ic show Cm cyrixreg 648Show registers specific to the Cyrix processor. 649.\" 650.Pp 651.It Ic show Cm devmap 652Prints the contents of the static device mapping table. 653Currently only available on the 654ARM 655architecture. 656.\" 657.Pp 658.It Ic show Cm domain Ar addr 659Print protocol domain structure 660.Vt struct domain 661at address 662.Ar addr . 663See the 664.Pa sys/domain.h 665header file for more details on the exact meaning of the structure fields. 666.\" 667.Pp 668.It Ic show Cm ffs Op Ar addr 669Show brief information about ffs mount at the address 670.Ar addr , 671if argument is given. 672Otherwise, provides the summary about each ffs mount. 673.\" 674.Pp 675.It Ic show Cm file Ar addr 676Show information about the file structure 677.Vt struct file 678present at address 679.Ar addr . 680.\" 681.Pp 682.It Ic show Cm files 683Show information about every file structure in the system. 684.\" 685.Pp 686.It Ic show Cm freepages 687Show the number of physical pages in each of the free lists. 688.\" 689.Pp 690.It Ic show Cm geom Op Ar addr 691If the 692.Ar addr 693argument is not given, displays the entire GEOM topology. 694If 695.Ar addr 696is given, displays details about the given GEOM object (class, geom, 697provider or consumer). 698.\" 699.Pp 700.It Ic show Cm idt 701Show IDT layout. 702The first column specifies the IDT vector. 703The second one is the name of the interrupt/trap handler. 704Those functions are machine dependent. 705.\" 706.Pp 707.It Ic show Cm igi_list Ar addr 708Show information about the IGMP structure 709.Vt struct igmp_ifsoftc 710present at 711.Ar addr . 712.\" 713.Pp 714.It Ic show Cm inodedeps Op Ar addr 715Show brief information about each inodedep structure. 716If 717.Ar addr 718is given, only inodedeps belonging to the fs located at the 719supplied address are shown. 720.\" 721.Pp 722.It Ic show Cm inpcb Ar addr 723Show information on IP Control Block 724.Vt struct in_pcb 725present at 726.Ar addr . 727.\" 728.Pp 729.It Ic show Cm intr 730Dump information about interrupt handlers. 731.\" 732.Pp 733.It Ic show Cm intrcnt 734Dump the interrupt statistics. 735.\" 736.Pp 737.It Ic show Cm irqs 738Show interrupt lines and their respective kernel threads. 739.\" 740.Pp 741.It Ic show Cm jails 742Show the list of 743.Xr jail 8 744instances. 745In addition to what 746.Xr jls 8 747shows, also list kernel internal details. 748.\" 749.Pp 750.It Ic show Cm lapic 751Show information from the local APIC registers for this CPU. 752.\" 753.Pp 754.It Ic show Cm lock Ar addr 755Show lock structure. 756The output format is as follows: 757.Bl -tag -width "flags" 758.It Ic class: 759Class of the lock. 760Possible types include 761.Xr mutex 9 , 762.Xr rmlock 9 , 763.Xr rwlock 9 , 764.Xr sx 9 . 765.It Ic name: 766Name of the lock. 767.It Ic flags: 768Flags passed to the lock initialization function. 769For exact possibilities see manual pages of possible lock types. 770.It Ic state: 771Current state of a lock. 772As well as 773.Ic flags 774it's lock-specific. 775.It Ic owner: 776Lock owner. 777.El 778.\" 779.Pp 780.It Ic show Cm lockchain Ar addr 781Show all threads a particular thread at address 782.Ar addr 783is waiting on based on non-sleepable and non-spin locks. 784.\" 785.Pp 786.It Ic show Cm lockedbufs 787Show the same information as "show buf", but for every locked 788.Vt struct buf 789object. 790.\" 791.Pp 792.It Ic show Cm lockedvnods 793List all locked vnodes in the system. 794.\" 795.Pp 796.It Ic show Cm locks 797Prints all locks that are currently acquired. 798This command is only available if 799.Xr witness 4 800is included in the kernel. 801.\" 802.Pp 803.It Ic show Cm locktree 804.\" 805.Pp 806.It Ic show Cm malloc 807Prints 808.Xr malloc 9 809memory allocator statistics. 810The output format is as follows: 811.Pp 812.Bl -tag -compact -offset indent -width "Requests" 813.It Ic Type 814Specifies a type of memory. 815It is the same as a description string used while defining the 816given memory type with 817.Xr MALLOC_DECLARE 9 . 818.It Ic InUse 819Number of memory allocations of the given type, for which 820.Xr free 9 821has not been called yet. 822.It Ic MemUse 823Total memory consumed by the given allocation type. 824.It Ic Requests 825Number of memory allocation requests for the given 826memory type. 827.El 828.Pp 829The same information can be gathered in userspace with 830.Dq Nm vmstat Fl m . 831.\" 832.Pp 833.It Ic show Cm map Ns Oo Li / Ns Cm f Oc Ar addr 834Prints the VM map at 835.Ar addr . 836If the 837.Cm f 838modifier is specified the 839complete map is printed. 840.\" 841.Pp 842.It Ic show Cm msgbuf 843Print the system's message buffer. 844It is the same output as in the 845.Dq Nm dmesg 846case. 847It is useful if you got a kernel panic, attached a serial cable 848to the machine and want to get the boot messages from before the 849system hang. 850.\" 851.It Ic show Cm mount 852Displays short info about all currently mounted file systems. 853.Pp 854.It Ic show Cm mount Ar addr 855Displays details about the given mount point. 856.\" 857.Pp 858.It Ic show Cm object Ns Oo Li / Ns Cm f Oc Ar addr 859Prints the VM object at 860.Ar addr . 861If the 862.Cm f 863option is specified the 864complete object is printed. 865.\" 866.Pp 867.It Ic show Cm panic 868Print the panic message if set. 869.\" 870.Pp 871.It Ic show Cm page 872Show statistics on VM pages. 873.\" 874.Pp 875.It Ic show Cm pageq 876Show statistics on VM page queues. 877.\" 878.Pp 879.It Ic show Cm pciregs 880Print PCI bus registers. 881The same information can be gathered in userspace by running 882.Dq Nm pciconf Fl lv . 883.\" 884.Pp 885.It Ic show Cm pcpu 886Print current processor state. 887The output format is as follows: 888.Pp 889.Bl -tag -compact -offset indent -width "spin locks held:" 890.It Ic cpuid 891Processor identifier. 892.It Ic curthread 893Thread pointer, process identifier and the name of the process. 894.It Ic curpcb 895Control block pointer. 896.It Ic fpcurthread 897FPU thread pointer. 898.It Ic idlethread 899Idle thread pointer. 900.It Ic APIC ID 901CPU identifier coming from APIC. 902.It Ic currentldt 903LDT pointer. 904.It Ic spin locks held 905Names of spin locks held. 906.El 907.\" 908.Pp 909.It Ic show Cm pgrpdump 910Dump process groups present within the system. 911.\" 912.Pp 913.It Ic show Cm proc Op Ar addr 914If no 915.Op Ar addr 916is specified, print information about the current process. 917Otherwise, show information about the process at address 918.Ar addr . 919.\" 920.Pp 921.It Ic show Cm procvm 922Show process virtual memory layout. 923.\" 924.Pp 925.It Ic show Cm protosw Ar addr 926Print protocol switch structure 927.Vt struct protosw 928at address 929.Ar addr . 930.\" 931.Pp 932.It Ic show Cm registers Ns Op Li / Ns Cm u 933Display the register set. 934If the 935.Cm u 936modifier is specified, it displays user registers instead of 937kernel registers or the currently saved one. 938.Pp 939.Sy Warning : 940The support of the 941.Cm u 942modifier depends on the machine. 943If not supported, incorrect information will be displayed. 944.\" 945.Pp 946.It Ic show Cm rman Ar addr 947Show resource manager object 948.Vt struct rman 949at address 950.Ar addr . 951Addresses of particular pointers can be gathered with "show allrman" 952command. 953.\" 954.Pp 955.It Ic show Cm rtc 956Show real time clock value. 957Useful for long debugging sessions. 958.\" 959.Pp 960.It Ic show Cm sleepchain 961Show all the threads a particular thread is waiting on based on 962sleepable locks. 963.\" 964.Pp 965.It Ic show Cm sleepq 966.It Ic show Cm sleepqueue 967Both commands provide the same functionality. 968They show sleepqueue 969.Vt struct sleepqueue 970structure. 971Sleepqueues are used within the 972.Fx 973kernel to implement sleepable 974synchronization primitives (thread holding a lock might sleep or 975be context switched), which at the time of writing are: 976.Xr condvar 9 , 977.Xr sx 9 978and standard 979.Xr msleep 9 980interface. 981.\" 982.Pp 983.It Ic show Cm sockbuf Ar addr 984.It Ic show Cm socket Ar addr 985Those commands print 986.Vt struct sockbuf 987and 988.Vt struct socket 989objects placed at 990.Ar addr . 991Output consists of all values present in structures mentioned. 992For exact interpretation and more details, visit 993.Pa sys/socket.h 994header file. 995.\" 996.Pp 997.It Ic show Cm sysregs 998Show system registers (e.g., 999.Li cr0-4 1000on i386.) 1001Not present on some platforms. 1002.\" 1003.Pp 1004.It Ic show Cm tcpcb Ar addr 1005Print TCP control block 1006.Vt struct tcpcb 1007lying at address 1008.Ar addr . 1009For exact interpretation of output, visit 1010.Pa netinet/tcp.h 1011header file. 1012.\" 1013.Pp 1014.It Ic show Cm thread Op Ar addr 1015If no 1016.Ar addr 1017is specified, show detailed information about current thread. 1018Otherwise, information about thread at 1019.Ar addr 1020is printed. 1021.\" 1022.Pp 1023.It Ic show Cm threads 1024Show all threads within the system. 1025Output format is as follows: 1026.Pp 1027.Bl -tag -compact -offset indent -width "Second column" 1028.It Ic First column 1029Thread identifier (TID) 1030.It Ic Second column 1031Thread structure address 1032.It Ic Third column 1033Backtrace. 1034.El 1035.\" 1036.Pp 1037.It Ic show Cm tty Ar addr 1038Display the contents of a TTY structure in a readable form. 1039.\" 1040.Pp 1041.It Ic show Cm turnstile Ar addr 1042Show turnstile 1043.Vt struct turnstile 1044structure at address 1045.Ar addr . 1046Turnstiles are structures used within the 1047.Fx 1048kernel to implement 1049synchronization primitives which, while holding a specific type of lock, cannot 1050sleep or context switch to another thread. 1051Currently, those are: 1052.Xr mutex 9 , 1053.Xr rwlock 9 , 1054.Xr rmlock 9 . 1055.\" 1056.Pp 1057.It Ic show Cm uma 1058Show UMA allocator statistics. 1059Output consists five columns: 1060.Pp 1061.Bl -tag -compact -offset indent -width "Requests" 1062.It Cm "Zone" 1063Name of the UMA zone. 1064The same string that was passed to 1065.Xr uma_zcreate 9 1066as a first argument. 1067.It Cm "Size" 1068Size of a given memory object (slab). 1069.It Cm "Used" 1070Number of slabs being currently used. 1071.It Cm "Free" 1072Number of free slabs within the UMA zone. 1073.It Cm "Requests" 1074Number of allocations requests to the given zone. 1075.El 1076.Pp 1077The very same information might be gathered in the userspace 1078with the help of 1079.Dq Nm vmstat Fl z . 1080.\" 1081.Pp 1082.It Ic show Cm unpcb Ar addr 1083Shows UNIX domain socket private control block 1084.Vt struct unpcb 1085present at the address 1086.Ar addr . 1087.\" 1088.Pp 1089.It Ic show Cm vmochk 1090Prints, whether the internal VM objects are in a map somewhere 1091and none have zero ref counts. 1092.\" 1093.Pp 1094.It Ic show Cm vmopag 1095This is supposed to show physical addresses consumed by a 1096VM object. 1097Currently, it is not possible to use this command when 1098.Xr witness 4 1099is compiled in the kernel. 1100.\" 1101.Pp 1102.It Ic show Cm vnet Ar addr 1103Prints virtualized network stack 1104.Vt struct vnet 1105structure present at the address 1106.Ar addr . 1107.\" 1108.Pp 1109.It Ic show Cm vnode Op Ar addr 1110Prints vnode 1111.Vt struct vnode 1112structure lying at 1113.Op Ar addr . 1114For the exact interpretation of the output, look at the 1115.Pa sys/vnode.h 1116header file. 1117.\" 1118.Pp 1119.It Ic show Cm vnodebufs Ar addr 1120Shows clean/dirty buffer lists of the vnode located at 1121.Ar addr . 1122.\" 1123.Pp 1124.It Ic show Cm watches 1125Displays all watchpoints. 1126Shows watchpoints set with "watch" command. 1127.\" 1128.Pp 1129.It Ic show Cm witness 1130Shows information about lock acquisition coming from the 1131.Xr witness 4 1132subsystem. 1133.\" 1134.Pp 1135.It Ic gdb 1136Toggles between remote GDB and DDB mode. 1137In remote GDB mode, another machine is required that runs 1138.Xr gdb 1 1139using the remote debug feature, with a connection to the serial 1140console port on the target machine. 1141Currently only available on the 1142i386 1143architecture. 1144.Pp 1145.It Ic halt 1146Halt the system. 1147.Pp 1148.It Ic kill Ar sig pid 1149Send signal 1150.Ar sig 1151to process 1152.Ar pid . 1153The signal is acted on upon returning from the debugger. 1154This command can be used to kill a process causing resource contention 1155in the case of a hung system. 1156See 1157.Xr signal 3 1158for a list of signals. 1159Note that the arguments are reversed relative to 1160.Xr kill 2 . 1161.Pp 1162.It Ic reboot Op Ar seconds 1163.It Ic reset Op Ar seconds 1164Hard reset the system. 1165If the optional argument 1166.Ar seconds 1167is given, the debugger will wait for this long, at most a week, 1168before rebooting. 1169.Pp 1170.It Ic help 1171Print a short summary of the available commands and command 1172abbreviations. 1173.Pp 1174.It Ic capture on 1175.It Ic capture off 1176.It Ic capture reset 1177.It Ic capture status 1178.Nm 1179supports a basic output capture facility, which can be used to retrieve the 1180results of debugging commands from userspace using 1181.Xr sysctl 3 . 1182.Ic capture on 1183enables output capture; 1184.Ic capture off 1185disables capture. 1186.Ic capture reset 1187will clear the capture buffer and disable capture. 1188.Ic capture status 1189will report current buffer use, buffer size, and disposition of output 1190capture. 1191.Pp 1192Userspace processes may inspect and manage 1193.Nm 1194capture state using 1195.Xr sysctl 8 : 1196.Pp 1197.Dv debug.ddb.capture.bufsize 1198may be used to query or set the current capture buffer size. 1199.Pp 1200.Dv debug.ddb.capture.maxbufsize 1201may be used to query the compile-time limit on the capture buffer size. 1202.Pp 1203.Dv debug.ddb.capture.bytes 1204may be used to query the number of bytes of output currently in the capture 1205buffer. 1206.Pp 1207.Dv debug.ddb.capture.data 1208returns the contents of the buffer as a string to an appropriately privileged 1209process. 1210.Pp 1211This facility is particularly useful in concert with the scripting and 1212.Xr textdump 4 1213facilities, allowing scripted debugging output to be captured and 1214committed to disk as part of a textdump for later analysis. 1215The contents of the capture buffer may also be inspected in a kernel core dump 1216using 1217.Xr kgdb 1 . 1218.Pp 1219.It Ic run 1220.It Ic script 1221.It Ic scripts 1222.It Ic unscript 1223Run, define, list, and delete scripts. 1224See the 1225.Sx SCRIPTING 1226section for more information on the scripting facility. 1227.Pp 1228.It Ic textdump dump 1229.It Ic textdump set 1230.It Ic textdump status 1231.It Ic textdump unset 1232Use the 1233.Ic textdump dump 1234command to immediately perform a textdump. 1235More information may be found in 1236.Xr textdump 4 . 1237The 1238.Ic textdump set 1239command may be used to force the next kernel core dump to be a textdump 1240rather than a traditional memory dump or minidump. 1241.Ic textdump status 1242reports whether a textdump has been scheduled. 1243.Ic textdump unset 1244cancels a request to perform a textdump as the next kernel core dump. 1245.El 1246.Sh VARIABLES 1247The debugger accesses registers and variables as 1248.Li $ Ns Ar name . 1249Register names are as in the 1250.Dq Ic show Cm registers 1251command. 1252Some variables are suffixed with numbers, and may have some modifier 1253following a colon immediately after the variable name. 1254For example, register variables can have a 1255.Cm u 1256modifier to indicate user register (e.g., 1257.Dq Li $eax:u ) . 1258.Pp 1259Built-in variables currently supported are: 1260.Pp 1261.Bl -tag -width ".Va tabstops" -compact 1262.It Va radix 1263Input and output radix. 1264.It Va maxoff 1265Addresses are printed as 1266.Dq Ar symbol Ns Li + Ns Ar offset 1267unless 1268.Ar offset 1269is greater than 1270.Va maxoff . 1271.It Va maxwidth 1272The width of the displayed line. 1273.It Va lines 1274The number of lines. 1275It is used by the built-in pager. 1276.It Va tabstops 1277Tab stop width. 1278.It Va work Ns Ar xx 1279Work variable; 1280.Ar xx 1281can take values from 0 to 31. 1282.El 1283.Sh EXPRESSIONS 1284Most expression operators in C are supported except 1285.Ql ~ , 1286.Ql ^ , 1287and unary 1288.Ql & . 1289Special rules in 1290.Nm 1291are: 1292.Bl -tag -width ".No Identifiers" 1293.It Identifiers 1294The name of a symbol is translated to the value of the symbol, which 1295is the address of the corresponding object. 1296.Ql \&. 1297and 1298.Ql \&: 1299can be used in the identifier. 1300If supported by an object format dependent routine, 1301.Sm off 1302.Oo Ar filename : Oc Ar func : lineno , 1303.Sm on 1304.Oo Ar filename : Oc Ns Ar variable , 1305and 1306.Oo Ar filename : Oc Ns Ar lineno 1307can be accepted as a symbol. 1308.It Numbers 1309Radix is determined by the first two letters: 1310.Ql 0x : 1311hex, 1312.Ql 0o : 1313octal, 1314.Ql 0t : 1315decimal; otherwise, follow current radix. 1316.It Li \&. 1317.Va dot 1318.It Li + 1319.Va next 1320.It Li .. 1321address of the start of the last line examined. 1322Unlike 1323.Va dot 1324or 1325.Va next , 1326this is only changed by 1327.Ic examine 1328or 1329.Ic write 1330command. 1331.It Li ' 1332last address explicitly specified. 1333.It Li $ Ns Ar variable 1334Translated to the value of the specified variable. 1335It may be followed by a 1336.Ql \&: 1337and modifiers as described above. 1338.It Ar a Ns Li # Ns Ar b 1339A binary operator which rounds up the left hand side to the next 1340multiple of right hand side. 1341.It Li * Ns Ar expr 1342Indirection. 1343It may be followed by a 1344.Ql \&: 1345and modifiers as described above. 1346.El 1347.Sh SCRIPTING 1348.Nm 1349supports a basic scripting facility to allow automating tasks or responses to 1350specific events. 1351Each script consists of a list of DDB commands to be executed sequentially, 1352and is assigned a unique name. 1353Certain script names have special meaning, and will be automatically run on 1354various 1355.Nm 1356events if scripts by those names have been defined. 1357.Pp 1358The 1359.Ic script 1360command may be used to define a script by name. 1361Scripts consist of a series of 1362.Nm 1363commands separated with the 1364.Ql \&; 1365character. 1366For example: 1367.Bd -literal -offset indent 1368script kdb.enter.panic=bt; show pcpu 1369script lockinfo=show alllocks; show lockedvnods 1370.Ed 1371.Pp 1372The 1373.Ic scripts 1374command lists currently defined scripts. 1375.Pp 1376The 1377.Ic run 1378command execute a script by name. 1379For example: 1380.Bd -literal -offset indent 1381run lockinfo 1382.Ed 1383.Pp 1384The 1385.Ic unscript 1386command may be used to delete a script by name. 1387For example: 1388.Bd -literal -offset indent 1389unscript kdb.enter.panic 1390.Ed 1391.Pp 1392These functions may also be performed from userspace using the 1393.Xr ddb 8 1394command. 1395.Pp 1396Certain scripts are run automatically, if defined, for specific 1397.Nm 1398events. 1399The follow scripts are run when various events occur: 1400.Bl -tag -width kdb.enter.powerfail 1401.It Dv kdb.enter.acpi 1402The kernel debugger was entered as a result of an 1403.Xr acpi 4 1404event. 1405.It Dv kdb.enter.bootflags 1406The kernel debugger was entered at boot as a result of the debugger boot 1407flag being set. 1408.It Dv kdb.enter.break 1409The kernel debugger was entered as a result of a serial or console break. 1410.It Dv kdb.enter.cam 1411The kernel debugger was entered as a result of a 1412.Xr CAM 4 1413event. 1414.It Dv kdb.enter.mac 1415The kernel debugger was entered as a result of an assertion failure in the 1416.Xr mac_test 4 1417module of the 1418TrustedBSD MAC Framework. 1419.It Dv kdb.enter.ndis 1420The kernel debugger was entered as a result of an 1421.Xr ndis 4 1422breakpoint event. 1423.It Dv kdb.enter.netgraph 1424The kernel debugger was entered as a result of a 1425.Xr netgraph 4 1426event. 1427.It Dv kdb.enter.panic 1428.Xr panic 9 1429was called. 1430.It Dv kdb.enter.powerfail 1431The kernel debugger was entered as a result of a powerfail NMI on the sparc64 1432platform. 1433.It Dv kdb.enter.powerpc 1434The kernel debugger was entered as a result of an unimplemented interrupt 1435type on the powerpc platform. 1436.It Dv kdb.enter.sysctl 1437The kernel debugger was entered as a result of the 1438.Dv debug.kdb.enter 1439sysctl being set. 1440.It Dv kdb.enter.trapsig 1441The kernel debugger was entered as a result of a trapsig event on the sparc64 1442platform. 1443.It Dv kdb.enter.unionfs 1444The kernel debugger was entered as a result of an assertion failure in the 1445union file system. 1446.It Dv kdb.enter.unknown 1447The kernel debugger was entered, but no reason has been set. 1448.It Dv kdb.enter.vfslock 1449The kernel debugger was entered as a result of a VFS lock violation. 1450.It Dv kdb.enter.watchdog 1451The kernel debugger was entered as a result of a watchdog firing. 1452.It Dv kdb.enter.witness 1453The kernel debugger was entered as a result of a 1454.Xr witness 4 1455violation. 1456.El 1457.Pp 1458In the event that none of these scripts is found, 1459.Nm 1460will attempt to execute a default script: 1461.Bl -tag -width kdb.enter.powerfail 1462.It Dv kdb.enter.default 1463The kernel debugger was entered, but a script exactly matching the reason for 1464entering was not defined. 1465This can be used as a catch-all to handle cases not specifically of interest; 1466for example, 1467.Dv kdb.enter.witness 1468might be defined to have special handling, and 1469.Dv kdb.enter.default 1470might be defined to simply panic and reboot. 1471.El 1472.Sh HINTS 1473On machines with an ISA expansion bus, a simple NMI generation card can be 1474constructed by connecting a push button between the A01 and B01 (CHCHK# and 1475GND) card fingers. 1476Momentarily shorting these two fingers together may cause the bridge chipset to 1477generate an NMI, which causes the kernel to pass control to 1478.Nm . 1479Some bridge chipsets do not generate a NMI on CHCHK#, so your mileage may vary. 1480The NMI allows one to break into the debugger on a wedged machine to 1481diagnose problems. 1482Other bus' bridge chipsets may be able to generate NMI using bus specific 1483methods. 1484There are many PCI and PCIe add-in cards which can generate NMI for 1485debugging. 1486Modern server systems typically use IPMI to generate signals to enter the 1487debugger. 1488The 1489.Dv devel/ipmitool 1490port can be used to send the 1491.Cd chassis power diag 1492command which delivers an NMI to the processor. 1493Embedded systems often use JTAG for debugging, but rarely use it in 1494combination with 1495.Nm . 1496.Pp 1497For serial consoles, you can enter the debugger by sending a BREAK 1498condition on the serial line if 1499.Cd options BREAK_TO_DEBUGGER 1500is specified in the kernel. 1501Most terminal emulation programs can send a break sequence with a 1502special key sequence or via a menu item. 1503However, in some setups, sending the break can be difficult to arrange 1504or happens spuriously, so if the kernel contains 1505.Cd options ALT_BREAK_TO_DEBUGGER 1506then the sequence of CR TILDE CTRL-B enters the debugger; 1507CR TILDE CTRL-P causes a panic instead of entering the 1508debugger; and 1509CR TILDE CTRL-R causes an immediate reboot. 1510In all the above sequences, CR is a Carriage Return and is usually 1511sent by hitting the Enter or Return key. 1512TILDE is the ASCII tilde character (~). 1513CTRL-x is Control x created by hitting the control key and then x 1514and then releasing both. 1515.Pp 1516The break to enter the debugger behavior may be enabled at run-time 1517by setting the 1518.Xr sysctl 8 1519.Dv debug.kdb.break_to_debugger 1520to 1. 1521The alternate sequence to enter the debugger behavior may be enabled 1522at run-time by setting the 1523.Xr sysctl 8 1524.Dv debug.kdb.alt_break_to_debugger 1525to 1. 1526The debugger may be entered by setting the 1527.Xr sysctl 8 1528.Dv debug.kdb.enter 1529to 1. 1530.Sh FILES 1531Header files mentioned in this manual page can be found below 1532.Pa /usr/include 1533directory. 1534.Pp 1535.Bl -dash -compact 1536.It 1537.Pa sys/buf.h 1538.It 1539.Pa sys/domain.h 1540.It 1541.Pa netinet/in_pcb.h 1542.It 1543.Pa sys/socket.h 1544.It 1545.Pa sys/vnode.h 1546.El 1547.Sh SEE ALSO 1548.Xr gdb 1 , 1549.Xr kgdb 1 , 1550.Xr acpi 4 , 1551.Xr CAM 4 , 1552.Xr mac_test 4 , 1553.Xr ndis 4 , 1554.Xr netgraph 4 , 1555.Xr textdump 4 , 1556.Xr witness 4 , 1557.Xr ddb 8 , 1558.Xr sysctl 8 , 1559.Xr panic 9 1560.Sh HISTORY 1561The 1562.Nm 1563debugger was developed for Mach, and ported to 1564.Bx 386 0.1 . 1565This manual page translated from 1566.Xr man 7 1567macros by 1568.An Garrett Wollman . 1569.Pp 1570.An Robert N. M. Watson 1571added support for 1572.Nm 1573output capture, 1574.Xr textdump 4 1575and scripting in 1576.Fx 7.1 . 1577