xref: /freebsd/share/man/man4/ddb.4 (revision 97bb4528d985130fe091155c4e485ff12322b197)
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