Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

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