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