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
|
<!--
The FreeBSD Russian Documentation Project
$FreeBSD$
$FreeBSDru: frdp/doc/ru_RU.KOI8-R/books/developers-handbook/kerneldebug/chapter.sgml,v 1.16 2005/05/23 06:40:07 andy Exp $
Original revision: 1.62
-->
<chapter id="kerneldebug">
<chapterinfo>
<authorgroup>
<author>
<firstname>Paul</firstname>
<surname>Richards</surname>
<contrib>ôÅËÓÔ ÐÒÅÄÏÓÔÁ×ÉÌÉ </contrib>
</author>
<author>
<firstname>Jörg</firstname>
<surname>Wunsch</surname>
</author>
</authorgroup>
</chapterinfo>
<title>ïÔÌÁÄËÁ ÑÄÒÁ</title>
<sect1 id="kerneldebug-obtain">
<title>ðÏÌÕÞÅÎÉÅ Á×ÁÒÉÊÎÏÇÏ ÄÁÍÐÁ ÑÄÒÁ</title>
<para>ðÒÉ ÒÁÂÏÔÅ ÑÄÒÁ, ÎÁÈÏÄÑÝÅÇÏÓÑ × ÒÁÚÒÁÂÏÔËÅ (ÎÁÐÒÉÍÅÒ: &os.current;),
ÐÒÉ ËÒÉÔÉÞÎÙÈ ÕÓÌÏ×ÉÑÈ (Ë ÐÒÉÍÅÒÕ: ÏÞÅÎØ ×ÙÓÏËÁÑ ÓÒÅÄÎÑÑ ÎÁÇÒÕÚËÁ,
ÄÅÓÑÔËÉ ÔÙÓÑÞ ÓÏÅÄÉÎÅÎÉÊ, ÉÓËÌÀÞÉÔÅÌØÎÏ ÂÏÌØÛÏÅ ËÏÌÉÞÅÓÔ×Ï ÏÄÎÏ×ÒÅÍÅÎÎÏ
ÒÁÂÏÔÁÀÝÉÈ ÐÏÌØÚÏ×ÁÔÅÌÅÊ, ÓÏÔÎÉ ÐÒÏÃÅÓÓÏ× &man.jail.8; É ÔÁË ÄÁÌÅÅ) ÉÌÉ
ÐÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ ÎÏ×ÏÊ ×ÏÚÍÏÖÎÏÓÔÉ × ÄÒÁÊ×ÅÒÅ ÕÓÔÒÏÊÓÔ×Á × &os.stable;
(ÐÒÉÍÅÒ: <acronym>PAE</acronym>) ÏÎÏ ÉÎÏÇÄÁ ÂÕÄÅÔ ÚÁ×ÅÒÛÁÔØ Ó×ÏÀ ÒÁÂÏÔÕ
Á×ÁÒÉÊÎÏ. ÷ ÓÌÕÞÁÅ, ÅÓÌÉ ÜÔÏ ÐÒÏÉÚÏÛÌÏ, × ÜÔÏÊ ÇÌÁ×Å ÐÏËÁÚÁÎÏ, ËÁË
ÉÚ×ÌÅËÁÔØ ÐÏÌÅÚÎÕÀ ÉÎÆÏÒÍÁÃÉÀ ÉÚ ÐÒÏÉÚÏÛÅÄÛÅÇÏ ÓÂÏÑ.</para>
<para>ðÒÉ Á×ÁÒÉÊÎÏÍ ÚÁ×ÅÒÛÅÎÉÉ ÒÁÂÏÔÙ ÑÄÒÁ ÐÅÒÅÚÁÇÒÕÚËÁ ÓÉÓÔÅÍÙ ÎÅÉÚÂÅÖÎÁ.
ðÏÓÌÅ ÐÅÒÅÚÁÇÒÕÚËÉ ÓÉÓÔÅÍÙ ÓÏÄÅÒÖÉÍÏÅ ÆÉÚÉÞÅÓËÏÊ ÐÁÍÑÔÉ ÓÉÓÔÅÍÙ
(<acronym>RAM</acronym>) ÔÅÒÑÅÔÓÑ, ÔÁË ÖÅ ËÁË É ×Ó£ ÓÏÄÅÒÖÉÍÏÅ ÒÁÚÄÅÌÁ
ÐÏÄËÁÞËÉ ÐÅÒÅÄ ÓÂÏÅÍ. äÌÑ ÓÏÈÒÁÎÅÎÉÑ ÓÏÓÔÏÑÎÉÑ ÆÉÚÉÞÅÓËÏÊ ÐÁÍÑÔÉ ÑÄÒÏ
ÉÓÐÏÌØÚÕÅÔ ÕÓÔÒÏÊÓÔ×Ï ÐÏÄËÁÞËÉ × ËÁÞÅÓÔ×Å ÍÅÓÔÁ ×ÒÅÍÅÎÎÏÇÏ ÈÒÁÎÅÎÉÑ
ÓÏÄÅÒÖÉÍÏÇÏ ÏÐÅÒÁÔÉ×ÎÏÊ ÐÁÍÑÔÉ ÐÏÓÌÅ ÐÅÒÅÚÁÇÒÕÚËÉ, ÓÌÅÄÕÀÝÅÊ ÚÁ Á×ÁÒÉÊÎÙÍ
ÚÁ×ÅÒÛÅÎÉÅÍ ÒÁÂÏÔÙ. ó ÜÔÏÊ ÃÅÌØÀ ÐÒÉ ÚÁÇÒÕÚËÅ
&os; ÐÏÓÌÅ Á×ÁÒÉÊÎÏÇÏ ÏÓÔÁÎÏ×Á ÏÂÒÁÚ ÑÄÒÁ ÍÏÖÅÔ ÂÙÔØ ÉÚ×ÌÅޣΠÉ
ÐÒÉÍÅÎÑÔØÓÑ ÄÌÑ ÏÔÌÁÄËÉ.</para>
<note>
<para>õÓÔÒÏÊÓÔ×Ï ÐÏÄËÁÞËÉ, ËÏÔÏÒÏÅ ÂÙÌÏ ÏÔËÏÎÆÉÇÕÒÉÒÏ×ÁÎÏ × ËÁÞÅÓÔ×Å
ÕÓÔÒÏÊÓÔ×Á ÄÌÑ ÄÁÍÐÁ ÐÒÏÄÏÌÖÁÅÔ ×ÙÓÔÕÐÁÔØ × ÒÏÌÉ ÕÓÔÒÏÊÓÔ×Á ÐÏÄËÁÞËÉ.
÷ ÎÁÓÔÏÑÝÅÅ ×ÒÅÍÑ ×ÙÐÏÌÎÅÎÉÅ ÄÁÍÐÏ× ÎÁ ÕÓÔÒÏÊÓÔ×Á, ÎÅ ÐÒÅÄÎÁÚÎÁÞÅÎÎÙÅ
ÄÌÑ ÏÒÇÁÎÉÚÁÃÉÉ ÐÏÄËÁÞËÉ (ÎÁÐÒÉÍÅÒ, ÌÅÎÔÙ ÉÌÉ CDRW), ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ.
ðÏÎÑÔÉÅ <quote>ÕÓÔÒÏÊÓÔ×Ï ÐÏÄËÁÞËÉ</quote> Ñ×ÌÑÅÔÓÑ ÓÉÎÏÎÉÍÏÍ
<quote>ÒÁÚÄÅÌÁ ÐÏÄËÁÞËÉ.</quote></para>
</note>
<para>þÔÏÂÙ ÓÕÍÅÔØ ÉÚ×ÌÅÞØ ÏÂÒÁÚ, ËÏÔÏÒÙÊ ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ, ÔÒÅÂÕÅÔÓÑ,
ÞÔÏÂÙ ÐÏ ËÒÁÊÎÅÊ ÍÅÒÅ ÏÄÉÎ ÒÁÚÄÅÌ ÐÏÄËÁÞËÉ ÂÙÌ ÄÏÓÔÁÔÏÞÎÏ ÂÏÌØÛÉÍ, ÞÔÏÂÙ
ÒÁÚÍÅÓÔÉÔØ ÎÁ Î£Í ×ÅÓØ ÏÂß£Í ÆÉÚÉÞÅÓËÏÊ ÐÁÍÑÔÉ. ëÏÇÄÁ ÑÄÒÏ Á×ÁÒÉÊÎÏ
ÚÁ×ÅÒÛÁÅÔ ÒÁÂÏÔÕ, ÐÅÒÅÄ ÐÅÒÅÚÁÇÒÕÚËÏÊ ÓÉÓÔÅÍÙ, ÑÄÒÏ ÄÏÓÔÁÔÏÞÎÏ ÕÍÎÏ,
ÞÔÏÂÙ ÐÒÏ×ÅÒÉÔØ, ÂÙÌÏ ÌÉ ÏÔËÏÎÆÉÇÕÒÉÒÏ×ÁÎÏ ÕÓÔÒÏÊÓÔ×Ï ÐÏÄËÁÞËÉ ×
ËÁÞÅÓÔ×Å ÕÓÔÒÏÊÓÔ×Á ÄÌÑ ÈÒÁÎÅÎÉÑ ÄÁÍÐÏ×. åÓÌÉ ÏÎÏ Ñ×ÌÑÅÔÓÑ ÕÓÔÒÏÊÓÔ×ÏÍ,
ÐÏÄÈÏÄÑÝÉÍ ÄÌÑ ÓÂÒÏÓÁ ÄÁÍÐÁ, ÔÏ ÑÄÒÏ ÓÂÒÁÓÙ×ÁÅÔ ÓÏÄÅÒÖÉÍÏÅ ÆÉÚÉÞÅÓËÏÊ
ÐÁÍÑÔÉ ÎÁ ÕÓÔÒÏÊÓÔ×Ï ÐÏÄËÁÞËÉ.</para>
<sect2 id="config-dumpdev">
<title>ëÏÎÆÉÇÕÒÁÃÉÑ ÕÓÔÒÏÊÓÔ×Á ÈÒÁÎÅÎÉÑ ÄÁÍÐÏ×</title>
<para>äÏ ÔÏÇÏ, ËÁË ÑÄÒÏ ÎÁÞÎ£Ô ÓÂÒÁÓÙ×ÁÔØ ÓÏÄÅÒÖÉÍÏÅ ÆÉÚÉÞÅÓËÏÊ ÐÁÍÑÔÉ
ÎÁ ÕÓÔÒÏÊÓÔ×Ï ÈÒÁÎÅÎÉÑ ÄÁÍÐÏ×, ÐÏÓÌÅÄÎÅÅ ÄÏÌÖÎÏ ÂÙÔØ
ÏÔËÏÎÆÉÇÕÒÉÒÏ×ÁÎÏ. õÓÔÒÏÊÓÔ×Ï ÈÒÁÎÅÎÉÑ ÄÁÍÐÏ× ÚÁÄÁ£ÔÓÑ ÐÒÉ ÐÏÍÏÝÉ
ËÏÍÁÎÄÙ &man.dumpon.8;, ÕËÁÚÙ×ÁÀÝÅÊ ÑÄÒÕ, ËÕÄÁ ÓÏÈÒÁÎÑÔØ Á×ÁÒÉÊÎÙÅ
ÄÁÍÐÙ ÑÄÒÁ. ðÒÏÇÒÁÍÍÁ &man.dumpon.8; ÄÏÌÖÎÁ ÂÙÔØ ×ÙÚ×ÁÎÁ ÐÏÓÌÅ
ËÏÎÆÉÇÕÒÁÃÉÉ ÒÁÚÄÅÌÁ ÐÏÄËÁÞËÉ ÐÏ ËÏÍÁÎÄÅ &man.swapon.8;. ïÂÙÞÎÏ ÜÔÏ
ÏÓÕÝÅÓÔ×ÌÑÅÔÓÑ ÕÓÔÁÎÏ×ËÏÊ ÐÅÒÅÍÅÎÎÏÊ <varname>dumpdev</varname> ×
ÆÁÊÌÅ &man.rc.conf.5; × ÚÎÁÞÅÎÉÅ, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÅ ÐÕÔÉ Ë ÕÓÔÒÏÊÓÔ×Õ
ÐÏÄËÁÞËÉ (ÒÅËÏÍÅÎÄÏ×ÁÎÎÙÊ ÓÐÏÓÏ ÉÚ×ÌÅÞÅÎÉÑ ÄÁÍÐÁ ÑÄÒÁ).</para>
<para>ìÉÂÏ ÕÓÔÒÏÊÓÔ×Ï ÄÌÑ ÓÂÒÏÓÁ ÏÂÒÁÚÁ ÐÁÍÑÔÉ ÍÏÖÅÔ ÂÙÔØ ÚÁÄÁÎÏ Ñ×ÎÏ
× ÐÁÒÁÍÅÔÒÅ <literal>dump</literal> ÓÔÒÏËÉ &man.config.5;
ËÏÎÆÉÇÕÒÁÃÉÏÎÎÏÇÏ ÆÁÊÌÁ ×ÁÛÅÇÏ ÑÄÒÁ. ôÁËÏÊ ÓÐÏÓÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÎÅ
ÒÅËÏÍÅÎÄÕÅÔÓÑ É ÏÎ ÄÏÌÖÅÎ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ, ÔÏÌØËÏ ÅÓÌÉ ÑÄÒÏ Á×ÁÒÉÊÎÏ
ÚÁ×ÅÒÛÁÅÔ Ó×ÏÀ ÒÁÂÏÔÕ ÄÏ ÔÏÇÏ, ËÁË ÍÏÖÎÏ ÂÙÌÏ ÂÙ ÚÁÐÕÓÔÉÔØ
&man.dumpon.8;.</para>
<tip>
<para>ðÒÏ×ÅÒØÔÅ ÓÏÄÅÒÖÉÍÏÅ ÆÁÊÌÁ <filename>/etc/fstab</filename> ÉÌÉ
×ÙÄÁÞÕ &man.swapinfo.8; ÎÁ ÐÒÅÄÍÅÔ ÎÁÌÉÞÉÑ ÕÓÔÒÏÊÓÔ×
ÐÏÄËÁÞËÉ.</para>
</tip>
<important>
<para>õÄÏÓÔÏ×ÅÒØÔÅÓØ, ÞÔÏ ËÁÔÁÌÏÇ <varname>dumpdir</varname>,
ÕËÁÚÁÎÎÙÊ × &man.rc.conf.5;, ÓÕÝÅÓÔ×ÕÅÔ ÄÏ Á×ÁÒÉÊÎÏÇÏ ÏÓÔÁÎÏ×Á
ÑÄÒÁ!</para>
<screen>&prompt.root; <userinput>mkdir /var/crash</userinput>
&prompt.root; <userinput>chmod 700 /var/crash</userinput></screen>
<para>úÁÐÏÍÎÉÔÅ ÔÁËÖÅ, ÞÔÏ ÓÏÄÅÒÖÉÍÏÅ <filename>/var/crash</filename>
Ñ×ÌÑÅÔÓÑ ×ÁÖÎÏÊ ÉÎÆÏÒÍÁÃÉÅÊ, ×ÅÓØÍÁ ×ÅÒÏÑÔÎÏ, ÓÏÄÅÒÖÁÝÅÊ
ËÏÎÆÉÄÅÎÃÉÁÌØÎÕÀ ÉÎÆÏÒÍÁÃÉÀ, × ÞÁÓÔÎÏÓÔÉ, ÐÁÒÏÌÉ.</para>
</important>
</sect2>
<sect2 id="extract-dump">
<title>éÚ×ÌÅÞÅÎÉÅ ÄÁÍÐÁ ÑÄÒÁ</title>
<para>ðÏÓÌÅ ÔÏÇÏ, ËÁË Á×ÁÒÉÊÎÙÊ ÏÂÒÁÚ ÂÙÌ ÚÁÐÉÓÁÎ ÎÁ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÅ
ÕÓÔÒÏÊÓÔ×Ï, ÅÇÏ ÎÕÖÎÏ ÉÚ×ÌÅÞØ ÄÏ ÍÏÍÅÎÔÁ ÍÏÎÔÉÒÏ×ÁÎÉÑ ÕÓÔÒÏÊÓÔ×Á
ÐÏÄËÁÞËÉ. äÌÑ ÉÚ×ÌÅÞÅÎÉÑ ÄÁÍÐÁ ÉÚ
ÕÓÔÒÏÊÓÔ×Á ÅÇÏ ÓÏÈÒÁÎÅÎÉÑ, ×ÏÓÐÏÌØÚÕÊÔÅÓØ ÕÔÉÌÉÔÏÊ &man.savecore.8;.
åÓÌÉ × ÆÁÊÌÅ &man.rc.conf.5; ÂÙÌÏ ÚÁÄÁÎÏ ÕÓÔÒÏÊÓÔ×Ï
<varname>dumpdev</varname>, ÔÏ &man.savecore.8; ÂÕÄÅÔ ÚÁÐÕÝÅÎÁ
Á×ÔÏÍÁÔÉÞÅÓËÉ ÐÒÉ ÐÅÒ×ÏÊ ÐÏÓÌÅ Á×ÁÒÉÊÎÏÇÏ ÏÓÔÁÎÏ×Á ÚÁÇÒÕÚËÅ ×
ÍÎÏÇÏÐÏÌØÚÏ×ÁÔÅÌØÓËÏÍ ÒÅÖÉÍÅ É ÄÏ ÍÏÎÔÉÒÏ×ÁÎÉÑ ÕÓÔÒÏÊÓÔ×Á ÐÏÄËÁÞËÉ.
íÅÓÔÏÐÏÌÏÖÅÎÉÅ ÉÚ×ÌÅÞ£ÎÎÏÇÏ ÏÂÒÁÚÁ ÐÁÍÑÔÉ ÏÐÒÅÄÅÌÑÅÔÓÑ ÚÎÁÞÅÎÉÅÍ
ÐÅÒÅÍÅÎÎÏÊ <varname>dumpdir</varname> ÉÚ ÆÁÊÌÁ &man.rc.conf.5;,
ËÏÔÏÒÏÅ ÐÏ ÕÍÏÌÞÁÎÉÀ ÕËÁÚÙ×ÁÅÔ ÎÁ ËÁÔÁÌÏÇ
<filename>/var/crash</filename>, Á ÆÁÊÌ ÂÕÄÅÔ ÎÁÚÙ×ÁÔØÓÑ
<filename>vmcore.0</filename>.</para>
<para>÷ ÓÌÕÞÁÅ, ÅÓÌÉ × ËÁÔÁÌÏÇÅ <filename>/var/crash</filename> (ÉÌÉ ×
ÔÏÍ, ÎÁ ËÏÔÏÒÙÊ ÕËÁÚÙ×ÁÅÔ <varname>dumpdir</varname>) ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ
ÆÁÊÌ Ó ÉÍÅÎÅÍ <filename>vmcore.0</filename>, ÔÏ ÑÄÒÏ ÂÕÄÅÔ Õ×ÅÌÉÞÉ×ÁÔØ
ÐÏÒÑÄËÏ×ÙÊ ÎÏÍÅÒ ÄÌÑ ËÁÖÄÏÇÏ Á×ÁÒÉÊÎÏÇÏ ÏÓÔÁÎÏ×Á, ÞÔÏÂÙ ÉÚÂÅÖÁÔØ
ÐÅÒÅÚÁÐÉÓÉ ÓÕÝÅÓÔ×ÕÀÝÉÈ ÆÁÊÌÏ× <filename>vmcore</filename> (Ë
ÐÒÉÍÅÒÕ, <filename>vmcore.1</filename>). ÷ ÐÒÏÃÅÓÓÅ ÏÔÌÁÄËÉ ÓËÏÒÅÅ
×ÓÅÇÏ, × ËÁÞÅÓÔ×Å ÎÕÖÎÏÇÏ <filename>vmcore</filename> ×Ù ÂÕÄÅÔÅ
ÉÓÐÏÌØÚÏ×ÁÔØ ×ÅÒÓÉÀ <filename>vmcore</filename> Ó ÎÁÉÂÏÌØÛÉÍ ÎÏÍÅÒÏÍ
× <filename>/var/crash</filename>.</para>
<tip>
<para>åÓÌÉ ×Ù ÔÅÓÔÉÒÕÅÔÅ ÎÏ×ÏÅ ÑÄÒÏ, ÎÏ ×ÁÍ ÎÕÖÎÏ ÚÁÇÒÕÚÉÔØ É ÒÁÂÏÔÁÔØ
Ó ÄÒÕÇÉÍ ÑÄÒÏÍ, ÞÔÏÂÙ ÐÏÌÕÞÉÔØ ÎÏÒÍÁÌØÎÏ ÆÕÎËÃÉÏÎÉÒÕÀÝÕÀ ÓÉÓÔÅÍÕ, ÔÏ
ÚÁÇÒÕÚÉÔÅ ÅÇÏ × ÏÄÎÏÐÏÌØÚÏ×ÁÔÅÌØÓËÏÍ ÒÅÖÉÍÅ ÐÒÉ ÐÏÍÏÝÉ ÆÌÁÇÁ
<option>-s</option>, ÕËÁÚÙ×ÁÅÍÏÇÏ ÐÒÉ ÚÁÇÒÕÚËÅ, Á ÚÁÔÅÍ ×ÙÐÏÌÎÉÔÅ
ÔÁËÉÅ ÛÁÇÉ:</para>
<screen>&prompt.root; <userinput>fsck -p</userinput>
&prompt.root; <userinput>mount -a -t ufs</userinput> # ÄÏÓÔÕÐÎÏÓÔØ /var/crash ÄÌÑ ÚÁÐÉÓÉ
&prompt.root; <userinput>savecore /var/crash /dev/ad0s1b</userinput>
&prompt.root; <userinput>exit</userinput> # ÐÅÒÅÈÏÄ × ÍÎÏÇÏÐÏÌØÚÏ×ÁÔÅÌØÓËÉÊ ÒÅÖÉÍ</screen>
<para>üÔÉ ËÏÍÁÎÄÙ ÕËÁÚÙ×ÁÀÔ &man.savecore.8; ÉÚ×ÌÅÞØ ÄÁÍÐ ÑÄÒÁ ÉÚ
ÕÓÔÒÏÊÓÔ×Á <filename>/dev/ad0s1b</filename> É ÐÏÍÅÓÔÉÔØ ÅÇÏ
ÓÏÄÅÒÖÉÍÏÅ × ËÁÔÁÌÏÇ <filename>/var/crash</filename>. îÅ ÚÁÂÕÄØÔÅ
ÐÒÏ×ÅÒÉÔØ, ÞÔÏ × ÃÅÌÅ×ÏÍ ËÁÔÁÌÏÇÅ <filename>/var/crash</filename>
ÄÏÓÔÁÔÏÞÎÏ ÍÅÓÔÁ ÄÌÑ ÈÒÁÎÅÎÉÑ ÄÁÍÐÁ. ëÒÏÍÅ ÔÏÇÏ, ÎÅ ÚÁÂÕÄØÔÅ
ÐÒÏ×ÅÒÉÔØ ÐÒÁ×ÉÌØÎÏÓÔØ ÍÁÒÛÒÕÔÁ Ë ×ÁÛÅÍÕ ÕÓÔÒÏÊÓÔ×Õ ÐÏÄËÁÞËÉ, ÔÁË
ËÁË ÏÎ, ÓËÏÒÅÅ ×ÓÅÇÏ, ÏÔÌÉÞÁÅÔÓÑ ÏÔ
<filename>/dev/ad0s1b</filename>!</para></tip>
<para>òÅËÏÍÅÎÄÕÅÍÙÍ É ÏÐÒÅÄÅÌ£ÎÎÏ ÓÁÍÙÍ ÐÒÏÓÔÙÍ ÓÐÏÓÏÂÏÍ Á×ÔÏÍÁÔÉÚÁÃÉÉ
ÆÏÒÍÉÒÏ×ÁÎÉÑ Á×ÁÒÉÊÎÙÈ ÏÂÒÁÚÏ× Ñ×ÌÑÅÔÓÑ ÕËÁÚÁÎÉÅ ÐÅÒÅÍÅÎÎÏÊ
<varname>dumpdev</varname> × ÆÁÊÌÅ &man.rc.conf.5;.</para>
</sect2>
</sect1>
<sect1 id="kerneldebug-gdb">
<title>ïÔÌÁÄËÁ Á×ÁÒÉÊÎÏÇÏ ÏÂÒÁÚÁ ÐÁÍÑÔÉ ÑÄÒÁ ÐÒÉ ÐÏÍÏÝÉ
<command>kgdb</command>
</title>
<note>
<para>÷ ÜÔÏÍ ÒÁÚÄÅÌÅ ÏÐÉÓÙ×ÁÅÔÓÑ ÕÔÉÌÉÔÁ &man.kgdb.1;, ÐÏÓÔÁ×ÌÑÅÍÁÑ Ó
&os; 5.3 É ÂÏÌÅÅ ÐÏÚÄÎÉÍÉ ×ÅÒÓÉÑÍÉ. ÷ ÐÒÅÄÙÄÕÝÉÈ ×ÅÒÓÉÑÈ
ÄÌÑ ÞÔÅÎÉÑ ÆÁÊÌÁ Á×ÁÒÉÊÎÏÇÏ ÄÁÍÐÁ ÑÄÒÁ ÎÅÏÂÈÏÄÉÍÏ ÉÓÐÏÌØÚÏ×ÁÔØ
ËÏÍÁÎÄÕ <command>gdb -k</command>.</para>
</note>
<para>ðÏÓÌÅ ÉÚ×ÌÅÞÅÎÉÑ ÄÁÍÐÁ ÐÁÍÑÔÉ ÐÏÌÕÞÅÎÉÅ ÉÚ ÎÅÇÏ ÐÏÌÅÚÎÏÊ ÉÎÆÏÒÍÁÃÉÉ
ÄÌÑ ÒÅÛÅÎÉÑ ÐÒÏÓÔÙÈ ÐÒÏÂÌÅÍ Ñ×ÌÑÅÔÓÑ ÓÒÁ×ÎÉÔÅÌØÎÏ Ì£ÇËÏÊ ÚÁÄÁÞÅÊ. ðÅÒÅÄ
ÔÅÍ, ËÁË ÐÏÇÒÕÚÉÔØÓÑ ×Ï ×ÎÕÔÒÅÎÎÉÊ ÉÎÔÅÒÆÅÊÓ &man.kgdb.1; ÄÌÑ
ÏÔÌÁÄËÉ Á×ÁÒÉÊÎÏÇÏ ÏÂÒÁÚÁ ÐÁÍÑÔÉ, ÎÁÊÄÉÔÅ ÏÔÌÁÄÏÞÎÕÀ ×ÅÒÓÉÀ ×ÁÛÅÇÏ ÑÄÒÁ
(ÏÂÙÞÎÏ ÏÎÁ ÉÍÅÅÔ ÎÁÚ×ÁÎÉÅ <filename>kernel.debug</filename>) É ×ÙÑÓÎÉÔÅ
ÍÁÒÛÒÕÔ Ë ÆÁÊÌÁÍ ÉÓÈÏÄÎÙÈ ÔÅËÓÔÏ×, ÉÓÐÏÌØÚÏ×ÁÎÎÙÈ ÄÌÑ ÐÏÓÔÒÏÅÎÉÑ ×ÁÛÅÇÏ
ÑÄÒÁ (ÏÂÙÞÎÏ ÜÔÏ
<filename>/usr/obj/usr/src/sys/<replaceable>KERNCONF</replaceable></filename>),
ÇÄÅ × ËÁÞÅÓÔ×Å <replaceable>KERNCONF</replaceable> ×ÙÓÔÕÐÁÅÔ ÚÎÁÞÅÎÉÅ
<varname>ident</varname>, ÕËÁÚÁÎÎÏÅ ËÏÎÆÉÇÕÒÁÔÏÒÕ ÑÄÒÁ
&man.config.5;). éÍÅÑ ÎÁ ÒÕËÁÈ ÜÔÉ Ä×Á ÐÁÒÁÍÅÔÒÁ, ÎÁÞÎ£Í ÏÔÌÁÄËÕ!</para>
<para>þÔÏÂÙ ×ÏÊÔÉ × ÏÔÌÁÄÞÉË É ÎÁÞÁÔØ ÐÏÌÕÞÁÔØ ÉÎÆÏÒÍÁÃÉÀ ÉÚ ÄÁÍÐÁ,
ËÁË ÍÉÎÉÍÕÍ ÎÅÏÂÈÏÄÉÍÏ ÓÄÅÌÁÔØ ÓÌÅÄÕÀÝÉÅ ÛÁÇÉ:</para>
<screen>&prompt.root; <userinput>cd /usr/obj/usr/src/sys/<replaceable>KERNCONF</replaceable></userinput>
&prompt.root; <userinput>kgdb kernel.debug /var/crash/vmcore.0</userinput></screen>
<para>÷Ù ÍÏÖÅÔÅ ÏÔÌÁÖÉ×ÁÔØ Á×ÁÒÉÊÎÙÊ ÄÁÍÐ, ÉÓÐÏÌØÚÕÑ ÉÓÈÏÄÎÙÅ
ÔÅËÓÔÙ ÑÄÒÁ ÔÏÞÎÏ ÔÁËÖÅ, ËÁË ×Ù ÜÔÏ ÄÅÌÁÅÔÅ Ó ÌÀÂÏÊ ÄÒÕÇÏÊ
ÐÒÏÇÒÁÍÍÏÊ.</para>
<para>üÔÏÔ ÐÅÒ×ÙÊ ÄÁÍÐ ×ÚÑÔ ÉÚ ÑÄÒÁ 5.2-BETA, Á ÓÂÏÊ ÐÒÏÉÚÏÛ£Ì ÇÄÅ-ÔÏ
ÇÌÕÂÏËÏ ×ÎÕÔÒÉ ÑÄÒÁ. îÉÖÅÓÌÅÄÕÀÝÁÑ ×ÙÄÁÞÁ ÂÙÌÁ ÍÏÄÉÆÉÃÉÒÏ×ÁÎÁ, × ÎÅ£
ÓÌÅ×Á ÄÏÂÁ×ÌÅÎÙ ÎÏÍÅÒÁ ÓÔÒÏË. ðÒÉ ÐÅÒ×ÏÊ ÔÒÁÓÓÉÒÏ×ËÅ ÐÒÏ×ÅÒÑÅÔÓÑ
ÕËÁÚÁÔÅÌØ ËÏÍÁÎÄ É ×ÙÄÁ£ÔÓÑ ÏÂÒÁÔÎÁÑ ÔÒÁÓÓÉÒÏ×ËÁ. áÄÒÅÓ,
ÉÓÐÏÌØÚÕÅÍÙÊ × ÓÔÒÏËÅ 41 ÄÌÑ ËÏÍÁÎÄÙ <command>list</command>, Ñ×ÌÑÅÔÓÑ
ÕËÁÚÁÔÅÌÅÍ ËÏÍÁÎÄ É ÏÎ ÍÏÖÅÔ ÂÙÔØ ÎÁÊÄÅÎ × ÓÔÒÏËÅ 17. âÏÌØÛÉÎÓÔ×Ï
ÒÁÚÒÁÂÏÔÞÉËÏ× ÂÕÄÕÔ ÔÒÅÂÏ×ÁÔØ ÐÒÅÄÏÓÔÁ×ÌÅÎÉÑ ÉÍ ÐÏ ËÒÁÊÎÅÊ ÍÅÒÅ ÜÔÏÊ
ÉÎÆÏÒÍÁÃÉÉ, ÅÓÌÉ ×Ù ÎÅ ÍÏÖÅÔÅ ÏÔÓÌÅÄÉÔØ ÐÒÏÂÌÅÍÕ ÓÁÍÏÓÔÏÑÔÅÌØÎÏ. åÓÌÉ,
ÏÄÎÁËÏ, ×Ù ÒÅÛÉÔÅ ÐÒÏÂÌÅÍÕ, ÔÏ ÏÂÑÚÁÔÅÌØÎÏ ÄÏÂÅÊÔÅÓØ ×ËÌÀÞÅÎÉÑ ×ÁÛÅÇÏ
ÐÁÔÞÁ × ÄÅÒÅ×Ï ÉÓÈÏÄÎÙÈ ÔÅËÓÔÏ×, ÐÒÉÓÌÁ× ÅÇÏ ÞÅÒÅÚ ÓÏÏÂÝÅÎÉÅ Ï ÏÛÉÂËÅ,
ÓÐÉÓËÉ ÒÁÓÓÙÌËÉ ÉÌÉ ÄÁÖÅ ÅÇÏ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÙÍ ËÏÍÍÉÔÏÍ!</para>
<screen> 1:&prompt.root; <userinput>cd /usr/obj/usr/src/sys/<replaceable>KERNCONF</replaceable></userinput>
2:&prompt.root; <userinput>kgdb kernel.debug /var/crash/vmcore.0</userinput>
3:GNU gdb 5.2.1 (FreeBSD)
4:Copyright 2002 Free Software Foundation, Inc.
5:GDB is free software, covered by the GNU General Public License, and you are
6:welcome to change it and/or distribute copies of it under certain conditions.
7:Type "show copying" to see the conditions.
8:There is absolutely no warranty for GDB. Type "show warranty" for details.
9:This GDB was configured as "i386-undermydesk-freebsd"...
10:panic: page fault
11:panic messages:
12:---
13:Fatal trap 12: page fault while in kernel mode
14:cpuid = 0; apic id = 00
15:fault virtual address = 0x300
16:fault code: = supervisor read, page not present
17:instruction pointer = 0x8:0xc0713860
18:stack pointer = 0x10:0xdc1d0b70
19:frame pointer = 0x10:0xdc1d0b7c
20:code segment = base 0x0, limit 0xfffff, type 0x1b
21: = DPL 0, pres 1, def32 1, gran 1
22:processor eflags = resume, IOPL = 0
23:current process = 14394 (uname)
24:trap number = 12
25:panic: page fault
26 cpuid = 0;
27:Stack backtrace:
28
29:syncing disks, buffers remaining... 2199 2199 panic: mi_switch: switch in a
critical section
30:cpuid = 0;
31:Uptime: 2h43m19s
32:Dumping 255 MB
33: 16 32 48 64 80 96 112 128 144 160 176 192 208 224 240
34:---
35:Reading symbols from /boot/kernel/snd_maestro3.ko...done.
36:Loaded symbols for /boot/kernel/snd_maestro3.ko
37:Reading symbols from /boot/kernel/snd_pcm.ko...done.
38:Loaded symbols for /boot/kernel/snd_pcm.ko
39:#0 doadump () at /usr/src/sys/kern/kern_shutdown.c:240
40:240 dumping++;
41:<prompt>(kgdb)</prompt> <userinput>list *0xc0713860</userinput>
42:0xc0713860 is in lapic_ipi_wait (/usr/src/sys/i386/i386/local_apic.c:663).
43:658 incr = 0;
44:659 delay = 1;
45:660 } else
46:661 incr = 1;
47:662 for (x = 0; x < delay; x += incr) {
48:663 if ((lapic->icr_lo & APIC_DELSTAT_MASK) == APIC_DELSTAT_IDLE)
49:664 return (1);
50:665 ia32_pause();
51:666 }
52:667 return (0);
53:<prompt>(kgdb)</prompt> <userinput>backtrace</userinput>
54:#0 doadump () at /usr/src/sys/kern/kern_shutdown.c:240
55:#1 0xc055fd9b in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:372
56:#2 0xc056019d in panic () at /usr/src/sys/kern/kern_shutdown.c:550
57:#3 0xc0567ef5 in mi_switch () at /usr/src/sys/kern/kern_synch.c:470
58:#4 0xc055fa87 in boot (howto=256) at /usr/src/sys/kern/kern_shutdown.c:312
59:#5 0xc056019d in panic () at /usr/src/sys/kern/kern_shutdown.c:550
60:#6 0xc0720c66 in trap_fatal (frame=0xdc1d0b30, eva=0)
61: at /usr/src/sys/i386/i386/trap.c:821
62:#7 0xc07202b3 in trap (frame=
63: {tf_fs = -1065484264, tf_es = -1065484272, tf_ds = -1065484272, tf_edi = 1, tf_esi = 0, tf_ebp = -602076292, tf_isp = -602076324, tf_ebx = 0, tf_edx = 0, tf_ecx = 1000000, tf_eax = 243, tf_trapno = 12, tf_err = 0, tf_eip = -1066321824, tf_cs = 8, tf_eflags = 65671, tf_esp = 243, tf_ss = 0})
64: at /usr/src/sys/i386/i386/trap.c:250
65:#8 0xc070c9f8 in calltrap () at {standard input}:94
66:#9 0xc07139f3 in lapic_ipi_vectored (vector=0, dest=0)
67: at /usr/src/sys/i386/i386/local_apic.c:733
68:#10 0xc0718b23 in ipi_selected (cpus=1, ipi=1)
69: at /usr/src/sys/i386/i386/mp_machdep.c:1115
70:#11 0xc057473e in kseq_notify (ke=0xcc05e360, cpu=0)
71: at /usr/src/sys/kern/sched_ule.c:520
72:#12 0xc0575cad in sched_add (td=0xcbcf5c80)
73: at /usr/src/sys/kern/sched_ule.c:1366
74:#13 0xc05666c6 in setrunqueue (td=0xcc05e360)
75: at /usr/src/sys/kern/kern_switch.c:422
76:#14 0xc05752f4 in sched_wakeup (td=0xcbcf5c80)
77: at /usr/src/sys/kern/sched_ule.c:999
78:#15 0xc056816c in setrunnable (td=0xcbcf5c80)
79: at /usr/src/sys/kern/kern_synch.c:570
80:#16 0xc0567d53 in wakeup (ident=0xcbcf5c80)
81: at /usr/src/sys/kern/kern_synch.c:411
82:#17 0xc05490a8 in exit1 (td=0xcbcf5b40, rv=0)
83: at /usr/src/sys/kern/kern_exit.c:509
84:#18 0xc0548011 in sys_exit () at /usr/src/sys/kern/kern_exit.c:102
85:#19 0xc0720fd0 in syscall (frame=
86: {tf_fs = 47, tf_es = 47, tf_ds = 47, tf_edi = 0, tf_esi = -1, tf_ebp = -1077940712, tf_isp = -602075788, tf_ebx = 672411944, tf_edx = 10, tf_ecx = 672411600, tf_eax = 1, tf_trapno = 12, tf_err = 2, tf_eip = 671899563, tf_cs = 31, tf_eflags = 642, tf_esp = -1077940740, tf_ss = 47})
87: at /usr/src/sys/i386/i386/trap.c:1010
88:#20 0xc070ca4d in Xint0x80_syscall () at {standard input}:136
89:---Can't read userspace from dump, or kernel process---
90:<prompt>(kgdb)</prompt> <userinput>quit</userinput></screen>
<para>÷Ï ×ÔÏÒÏÊ ÔÒÁÓÓÉÒÏ×ËÅ ÉÓÐÏÌØÚÕÅÔÓÑ ÂÏÌÅÅ ÓÔÁÒÙÊ ÄÁÍÐ ÉÚ ×ÒÅÍ£Î
FreeBSD 2, ÎÏ ÏÎ ÂÏÌÅÅ ÓÌÏÖÎÙÊ É ÐÏËÁÚÙ×ÁÅÔ ÂÏÌØÛÅ ×ÏÚÍÏÖÎÏÓÔÅÊ
<command>gdb</command>. äÌÉÎÎÙÅ ÓÔÒÏËÉ ÂÙÌÉ ÕÓÅÞÅÎÙ ÒÁÄÉ ÐÏ×ÙÛÅÎÉÑ
ÞÉÔÁÂÅÌØÎÏÓÔÉ, Á ÔÁËÖÅ ÐÒÏÎÕÍÅÒÏ×ÁÎÙ ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÓÓÙÌÁÔØÓÑ ÎÁ ÎÉÈ.
ëÒÏÍÅ ÜÔÉÈ ÏÔÌÉÞÉÊ, ÜÔÏ ÒÅÁÌØÎÁÑ ÔÒÁÓÓÉÒÏ×ËÁ ÏÛÉÂËÉ, ×ÙÐÏÌÎÅÎÎÁÑ ×
ÐÒÏÃÅÓÓÅ ÒÁÚÒÁÂÏÔËÉ ËÏÎÓÏÌØÎÏÇÏ ÄÒÁÊ×ÅÒÁ pcvt.</para>
<screen> 1:Script started on Fri Dec 30 23:15:22 1994
2:&prompt.root; <userinput>cd /sys/compile/URIAH</userinput>
3:&prompt.root; <userinput>gdb -k kernel /var/crash/vmcore.1</userinput>
4:Reading symbol data from /usr/src/sys/compile/URIAH/kernel
...done.
5:IdlePTD 1f3000
6:panic: because you said to!
7:current pcb at 1e3f70
8:Reading in symbols for ../../i386/i386/machdep.c...done.
9:<prompt>(kgdb)</prompt> <userinput>backtrace</userinput>
10:#0 boot (arghowto=256) (../../i386/i386/machdep.c line 767)
11:#1 0xf0115159 in panic ()
12:#2 0xf01955bd in diediedie () (../../i386/i386/machdep.c line 698)
13:#3 0xf010185e in db_fncall ()
14:#4 0xf0101586 in db_command (-266509132, -266509516, -267381073)
15:#5 0xf0101711 in db_command_loop ()
16:#6 0xf01040a0 in db_trap ()
17:#7 0xf0192976 in kdb_trap (12, 0, -272630436, -266743723)
18:#8 0xf019d2eb in trap_fatal (...)
19:#9 0xf019ce60 in trap_pfault (...)
20:#10 0xf019cb2f in trap (...)
21:#11 0xf01932a1 in exception:calltrap ()
22:#12 0xf0191503 in cnopen (...)
23:#13 0xf0132c34 in spec_open ()
24:#14 0xf012d014 in vn_open ()
25:#15 0xf012a183 in open ()
26:#16 0xf019d4eb in syscall (...)
27:<prompt>(kgdb)</prompt> <userinput>up 10</userinput>
28:Reading in symbols for ../../i386/i386/trap.c...done.
29:#10 0xf019cb2f in trap (frame={tf_es = -260440048, tf_ds = 16, tf_\
30:edi = 3072, tf_esi = -266445372, tf_ebp = -272630356, tf_isp = -27\
31:2630396, tf_ebx = -266427884, tf_edx = 12, tf_ecx = -266427884, tf\
32:_eax = 64772224, tf_trapno = 12, tf_err = -272695296, tf_eip = -26\
33:6672343, tf_cs = -266469368, tf_eflags = 66066, tf_esp = 3072, tf_\
34:ss = -266427884}) (../../i386/i386/trap.c line 283)
35:283 (void) trap_pfault(&frame, FALSE);
36:<prompt>(kgdb)</prompt> <userinput>frame frame->tf_ebp frame->tf_eip</userinput>
37:Reading in symbols for ../../i386/isa/pcvt/pcvt_drv.c...done.
38:#0 0xf01ae729 in pcopen (dev=3072, flag=3, mode=8192, p=(struct p\
39:roc *) 0xf07c0c00) (../../i386/isa/pcvt/pcvt_drv.c line 403)
40:403 return ((*linesw[tp->t_line].l_open)(dev, tp));
41:<prompt>(kgdb)</prompt> <userinput>list</userinput>
42:398
43:399 tp->t_state |= TS_CARR_ON;
44:400 tp->t_cflag |= CLOCAL; /* cannot be a modem (:-) */
45:401
46:402 #if PCVT_NETBSD || (PCVT_FREEBSD >= 200)
47:403 return ((*linesw[tp->t_line].l_open)(dev, tp));
48:404 #else
49:405 return ((*linesw[tp->t_line].l_open)(dev, tp, flag));
50:406 #endif /* PCVT_NETBSD || (PCVT_FREEBSD >= 200) */
51:407 }
52:<prompt>(kgdb)</prompt> <userinput>print tp</userinput>
53:Reading in symbols for ../../i386/i386/cons.c...done.
54:$1 = (struct tty *) 0x1bae
55:<prompt>(kgdb)</prompt> <userinput>print tp->t_line</userinput>
56:$2 = 1767990816
57:<prompt>(kgdb)</prompt> <userinput>up</userinput>
58:#1 0xf0191503 in cnopen (dev=0x00000000, flag=3, mode=8192, p=(st\
59:ruct proc *) 0xf07c0c00) (../../i386/i386/cons.c line 126)
60: return ((*cdevsw[major(dev)].d_open)(dev, flag, mode, p));
61:<prompt>(kgdb)</prompt> <userinput>up</userinput>
62:#2 0xf0132c34 in spec_open ()
63:<prompt>(kgdb)</prompt> <userinput>up</userinput>
64:#3 0xf012d014 in vn_open ()
65:<prompt>(kgdb)</prompt> <userinput>up</userinput>
66:#4 0xf012a183 in open ()
67:<prompt>(kgdb)</prompt> <userinput>up</userinput>
68:#5 0xf019d4eb in syscall (frame={tf_es = 39, tf_ds = 39, tf_edi =\
69: 2158592, tf_esi = 0, tf_ebp = -272638436, tf_isp = -272629788, tf\
70:_ebx = 7086, tf_edx = 1, tf_ecx = 0, tf_eax = 5, tf_trapno = 582, \
71:tf_err = 582, tf_eip = 75749, tf_cs = 31, tf_eflags = 582, tf_esp \
72:= -272638456, tf_ss = 39}) (../../i386/i386/trap.c line 673)
73:673 error = (*callp->sy_call)(p, args, rval);
74:<prompt>(kgdb)</prompt> <userinput>up</userinput>
75:Initial frame selected; you cannot go up.
76:<prompt>(kgdb)</prompt> <userinput>quit</userinput></screen>
<para>ëÏÍÍÅÎÔÁÒÉÉ Ë ×ÙÛÅÐÒÉ×ÅÄÅÎÎÏÍÕ ÖÕÒÎÁÌÕ:</para>
<variablelist>
<varlistentry>
<term>ÓÔÒÏËÁ 6:</term>
<listitem>
<para>üÔÏ ÄÁÍÐ, ×ÚÑÔÙÊ ÐÒÉ ÐÏÍÏÝÉ DDB (ÓÍÏÔÒÉ ÎÉÖÅ), ÐÏÜÔÏÍÕ
ËÏÍÍÅÎÔÁÒÉÊ Ë Á×ÁÒÉÊÎÏÍÕ ÏÓÔÁÎÏ×Õ ÉÍÅÅÔ ÉÍÅÎÎÏ ×ÉÄ <quote>because
you said to!</quote> É ÔÒÁÓÓÉÒÏ×ËÁ ÓÔÅËÁ ÇÌÕÂÏËÁ; ÏÄÎÁËÏ
ÉÚÎÁÞÁÌØÎÏÊ ÐÒÉÞÉÎÏÊ ÐÅÒÅÈÏÄÁ × DDB ÂÙÌÁ Á×ÁÒÉÊÎÁÑ ÏÓÔÁÎÏ×ËÁ ÐÒÉ
×ÏÚÎÉËÎÏ×ÅÎÉÀ ÏÛÉÂËÉ ÓÔÒÁÎÉÃÙ ÐÁÍÑÔÉ.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>ÓÔÒÏËÁ 20:</term>
<listitem>
<para>üÔÏ ÍÅÓÔÏÎÁÈÏÖÄÅÎÉÅ ÆÕÎËÃÉÉ <function>trap()</function> ×
ÔÒÁÓÓÉÒÏ×ËÅ ÓÔÅËÁ.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>ÓÔÒÏËÁ 36:</term>
<listitem>
<para>ðÒÉÎÕÄÉÔÅÌØÎÏÅ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÎÏ×ÏÊ ÇÒÁÎÉÃÙ ÓÔÅËÁ; ÔÅÐÅÒØ ÜÔÏ ÎÅ
ÎÕÖÎÏ. ðÒÅÄÐÏÌÁÇÁÅÔÓÑ, ÞÔÏ ÇÒÁÎÉÃÙ ÓÔÅËÁ ÕËÁÚÙ×ÁÀÔ ÎÁ
ÐÒÁ×ÉÌØÎÏÅ ÒÁÓÐÏÌÏÖÅÎÉÅ, ÄÁÖÅ × ÓÌÕÞÁÅ Á×ÁÒÉÊÎÏÇÏ ÏÓÔÁÎÏ×Á. çÌÑÄÑ
ÎÁ ÓÔÒÏËÕ ÉÓÈÏÄÎÏÇÏ ËÏÄÁ 403, ÍÏÖÎÏ ÓËÁÚÁÔØ, ÞÔÏ ×ÅÓØÍÁ ×ÅÒÏÑÔÎÏ,
ÞÔÏ ÌÉÂÏ ×ÉÎÏ×ÁÔ ÄÏÓÔÕÐ ÐÏ ÕËÁÚÁÔÅÌÀ <quote>tp</quote>, ÌÉÂÏ ÂÙÌ
×ÙÈÏÄ ÚÁ ÇÒÁÎÉÃÙ ÍÁÓÓÉ×Á.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>ÓÔÒÏËÁ 52:</term>
<listitem>
<para>ðÏÈÏÖÅ, ÞÔÏ ×ÉÎÏ×ÁÔ ÕËÁÚÁÔÅÌØ, ÎÏ ÏÎ Ñ×ÌÑÅÔÓÑ ÄÏÐÕÓÔÉÍÙÍ
ÁÄÒÅÓÏÍ.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>ÓÔÒÏËÁ 56:</term>
<listitem>
<para>ïÄÎÁËÏ, ÏÞÅ×ÉÄÎÏ, ÞÔÏ ÏÎ ÕËÁÚÙ×ÁÅÔ ÎÁ ÍÕÓÏÒ, ÔÁË ÞÔÏ ÍÙ ÎÁÛÌÉ
ÎÁÛÕ ÏÛÉÂËÕ! (äÌÑ ÔÅÈ, ËÔÏ ÎÅ ÚÎÁËÏÍ Ó ÜÔÏÊ ÞÁÓÔØÀ ËÏÄÁ:
<literal>tp->t_line</literal> ÓÌÕÖÉÔ ÄÌÑ ÈÒÁÎÅÎÉÑ ÒÅÖÉÍÁ
ËÁÎÁÌÁ ËÏÎÓÏÌØÎÏÇÏ ÕÓÔÒÏÊÓÔ×Á, É ÜÔÏ ÄÏÌÖÎÏ ÂÙÔØ ÄÏÓÔÁÔÏÞÎÏ
ÍÁÌÅÎØËÏÅ ÃÅÌÏÅ ÞÉÓÌÏ.)</para>
</listitem>
</varlistentry>
</variablelist>
<tip>
<para>åÓÌÉ × ×ÁÛÅÊ ÓÉÓÔÅÍÅ ÒÅÇÕÌÑÒÎÏ ÐÒÏÉÓÈÏÄÑÔ Á×ÁÒÉÊÎÙÅ ÏÓÔÁÎÏ×Ù,
É ×ÁÍ ÎÅ È×ÁÔÁÅÔ ÍÅÓÔÁ ÎÁ ÄÉÓËÅ, ÕÄÁÌÅÎÉÅ ÓÔÁÒÙÈ ÆÁÊÌÏ×
<filename>vmcore</filename> × ËÁÔÁÌÏÇÅ <filename>/var/crash</filename>
ÍÏÖÅÔ ÓÜËÏÎÏÍÉÔØ ×ÁÍ ÚÎÁÞÉÔÅÌØÎÙÊ ÏÂß£Í ÄÉÓËÏ×ÏÇÏ
ÐÒÏÓÔÒÁÎÓÔ×Á!</para>
</tip>
</sect1>
<sect1 id="kerneldebug-ddd">
<title>ïÔÌÁÄËÁ Á×ÁÒÉÊÎÏÇÏ ÄÁÍÐÁ Ó ÐÏÍÏÝØÀ DDD</title>
<para>÷ÏÚÍÏÖÎÏ ÔÁËÖÅ É ÉÓÓÌÅÄÏ×ÁÎÉÅ Á×ÁÒÉÊÎÏÇÏ ÄÁÍÐÁ ÑÄÒÁ ÐÒÉ ÐÏÍÏÝÉ
ÔÁËÏÇÏ ÇÒÁÆÉÞÅÓËÏÇÏ ÏÔÌÁÄÞÉËÁ, ËÁË <command>ddd</command> (×ÁÍ
ÐÏÔÒÅÂÕÅÔÓÑ ÕÓÔÁÎÏ×ÉÔØ ÐÏÒÔ <filename
role="package">devel/ddd</filename>, ÞÔÏÂÙ
ÉÓÐÏÌØÚÏ×ÁÔØ ÏÔÌÁÄÞÉË <command>ddd</command>). äÏÂÁ×ØÔÅ
ÆÌÁÇ <option>-k</option> Ë ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÅ <command>ddd</command>,
ËÏÔÏÒÕÀ ×Ù ÏÂÙÞÎÏ ÉÓÐÏÌØÚÕÅÔÅ ÄÌÑ ÅÇÏ ×ÙÚÏ×Á. îÁÐÒÉÍÅÒ;</para>
<screen>&prompt.root; <userinput>ddd -k /var/crash/kernel.0 /var/crash/vmcore.0</userinput></screen>
<para>ðÏÓÌÅ ÜÔÏÇÏ Õ ×ÁÓ ÄÏÌÖÎÏ ÐÏÌÕÞÉÔØÓÑ ÉÓÓÌÅÄÏ×ÁÎÉÅ Á×ÁÒÉÊÎÏÇÏ ÄÁÍÐÁ
ÐÒÉ ÐÏÍÏÝÉ ÇÒÁÆÉÞÅÓËÏÇÏ ÉÎÔÅÒÆÅÊÓÁ <command>ddd</command>.</para>
</sect1>
<sect1 id="kerneldebug-post-mortem">
<title>ðÏÓÍÅÒÔÎÙÊ ÁÎÁÌÉÚ ÄÁÍÐÁ</title>
<para>þÔÏ ÄÅÌÁÔØ, ÅÓÌÉ ÑÄÒÏ Á×ÁÒÉÊÎÏ ÚÁ×ÅÒÛÁÅÔ ÒÁÂÏÔÕ, ÈÏÔÑ ÜÔÏÇÏ ×Ù ÎÅ
ÈÏÔÅÌÉ É ÐÏÜÔÏÍÕ ËÏÍÁÎÄÏÊ <command>config -g</command> ÅÇÏ ÎÅ
ËÏÍÐÉÌÉÒÏ×ÁÌÉ? úÄÅÓØ ÎÅ ×Ó£ ÅÝ£ ÐÏÔÅÒÑÎÏ. îÅ ÐÁÎÉËÕÊÔÅ!</para>
<para>ëÏÎÅÞÎÏ, ×ÁÍ ÎÕÖÎÏ ×ËÌÀÞÉÔØ ÓÏÚÄÁÎÉÅ Á×ÁÒÉÊÎÙÈ ÄÁÍÐÏ×. óÍÏÔÒÉÔÅ
×ÙÛÅ, ÞÔÏ ×Ù ÄÏÌÖÎÙ ÄÌÑ ÜÔÏÇÏ ÓÄÅÌÁÔØ.</para>
<para>ðÅÒÅÊÄÉÔÅ × ËÁÔÁÌÏÇ ËÏÎÆÉÇÕÒÁÃÉÉ ÑÄÒÁ
(<filename>/usr/src/sys/<replaceable>arch</replaceable>/conf</filename>)
É ÏÔÒÅÄÁËÔÉÒÕÊÔÅ ×ÁÛ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÊ ÆÁÊÌ. òÁÓËÏÍÍÅÎÔÉÒÕÊÔÅ (ÉÌÉ
ÄÏÂÁ×ØÔÅ, ÅÓÌÉ ÏÎÁ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ) ÔÁËÕÀ ÓÔÒÏËÕ:</para>
<programlisting>makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols</programlisting>
<para>ðÅÒÅÓÔÒÏÊÔÅ ÑÄÒÏ. éÚ-ÚÁ ÉÚÍÅÎÅÎÉÑ ÍÅÔËÉ ×ÒÅÍÅÎÉ × Makefile ÂÕÄÕÔ
ÐÅÒÅÓÔÒÏÅÎÙ É ÎÅËÏÔÏÒÙÅ ÄÒÕÇÉÅ ÏÂßÅËÔÎÙÅ ÆÁÊÌÙ, ÎÁÐÒÉÍÅÒ,
<filename>trap.o</filename>. ë ÎÅËÏÔÏÒÏÍÕ ÓÞÁÓÔØÀ, ÄÏÂÁ×ÌÅÎÉÅ ÏÐÃÉÉ
<option>-g</option> ÎÅ ÉÚÍÅÎÉÔ ×ÓÅ É ×ÓÑ × ÇÅÎÅÒÉÒÕÅÍÏÍ ËÏÄÅ, ÔÁË ÞÔÏ
× ËÏÎÃÅ ËÏÎÃÏ× ×Ù ÐÏÌÕÞÉÔÅ ÎÏ×ÏÅ ÑÄÒÏ Ó ÔÅÍ ÖÅ ËÏÄÏÍ, ÞÔÏ É ÓÂÏÑÝÅÅ
ÑÄÒÏ, ÎÏ Ó ÏÔÌÁÄÏÞÎÏÊ ÉÎÆÏÒÍÁÃÉÅÊ. ðÏ ËÒÁÊÎÅÊ ÍÅÒÅ,
×Ù ÍÏÖÅÔÅ ÓÒÁ×ÎÉÔØ ÓÔÁÒÙÊ É ÎÏ×ÙÊ ÒÁÚÍÅÒÙ ÑÄÅÒ ËÏÍÁÎÄÏÊ &man.size.1;.
åÓÌÉ ÏÎÉ ÎÅ ÓÏ×ÐÁÄÁÀÔ, ÔÏ ×ÁÍ ÐÒÉÄÅÔÓÑ ÏÔËÁÚÁÔØÓÑ ÏÔ ×ÁÛÅÊ
ÚÁÔÅÉ.</para>
<para>éÓÓÌÅÄÕÊÔÅ ÄÁÍÐ ÔÁË, ËÁË ÜÔÏ ÏÐÉÓÁÎÏ ×ÙÛÅ. ïÔÌÁÄÏÞÎÏÊ ÉÎÆÏÒÍÁÃÉÉ
ÍÏÖÅÔ ÎÅ È×ÁÔÁÔØ × ÎÅËÏÔÏÒÙÈ ÍÅÓÔÁÈ, ËÁË ÜÔÏ ÍÏÖÎÏ ×ÉÄÅÔØ × ÔÒÁÓÓÉÒÏ×ËÅ
ÓÔÅËÁ ÐÒÉÍÅÒÁ ×ÙÛÅ, ËÏÇÄÁ ÎÅËÏÔÏÒÙÅ ÆÕÎËÃÉÉ ×Ù×ÏÄÑÔÓÑ ÂÅÚ ÎÏÍÅÒÏ× ÓÔÒÏË
É ÓÐÉÓËÁ ÁÒÇÕÍÅÎÔÏ×. åÓÌÉ ×ÁÍ ÎÕÖÎÏ ÂÏÌØÛÅ ÏÔÌÁÄÏÞÎÏÊ ÉÎÆÏÒÍÁÃÉÉ,
ÕÄÁÌÉÔÅ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÅ ÏÂßÅËÔÎÙÅ ÆÁÊÌÙ, ÓÎÏ×Á ÐÅÒÅËÏÍÐÉÌÉÒÕÊÔÅ ÑÄÒÏ É
ÐÏ×ÔÏÒÉÔÅ ÓÅÁÎÓ ÒÁÂÏÔÙ <command>gdb <option>-k</option></command>,
ÐÏËÁ ÎÅ ÐÏÌÕÞÉÔÅ ÄÏÓÔÁÔÏÞÎÏ ÐÏÄÒÏÂÎÕÀ ÉÎÆÏÒÍÁÃÉÀ.</para>
<para>îÅ ÇÁÒÁÎÔÉÒÕÅÔÓÑ, ÞÔÏ ×Ó£ ÜÔÏ ÂÕÄÅÔ ÒÁÂÏÔÁÔØ, ÏÄÎÁËÏ × ÂÏÌØÛÉÎÓÔ×Å
ÓÌÕÞÁÅ× ×Ó£ ÒÁÂÏÔÁÅÔ ÐÒÅËÒÁÓÎÏ.</para>
</sect1>
<sect1 id="kerneldebug-online-ddb">
<title>ïÔÌÁÄËÁ ÑÄÒÁ × ÒÅÖÉÍÅ ÒÅÁÌØÎÏÇÏ ×ÒÅÍÅÎÉ Ó ÐÏÍÏÝØÀ DDB</title>
<para>èÏÔÑ <command>gdb <option>-k</option></command> Ñ×ÌÑÅÔÓÑ ÏÔÌÁÄÞÉËÏÍ
ÎÅ ÒÅÁÌØÎÏÇÏ ×ÒÅÍÅÎÉ Ó ×ÙÓÏËÏÕÒÏ×ÎÅ×ÙÍ ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÍ ÉÎÔÅÒÆÅÊÓÏÍ,
ÅÓÔØ ÎÅÓËÏÌØËÏ ×ÅÝÅÊ, ËÏÔÏÒÙÅ ÏÎ ÓÄÅÌÁÔØ ÎÅ ÓÍÏÖÅÔ. óÁÍÙÍÉ ×ÁÖÎÙÍÉ ÉÚ
ÎÉÈ Ñ×ÌÑÀÔÓÑ ÔÏÞËÉ ÏÓÔÁÎÏ×Á É ÐÏÛÁÇÏ×ÏÅ ×ÙÐÏÌÎÅÎÉÅ ËÏÄÁ ÑÄÒÁ.</para>
<para>åÓÌÉ ×ÁÍ ÎÕÖÎÏ ×ÙÐÏÌÎÑÔØ ÎÉÚËÏÕÒÏ×ÎÅ×ÕÀ ÏÔÌÁÄËÕ ×ÁÛÅÇÏ ÑÄÒÁ, ÔÏ ÎÁ
ÜÔÏÔ ÓÌÕÞÁÊ ÉÍÅÅÔÓÑ ÏÔÌÁÄÞÉË ÒÅÁÌØÎÏÇÏ ×ÒÅÍÅÎÉ, ËÏÔÏÒÙÊ ÎÁÚÙ×ÁÅÔÓÑ DDB.
ïÎ ÐÏÚ×ÏÌÑÅÔ ÕÓÔÁÎÁ×ÌÉ×ÁÔØ ÔÏÞËÉ ÏÓÔÁÎÏ×Á, ×ÙÐÏÌÎÑÔØ ÆÕÎËÃÉÉ ÑÄÒÁ ÐÏ
ÛÁÇÁÍ, ÉÓÓÌÅÄÏ×ÁÔØ É ÉÚÍÅÎÑÔØ ÐÅÒÅÍÅÎÎÙÅ ÑÄÒÁ É ÐÒÏÞÅÅ. ïÄÎÁËÏ ÏÎ ÎÅ
ÍÏÖÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÉÓÈÏÄÎÙÅ ÔÅËÓÔÙ ÑÄÒÁ É ÉÍÅÅÔ ÄÏÓÔÕÐ ÔÏÌØËÏ Ë
ÇÌÏÂÁÌØÎÙÍ É ÓÔÁÔÉÞÅÓËÉÍ ÓÉÍ×ÏÌÁÍ, Á ÎÅ ËÏ ×ÓÅÊ ÏÔÌÁÄÏÞÎÏÊ ÉÎÆÏÒÍÁÃÉÉ,
ËÁË × <command>gdb</command>.</para>
<para>þÔÏÂÙ ÏÔËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ ×ÁÛÅ ÑÄÒÏ ÄÌÑ ×ËÌÀÞÅÎÉÑ DDB, ÄÏÂÁ×ØÔÅ
ÓÔÒÏÞËÕ Ó ÐÁÒÁÍÅÔÒÏÍ
<programlisting>options DDB</programlisting>
× ×ÁÛ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÊ ÆÁÊÌ, É ÐÅÒÅÓÔÒÏÊÔÅ ÑÄÒÏ. (ïÂÒÁÔÉÔÅÓØ Ë <ulink
url="&url.books.handbook;/index.html">òÕËÏ×ÏÄÓÔ×Õ ÐÏ FreeBSD</ulink>
ÄÌÑ ×ÙÑÓÎÅÎÉÑ ÐÏÄÒÏÂÎÏÓÔÅÊ Ï ËÏÎÆÉÇÕÒÁÃÉÉ ÑÄÒÁ FreeBSD).</para>
<note>
<para>åÓÌÉ Õ ×ÁÓ ÕÓÔÁÒÅ×ÛÁÑ ×ÅÒÓÉÑ ÚÁÇÒÕÚÏÞÎÙÈ ÂÌÏËÏ×,
ÔÏ ÏÔÌÁÄÏÞÎÁÑ ÉÎÆÏÒÍÁÃÉÑ ÍÏÖÅÔ ÏËÁÚÁÔØÓÑ ÎÅ ÚÁÇÒÕÖÅÎÎÏÊ. ïÂÎÏ×ÉÔÅ
ÂÌÏËÉ ÚÁÇÒÕÚËÉ; ÓÁÍÙÅ ÎÏ×ÙÅ ÚÁÇÒÕÖÁÀÔ ÓÉÍ×ÏÌÙ ÄÌÑ DDB
Á×ÔÏÍÁÔÉÞÅÓËÉ.</para>
</note>
<para>ðÏÓÌÅ ÔÏÇÏ, ËÁË ÑÄÒÏ Ó DDB ÚÁÐÕÝÅÎÏ, ÅÓÔØ ÎÅÓËÏÌØËÏ ÓÐÏÓÏÂÏ× ×ÏÊÔÉ
× DDB. ðÅÒ×ÙÊ, É ÓÁÍÙÊ ÐÒÏÓÔÏÊ, ÓÐÏÓÏ ÚÁËÌÀÞÁÅÔÓÑ × ÎÁÂÏÒÅ ÆÌÁÇÁ
ÚÁÇÒÕÚËÉ <option>-d</option> ÐÒÑÍÏ × ÐÒÉÇÌÁÛÅÎÉÉ ÚÁÇÒÕÚÞÉËÁ. ñÄÒÏ
ÂÕÄÅÔ ÚÁÐÕÝÅÎÏ × ÒÅÖÉÍÅ ÏÔÌÁÄËÉ É ×ÏÊÄÅÔ × DDB ÄÏ ×ÙÐÏÌÎÅÎÉÑ ÐÒÏÃÅÄÕÒÙ
ÒÁÓÐÏÚÎÁ×ÁÎÉÑ ËÁËÉÈ ÂÙ ÔÏ ÎÉ ÂÙÌÏ ÕÓÔÒÏÊÓÔ×. ðÏÜÔÏÍÕ ×Ù ÍÏÖÅÔÅ
×ÙÐÏÌÎÉÔØ ÏÔÌÁÄËÕ ÄÁÖÅ ÆÕÎËÃÉÊ ÒÁÓÐÏÚÎÁ×ÁÎÉÑ/ÐÒÉÓÏÅÄÉÎÅÎÉÑ
ÕÓÔÒÏÊÓÔ×.</para>
<para>÷ÔÏÒÙÍ ÓÐÏÓÏÂÏÍ Ñ×ÌÑÅÔÓÑ ÐÅÒÅÈÏÄ × ÒÅÖÉÍ ÏÔÌÁÄÞÉËÁ ÓÒÁÚÕ ÐÏÓÌÅ
ÚÁÇÒÕÚËÉ ÓÉÓÔÅÍÙ. åÓÔØ Ä×Á ÐÒÏÓÔÙÈ ÓÐÏÓÏÂÁ ÜÔÏÇÏ ÄÏÂÉÔØÓÑ. åÓÌÉ ×Ù
ÈÏÔÉÔÅ ÐÅÒÅÊÔÉ × ÏÔÌÁÄÞÉË ÉÚ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ, ÐÒÏÓÔÏ ÎÁÂÅÒÉÔÅ
ËÏÍÁÎÄÕ:</para>
<screen>&prompt.root; <userinput>sysctl debug.enter_debugger=ddb</userinput></screen>
<para>ìÉÂÏ, ÅÓÌÉ ×Ù ÒÁÂÏÔÁÅÔÅ ÚÁ ÓÉÓÔÅÍÎÏÊ ËÏÎÓÏÌØÀ, ÍÏÖÅÔÅ
×ÏÓÐÏÌØÚÏ×ÁÔØÓÑ ÏÐÒÅÄÅÌÅÎÎÏÊ ËÏÍÂÉÎÁÃÉÅÊ ËÌÁ×ÉÛ. ðÏ ÕÍÏÌÞÁÎÉÀ
ÄÌÑ ÐÅÒÅÈÏÄÁ × ÏÔÌÁÄÞÉË ÉÓÐÏÌØÚÕÅÔÓÑ ËÏÍÂÉÎÁÃÉÑ <keycombo
action="simul"><keycap>Ctrl</keycap> <keycap>Alt</keycap>
<keycap>ESC</keycap></keycombo>. äÌÑ ÄÒÁÊ×ÅÒÁ syscons ÜÔÁ
ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ÍÏÖÅÔ ÂÙÔØ ÉÚÍÅÎÅÎÁ, É × ÎÅËÏÔÏÒÙÈ ÒÁÓÐÒÏÓÔÒÁÎÑÅÍÙÈ
ÒÁÓËÌÁÄËÁÈ ÜÔÏ ÓÄÅÌÁÎÏ, ÔÁË ÞÔÏ ÏÂÑÚÁÔÅÌØÎÏ ×ÙÑÓÎÉÔÅ ÐÒÁ×ÉÌØÎÕÀ
ËÏÍÂÉÎÁÃÉÀ. äÌÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÙÈ ËÏÎÓÏÌÅÊ ÉÍÅÅÔÓÑ ÐÁÒÁÍÅÔÒ,
ÐÏÚ×ÏÌÑÀÝÉÊ ÉÓÐÏÌØÚÏ×ÁÔØ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ BREAK ÎÁ ËÁÎÁÌÅ ËÏÎÓÏÌÉ ÄÌÑ
×ÈÏÄÁ × DDB (<literal>options BREAK_TO_DEBUGGER</literal> ×
ËÏÎÆÉÇÕÒÁÃÉÏÎÎÏÍ ÆÁÊÌÅ ÑÄÒÁ). ðÏ ÕÍÏÌÞÁÎÉÀ ÜÔÏÇÏ ÎÅ ÄÅÌÁÅÔÓÑ, ÔÁË ËÁË
ÓÕÝÅÓÔ×ÕÅÔ ÍÎÏÖÅÓÔ×Ï ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÙÈ ÁÄÁÐÔÅÒÏ×, ËÏÔÏÒÙÅ ÏÛÉÂÏÞÎÏ
ÇÅÎÅÒÉÒÕÀÔ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ BREAK, Ë ÐÒÉÍÅÒÕ, ÐÒÉ ÏÔËÌÀÞÅÎÉÉ
ËÁÂÅÌÑ.</para>
<para>ôÒÅÔÉÊ ÓÐÏÓÏ ÚÁËÌÀÞÁÅÔÓÑ ×Ï ×ÈÏÄÅ × DDB ÐÒÉ ×ÏÚÎÉËÎÏ×ÅÎÉÉ
ÌÀÂÏÊ Á×ÁÒÉÊÎÏÊ ÓÉÔÕÁÃÉÉ, ÅÓÌÉ ÑÄÒÏ ÅÇÏ ÉÓÐÏÌØÚÕÅÔ. ðÏ ÜÔÏÊ ÐÒÉÞÉÎÅ
ÎÅ ÏÞÅÎØ ÕÍÎÏ ËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ ÑÄÒÏ Ó DDB ÄÌÑ ÍÁÛÉÎÙ, ËÏÔÏÒÁÑ ÒÁÂÏÔÁÅÔ
ÂÅÚ ÐÒÉÓÍÏÔÒÁ.</para>
<para>ëÏÍÁÎÄÙ DDB ÐÒÉÍÅÒÎÏ ÐÏ×ÔÏÒÑÀÔ ÎÅËÏÔÏÒÙÅ ËÏÍÁÎÄÙ
<command>gdb</command>. ðÅÒ×ÙÍ ÄÅÌÏÍ ×ÁÍ, ÎÁ×ÅÒÎÏÅ, ÎÕÖÎÏ ÚÁÄÁÔØ ÔÏÞËÕ
ÏÓÔÁÎÏ×Á:</para>
<screen>
<userinput>b function-name</userinput>
<userinput>b address</userinput>
</screen>
<para>úÎÁÞÅÎÉÑ ÐÏ ÕÍÏÌÞÁÎÉÀ ×ÏÓÐÒÉÎÉÍÁÀÔÓÑ × ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÍ ×ÉÄÅ, ÎÏ
ÞÔÏÂÙ ÏÔÌÉÞÁÔØ ÉÈ ÏÔ ÉÍÅÎ ÓÉÍ×ÏÌÏ×; ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÙÅ ÞÉÓÌÁ,
ÎÁÞÉÎÁÀÝÉÅÓÑ Ó ÂÕË× <literal>a-f</literal>, ÄÏÌÖÎÙ ÐÒÅÄ×ÁÒÑÔØÓÑ
ÓÉÍ×ÏÌÁÍÉ <literal>0x</literal> (ÜÔÏ ÏÐÃÉÏÎÁÌØÎÏ ÄÌÑ ÄÒÕÇÉÈ ÞÉÓÅÌ).
òÁÚÒÅÛÅÎÙ ÐÒÏÓÔÙÅ ×ÙÒÁÖÅÎÉÑ, ÎÁÐÒÉÍÅÒ:
<literal>function-name + 0x103</literal>.</para>
<para>þÔÏÂÙ ÐÒÏÄÏÌÖÉÔØ ÒÁÂÏÔÕ ÐÒÅÒ×ÁÎÎÏÇÏ ÑÄÒÁ, ÐÒÏÓÔÏ ÎÁÂÅÒÉÔÅ:</para>
<screen><userinput>c</userinput></screen>
<para>þÔÏÂÙ ÐÏÌÕÞÉÔØ ÔÒÁÓÓÉÒÏ×ËÕ ÓÔÅËÁ, ÚÁÄÁÊÔÅ:</para>
<screen><userinput>trace</userinput></screen>
<note>
<para>úÁÍÅÔØÔÅ, ÞÔÏ ÐÒÉ ×ÈÏÄÅ × DDB ÐÏ ÓÐÅÃÉÁÌØÎÏÊ ËÏÍÂÉÎÁÃÉÉ, ÑÄÒÏ
× ÄÁÎÎÙÊ ÍÏÍÅÎÔ ÏÂÓÌÕÖÉ×ÁÅÔ ÐÒÅÒÙ×ÁÎÉÅ, ÔÁË ÞÔÏ ÔÒÁÓÓÉÒÏ×ËÁ ÓÔÅËÁ
ÍÏÖÅÔ ÎÅ ÄÁÔØ ×ÁÍ ÍÎÏÇÏ ÉÎÆÏÒÍÁÃÉÉ.</para>
</note>
<para>åÓÌÉ ×Ù ÈÏÔÉÔÅ ÕÂÒÁÔØ ÔÏÞËÕ ÏÓÔÁÎÏ×Á, ××ÅÄÉÔÅ</para>
<screen>
<userinput>del</userinput>
<userinput>del address-expression</userinput>
</screen>
<para>÷ ÐÅÒ×ÏÍ ×ÁÒÉÁÎÔÅ ËÏÍÁÎÄÁ ÂÕÄÅÔ ÉÓÐÏÌÎÅÎÁ ÓÒÁÚÕ ÖÅ ÐÏ ÄÏÓÔÉÖÅÎÉÉ
ÔÏÞËÉ ÏÓÔÁÎÏ×Á, Á ÔÅËÕÝÁÑ ÔÏÞËÁ ÏÓÔÁÎÏ×Á ÂÕÄÅÔ ÕÄÁÌÅÎÁ. ÷Ï ×ÔÏÒÏÊ
ÆÏÒÍÅ ÍÏÖÎÏ ÕÄÁÌÉÔØ ÌÀÂÕÀ ÔÏÞËÕ ÏÓÔÁÎÏ×Á, ÏÄÎÁËÏ ×ÁÍ ÎÕÖÎÏ ÂÕÄÅÔ
ÕËÁÚÁÔØ ÅÅ ÔÏÞÎÙÊ ÁÄÒÅÓ; ÅÇÏ ÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÉÚ:</para>
<screen><userinput>show b</userinput></screen>
<para>þÔÏÂÙ ×ÙÐÏÌÎÉÔØ ÏÄÉÎ ÛÁÇ ÑÄÒÁ, ÐÏÐÒÏÂÕÊÔÅ:</para>
<screen><userinput>s</userinput></screen>
<para>ðÒÉ ÜÔÏÍ ÂÕÄÅÔ ÏÓÕÝÅÓÔ×ÌÑÔØÓÑ ÐÏÛÁÇÏ×ÏÅ ×ÙÐÏÌÎÅÎÉÅ ÆÕÎËÃÉÊ, ÏÄÎÁËÏ
×Ù ÍÏÖÅÔÅ ÔÒÁÓÓÉÒÏ×ÁÔØ ÉÈ Ó ÐÏÍÏÝØÀ DDB, ÐÏËÁ ÎÅ ÂÕÄÅÔ ÄÏÓÔÉÇÎÕÔÏ
ÓÏÏÔ×ÅÔÓÔ×ÉÅ ×ÏÚ×ÒÁÝÁÅÍÏÍÕ ÚÎÁÞÅÎÉÀ:</para>
<screen><userinput>n</userinput></screen>
<note>
<para>üÔÏ ÏÔÌÉÞÁÅÔÓÑ ÏÔ ËÏÍÁÎÄÙ <command>next</command> ÏÔÌÁÄÞÉËÁ
<command>gdb</command>; ÜÔÏ ÐÏÈÏÖÅ ÎÁ ËÏÍÁÎÄÕ <command>gdb</command>
<command>finish</command>.</para>
</note>
<para>þÔÏÂÙ ×Ù×ÏÄÉÔØ ÚÎÁÞÅÎÉÑ × ÐÁÍÑÔÉ, ÉÓÐÏÌØÚÕÊÔÅ, (Ë ÐÒÉÍÅÒÕ):
<screen>
<userinput>x/wx 0xf0133fe0,40</userinput>
<userinput>x/hd db_symtab_space</userinput>
<userinput>x/bc termbuf,10</userinput>
<userinput>x/s stringbuf</userinput>
</screen>
ÄÌÑ ÄÏÓÔÕÐÁ Ë ÄÁÎÎÙÍ ÔÉÐÁ ÓÌÏ×Ï/ÐÏÌÕÓÌÏ×Ï/ÂÁÊÔ É ×Ù×ÏÄÁ ×
ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÍ/ÄÅÓÑÔÉÞÎÏÍ/ÓÉÍ×ÏÌØÎÏÍ ×ÉÄÅ. þÉÓÌÏ ÐÏÓÌÅ ÚÁÐÑÔÏÊ
ÏÚÎÁÞÁÅÔ ÓÞÅÔÞÉË ÏÂßÅËÔÏ×. þÔÏÂÙ ×Ù×ÅÓÔÉ ÓÌÅÄÕÀÝÉÅ 0x10 ÏÂßÅËÔÏ×,
ÐÒÏÓÔÏ ÕËÁÖÉÔÅ:</para>
<screen><userinput>x ,10</userinput></screen>
<para>ðÏÄÏÂÎÙÍ ÖÅ ÏÂÒÁÚÏÍ ÉÓÐÏÌØÚÕÊÔÅ
<screen><userinput>x/ia foofunc,10</userinput></screen>
ÄÌÑ ÄÉÚÁÓÓÅÍÂÌÉÒÏ×ÁÎÉÑ É ×Ù×ÏÄÁ ÐÅÒ×ÙÈ 0x10 ÉÎÓÔÒÕËÃÉÊ ÆÕÎËÃÉÉ
<function>foofunc</function> ×ÍÅÓÔÅ Ó ÉÈ ÁÄÒÅÓÏÍ ÏÔÎÏÓÉÔÅÌØÎÏ
ÎÁÞÁÌÁ <function>foofunc</function>.</para>
<para>þÔÏÂÙ ÉÚÍÅÎÉÔØ ÚÎÁÞÅÎÉÑ × ÐÁÍÑÔÉ, ÉÓÐÏÌØÚÕÊÔÅ ËÏÍÁÎÄÕ write:</para>
<screen>
<userinput>w/b termbuf 0xa 0xb 0</userinput>
<userinput>w/w 0xf0010030 0 0</userinput>
</screen>
<para>íÏÄÉÆÉËÁÔÏÒ ËÏÍÁÎÄÙ
(<literal>b</literal>/<literal>h</literal>/<literal>w</literal>)
ÕËÁÚÙ×ÁÅÔ ÎÁ ÒÁÚÍÅÒ ÚÁÐÉÓÙ×ÁÅÍÙÈ ÄÁÎÎÙÈ, ÐÅÒ×ÏÅ ÓÌÅÄÕÀÝÅÅ ÚÁ ÎÉÍ
×ÙÒÁÖÅÎÉÅ Ñ×ÌÑÅÔÓÑ ÁÄÒÅÓÏÍ ÄÌÑ ÚÁÐÉÓÉ, Á ÏÓÔÁ×ÛÁÑÓÑ ÞÁÓÔØ
ÉÎÔÅÒÐÒÅÔÉÒÕÅÔÓÑ ËÁË ÄÁÎÎÙÅ ÄÌÑ ÚÁÐÉÓÉ × ÄÏÓÔÕÐÎÙÅ ÏÂÌÁÓÔÉ
ÐÁÍÑÔÉ.</para>
<para>åÓÌÉ ×ÁÍ ÎÕÖÎÏ ÕÚÎÁÔØ ÔÅËÕÝÅÅ ÓÏÄÅÒÖÉÍÏÅ ÒÅÇÉÓÔÒÏ×,
ÉÓÐÏÌØÚÕÊÔÅ:</para>
<screen><userinput>show reg</userinput></screen>
<para>áÌØÔÅÒÎÁÔÉ×ÎÏ ×Ù ÍÏÖÅÔÅ ×Ù×ÅÓÔÉ ÓÏÄÅÒÖÉÍÏÅ ÏÄÎÏÇÏ ÒÅÇÉÓÔÒÁ ÐÏ
ËÏÍÁÎÄÅ, ÓËÁÖÅÍ,
<screen><userinput>p $eax</userinput></screen>
É ÉÚÍÅÎÉÔØ ÅÇÏ ÐÏ:</para>
<screen><userinput>set $eax new-value</userinput></screen>
<para>åÓÌÉ ×ÁÍ ÎÕÖÎÏ ×ÙÚ×ÁÔØ ÎÅËÏÔÏÒÕÀ ÆÕÎËÃÉÀ ÑÄÒÁ ÉÚ DDB, ÐÒÏÓÔÏ
ÕËÁÖÉÔÅ:</para>
<screen><userinput>call func(arg1, arg2, ...)</userinput></screen>
<para>âÕÄÅÔ ×Ù×ÅÄÅÎÏ ×ÏÚ×ÒÁÝÁÅÍÏÅ ÚÎÁÞÅÎÉÅ.</para>
<para>äÌÑ ×Ù×ÏÄÁ ÓÕÍÍÁÒÎÏÊ ÓÔÁÔÉÓÔÉËÉ ÐÏ ×ÓÅÍ ÒÁÂÏÔÁÀÝÉÍ ÐÒÏÃÅÓÓÁÍ ×
ÓÔÉÌÅ ËÏÍÁÎÄÙ &man.ps.1; ×ÏÓÐÏÌØÚÕÊÔÅÓØ ÔÁËÏÊ ËÏÍÁÎÄÏÊ:</para>
<screen><userinput>ps</userinput></screen>
<para>ôÅÐÅÒØ ×Ù ÕÚÎÁÌÉ, ÐÏÞÅÍÕ ÑÄÒÏ ÒÁÂÏÔÁÅÔ Ó ÏÛÉÂËÁÍÉ É ÈÏÔÉÔÅ
×ÙÐÏÌÎÉÔØ ÐÅÒÅÚÁÇÒÕÚËÕ. úÁÐÏÍÎÉÔÅ, ÞÔÏ × ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔ ×ÌÉÑÎÉÑ
ÐÒÅÄÙÄÕÝÉÈ ÏÛÉÂÏË, ÎÅ ×ÓÅ ÞÁÓÔÉ ÑÄÒÁ ÍÏÇÕÔ ÒÁÂÏÔÁÔØ ÔÁË, ËÁË ÏÖÉÄÁÅÔÓÑ.
÷ÙÐÏÌÎÉÔÅ ÏÄÎÏ ÉÚ ÓÌÅÄÕÀÝÉÈ ÄÅÊÓÔ×ÉÊ ÄÌÑ ÚÁËÒÙÔÉÑ É ÐÅÒÅÚÁÇÒÕÚËÉ ×ÁÛÅÊ
ÓÉÓÔÅÍÙ:</para>
<screen><userinput>panic</userinput></screen>
<para>üÔÏ ÐÒÉ×ÅÄÅÔ Ë ÓÏÚÄÁÎÉÀ ÄÁÍÐÁ ÑÄÒÁ É ÐÅÒÅÚÁÇÒÕÚËÅ, ÔÁË ÞÔÏ ÐÏÚÖÅ
×Ù ÍÏÖÅÔÅ ÐÒÏÁÎÁÌÉÚÉÒÏ×ÁÔØ ÄÁÍÐ ÎÁ ÂÏÌÅÅ ×ÙÓÏËÏÍ ÕÒÏ×ÎÅ ÐÒÉ ÐÏÍÏÝÉ
<command>gdb</command>. ëÁË ÐÒÁ×ÉÌÏ, ÜÔÁ ËÏÍÁÎÄÁ ÄÏÌÖÎÁ ÓÌÅÄÏ×ÁÔØ ÚÁ
ÄÒÕÇÏÊ ËÏÍÁÎÄÏÊ <command>continue</command>.</para>
<screen><userinput>call boot(0)</userinput></screen>
<para>üÔÏ ÍÏÖÅÔ ÏËÁÚÁÔØÓÑ ÈÏÒÏÛÉÍ ÓÐÏÓÏÂÏÍ ÄÌÑ ËÏÒÒÅËÔÎÏÇÏ ÚÁËÒÙÔÉÑ
ÒÁÂÏÔÁÀÝÅÊ ÓÉÓÔÅÍÙ, <function>sync()</function> ÄÌÑ ×ÓÅÈ ÄÉÓËÏ× É
ÎÁÐÏÓÌÅÄÏË ÐÅÒÅÚÁÇÒÕÚËÁ. ðÏËÁ ÉÎÔÅÒÆÅÊÓÙ ÄÉÓËÁ É ÆÁÊÌÏ×ÏÊ ÓÉÓÔÅÍÙ
× ÑÄÒÅ ÎÅ ÐÏ×ÒÅÖÄÅÎÙ, ÜÔÏ ÍÏÖÅÔ ÂÙÔØ ÓÁÍÙÍ ÐÒÁ×ÉÌØÎÙÍ ÓÐÏÓÏÂÏÍ ÚÁËÒÙÔÉÑ
ÓÉÓÔÅÍÙ.</para>
<screen><userinput>call cpu_reset()</userinput></screen>
<para>üÔÏ ÐÏÓÌÅÄÎÅÅ ÓÒÅÄÓÔ×Ï ÐÒÉ Á×ÁÒÉÉ É ÐÒÁËÔÉÞÅÓËÉ ÔÏ ÖÅ ÓÁÍÏÅ, ÞÔÏ
ÎÁÖÁÔÉÅ âÏÌØÛÏÊ ëÒÁÓÎÏÊ ëÎÏÐËÉ.</para>
<para>åÓÌÉ ×ÁÍ ÎÕÖÅÎ ËÒÁÔËÉÊ ÓÐÒÁ×ÏÞÎÉË ÐÏ ËÏÍÁÎÄÁÍ, ÐÒÏÓÔÏ
ÎÁÂÅÒÉÔÅ:</para>
<screen><userinput>help</userinput></screen>
<para>ïÄÎÁËÏ ÎÁÓÔÏÑÔÅÌØÎÏ ÒÅËÏÍÅÎÄÕÅÍ ÏÔÐÅÞÁÔÁÔØ ËÏÐÉÀ ÓÔÒÁÎÉÃÙ
ÓÐÒÁ×ÏÞÎÉËÁ ÐÏ &man.ddb.4; ÐÒÉ ÐÏÄÇÏÔÏ×ËÅ Ë ÓÅÁÎÓÕ ÏÔÌÁÄËÉ. ðÏÍÎÉÔÅ,
ÞÔÏ ÔÒÕÄÎÏ ÞÉÔÁÔØ ÏÎÌÁÊÎÏ×ÏÅ ÒÕËÏ×ÏÄÓÔ×Ï ÐÒÉ ÐÏÛÁÇÏ×ÏÍ ×ÙÐÏÌÎÅÎÉÉ
ÑÄÒÁ.</para>
</sect1>
<sect1 id="kerneldebug-online-gdb">
<title>ïÔÌÁÄËÁ ÑÄÒÁ × ÒÅÖÉÍÅ ÒÅÁÌØÎÏÇÏ ×ÒÅÍÅÎÉ ÐÒÉ ÐÏÍÏÝÉ ÕÄÁÌ£ÎÎÏÇÏ
GDB</title>
<para>üÔÁ ×ÏÚÍÏÖÎÏÓÔØ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ×Ï FreeBSD ÎÁÞÉÎÁÑ Ó ×ÅÒÓÉÉ 2.2,
É ÏÎÁ ÎÁ ÓÁÍÏÍ ÄÅÌÅ ÏÞÅÎØ ÕÄÏÂÎÁ.</para>
<para>÷ GDB ÕÖÅ ÄÁ×ÎÏ ÉÍÅÅÔÓÑ ÐÏÄÄÅÒÖËÁ <emphasis>ÕÄÁÌÅÎÎÏÊ
ÏÔÌÁÄËÉ</emphasis>. üÔÏ ÄÅÌÁÅÔÓÑ ÐÒÉ ÐÏÍÏÝÉ ×ÅÓØÍÁ ÐÒÏÓÔÏÇÏ ÐÒÏÔÏËÏÌÁ
ÐÏ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÍÕ ËÁÎÁÌÕ. ÷ ÏÔÌÉÞÉÅ ÏÔ ÄÒÕÇÉÈ ÍÅÔÏÄÏ×, ÏÐÉÓÁÎÎÙÈ
×ÙÛÅ, ÄÌÑ ÜÔÏÇÏ ×ÁÍ ÔÒÅÂÕÅÔÓÑ ÎÁÌÉÞÉÅ Ä×ÕÈ ÍÁÛÉÎ. ïÄÎÁ ÉÚ ÎÉÈ Ñ×ÌÑÅÔÓÑ
ÈÏÓÔÏÍ, ÐÒÅÄÏÓÔÁ×ÌÑÀÝÉÍ ÒÅÓÕÒÓÙ ÄÌÑ ÏÔÌÁÄËÉ, ×ËÌÀÞÁÑ ×ÓÅ ÉÓÈÏÄÎÙÅ
ÔÅËÓÔÙ É ËÏÐÉÀ ÑÄÒÁ ÓÏ ×ÓÅÍÉ ÓÉÍ×ÏÌÁÍÉ × ÎÅÍ, Á ÄÒÕÇÁÑ Ñ×ÌÑÅÔÓÑ ÃÅÌÅ×ÏÊ
ÍÁÛÉÎÏÊ, ÎÁ ËÏÔÏÒÏÊ ÚÁÐÕÝÅÎÁ ÔÁ ÖÅ ËÏÐÉÑ ÔÏÇÏ ÖÅ ÑÄÒÁ (ÎÏ ÂÅÚ
ÏÔÌÁÄÏÞÎÏÊ ÉÎÆÏÒÍÁÃÉÉ).</para>
<para>÷Ù ÄÏÌÖÎÙ ÎÁÓÔÒÏÉÔØ ÉÓÓÌÅÄÕÅÍÏÅ ÑÄÒÏ ÐÒÉ ÐÏÍÏÝÉ ËÏÍÁÎÄÙ
<command>config -g</command>, ×ËÌÀÞÉÔØ <option>DDB</option> ×
ËÏÎÆÉÇÕÒÁÃÉÀ É ÏÔËÏÍÐÉÌÉÒÏ×ÁÔØ ÅÇÏ ÏÂÙÞÎÙÍ ÏÂÒÁÚÏÍ. üÔÏ ÄÁÓÔ ÂÏÌØÛÏÊ
ÂÉÎÁÒÎÙÊ ÆÁÊÌ ÉÚ-ÚÁ ÏÔÌÁÄÏÞÎÏÊ ÉÎÆÏÒÍÁÃÉÉ.
óËÏÐÉÒÕÊÔÅ ÜÔÏ ÑÄÒÏ ÎÁ ÃÅÌÅ×ÕÀ ÍÁÛÉÎÕ, ÕÓÅËÉÔÅ ÏÔÌÁÄÏÞÎÕÀ ÉÎÆÏÒÍÁÃÉÀ
ËÏÍÁÎÄÏÊ <command>strip -x</command> É ÚÁÇÒÕÚÉÔÅ ÜÔÏ ÑÄÒÏ Ó
ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÐÁÒÁÍÅÔÒÁ ÚÁÇÒÕÚËÉ <option>-d</option>. ðÏÄËÌÀÞÉÔÅ
ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÙÊ ËÁÎÁÌ ÃÅÌÅ×ÏÊ ÍÁÛÉÎÙ, ÉÍÅÀÝÉÊ ÕÓÔÁÎÏ×ÌÅÎÎÙÅ ÆÌÁÇÉ
"flags 080" ÎÁ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÍ ÕÓÔÒÏÊÓÔ×Å sio Ë ÌÀÂÏÍÕ
ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÍÕ ËÁÎÁÌÕ ÏÔÌÁÄÏÞÎÏÇÏ ÈÏÓÔÁ. á ÔÅÐÅÒØ ÎÁ ÏÔÌÁÄÏÞÎÏÊ
ÍÁÛÉÎÅ ÐÅÒÅÊÄÉÔÅ × ËÁÔÁÌÏÇ ËÏÍÐÉÌÑÃÉÉ ÃÅÌÅ×ÏÇÏ ÑÄÒÁ É ÚÁÐÕÓÔÉÔÅ
<command>gdb</command>:</para>
<screen>&prompt.user; <userinput>gdb -k kernel</userinput>
GDB is free software and you are welcome to distribute copies of it
under certain conditions; type "show copying" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for details.
GDB 4.16 (i386-unknown-freebsd),
Copyright 1996 Free Software Foundation, Inc...
<prompt>(kgdb)</prompt></screen>
<para>ðÒÏÉÎÉÃÉÁÌÉÚÉÒÕÊÔÅ ÓÅÁÎÓ ÕÄÁÌÅÎÎÏÊ ÏÔÌÁÄËÉ (ÐÒÅÄÐÏÌÁÇÁÅÔÓÑ, ÞÔÏ
ÉÓÐÏÌØÚÕÅÔÓÑ ÐÅÒ×ÙÊ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÙÊ ÐÏÒÔ) ÔÁËÏÊ ËÏÍÁÎÄÏÊ:</para>
<screen>
<prompt>(kgdb)</prompt> <userinput>target remote /dev/cuaa0</userinput>
</screen>
<para>ôÅÐÅÒØ ÎÁ ÃÅÌÅ×ÏÍ ÈÏÓÔÅ (ÔÏÔ, ËÏÔÏÒÙÊ ÐÅÒÅÛÅÌ × DDB ÄÁÖÅ ÄÏ
ÎÁÞÁÌÁ ÐÒÏÃÅÓÓÁ ÏÂÎÁÒÕÖÅÎÉÑ ÕÓÔÒÏÊÓÔ×) ÎÁÂÅÒÉÔÅ:</para>
<screen>
Debugger("Boot flags requested debugger")
Stopped at Debugger+0x35: movb $0, edata+0x51bc
<prompt>db></prompt> <userinput>gdb</userinput>
</screen>
<para>DDB ÏÔ×ÅÔÉÔ ÓÌÅÄÕÀÝÉÍ:</para>
<screen>Next trap will enter GDB remote protocol mode</screen>
<para>ëÁÖÄÙÊ ÒÁÚ, ËÏÇÄÁ ×Ù ÂÕÄÅÔÅ ÎÁÂÉÒÁÔØ <command>gdb</command>, ÒÅÖÉÍ
ÂÕÄÅÔ ÍÅÎÑÔØÓÑ ÍÅÖÄÕ ÕÄÁÌÅÎÎÙÍ GDB É ÌÏËÁÌØÎÙÍ DDB. þÔÏÂÙ ÎÅÍÅÄÌÅÎÎÏ
×ÙÚ×ÁÔØ ÓÌÅÄÕÀÝÅÅ ÐÒÅÒÙ×ÁÎÉÅ, ÐÒÏÓÔÏ ÎÁÂÅÒÉÔÅ <command>s</command>
(step). ÷ÁÛ ÈÏÓÔÉÒÕÀÝÉÊ GDB ÐÏÌÕÞÉÔ ÕÐÒÁ×ÌÅÎÉÅ ÎÁÄ ÃÅÌÅ×ÙÍ
ÑÄÒÏÍ:</para>
<screen>Remote debugging using /dev/cuaa0
Debugger (msg=0xf01b0383 "Boot flags requested debugger")
at ../../i386/i386/db_interface.c:257
<prompt>(kgdb)</prompt></screen>
<para>÷Ù ÍÏÖÅÔÅ ÒÁÂÏÔÁÔØ × ÜÔÏÍ ÓÅÁÎÓÅ ÔÏÞÎÏ ÔÁËÖÅ, ËÁË É × ÌÀÂÏÍ ÄÒÕÇÏÍ
ÓÅÁÎÓÅ GDB, ×ËÌÀÞÁÑ ÐÏÌÎÙÊ ÄÏÓÔÕÐ Ë ÉÓÈÏÄÎÙÍ ÔÅËÓÔÁÍ, ÚÁÐÕÓË ÅÇÏ ×
ÒÅÖÉÍÅ gud-mode ×ÎÕÔÒÉ ÏËÎÁ Emacs (ÞÔÏ ÄÁ£Ô ×ÁÍ Á×ÔÏÍÁÔÉÞÅÓËÉÊ ×Ù×ÏÄ
ÉÓÈÏÄÎÏÇÏ ËÏÄÁ × ÄÒÕÇÏÍ ÏËÎÅ Emacs) É ÔÏÍÕ ÐÏÄÏÂÎÏÅ.</para>
</sect1>
<sect1 id="kerneldebug-kld">
<title>ïÔÌÁÄËÁ ÚÁÇÒÕÖÁÅÍÙÈ ÍÏÄÕÌÅÊ Ó ÐÏÍÏÝØÀ GDB</title>
<para>ðÒÉ ÏÔÌÁÄËÅ Á×ÁÒÉÊÎÏÇÏ ÏÓÔÁÎÏ×Á ÓÉÓÔÅÍÙ, ËÏÔÏÒÏÅ ÐÒÏÉÚÏÛÌÏ × ÍÏÄÕÌÅ,
ÉÌÉ ÐÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ GDB × ÒÅÖÉÍÅ ÕÄÁÌÅÎÎÏÇÏ ÄÏÓÔÕÐÁ Ë ÍÁÛÉÎÅ,
ÉÓÐÏÌØÚÕÀÝÅÊ ÄÉÎÁÍÉÞÅÓËÉÅ ÍÏÄÕÌÉ, ×ÁÍ ÎÕÖÎÏ ÕËÁÚÁÔØ GDB, ËÁË ÐÏÌÕÞÉÔØ
ÉÎÆÏÒÍÁÃÉÀ Ï ÓÉÍ×ÏÌÁÈ × ÜÔÉÈ ÍÏÄÕÌÑÈ.</para>
<para>ðÅÒ×ÙÍ ÄÅÌÏÍ ×ÁÍ ÎÕÖÎÏ ÐÏÓÔÒÏÉÔØ ÍÏÄÕÌØ (ÉÌÉ ÍÏÄÕÌÉ) Ó ×ËÌÀÞÅÎÉÅÍ
ÏÔÌÁÄÏÞÎÏÊ ÉÎÆÏÒÍÁÃÉÉ:</para>
<screen>&prompt.root; <userinput>cd /sys/modules/linux</userinput>
&prompt.root; <userinput>make clean; make COPTS=-g</userinput></screen>
<para>åÓÌÉ ×Ù ÉÓÐÏÌØÚÕÅÔÅ GDB × ÒÅÖÉÍÅ ÕÄÁÌÅÎÎÏÇÏ ÄÏÓÔÕÐÁ, ÔÏ ÄÌÑ
ÏÐÒÅÄÅÌÅÎÉÑ ÔÏÇÏ, ËÕÄÁ ÂÙÌ ÚÁÇÒÕÖÅÎ ÍÏÄÕÌØ, ÍÏÖÅÔÅ ÚÁÐÕÓÔÉÔØ
ËÏÍÁÎÄÕ <command>kldstat</command> ÎÁ ÃÅÌÅ×ÏÊ ÍÁÛÉÎÅ:</para>
<screen>&prompt.root; <userinput>kldstat</userinput>
Id Refs Address Size Name
1 4 0xc0100000 1c1678 kernel
2 1 0xc0a9e000 6000 linprocfs.ko
3 1 0xc0ad7000 2000 warp_saver.ko
4 1 0xc0adc000 11000 linux.ko</screen>
<para>åÓÌÉ ×Ù ÏÔÌÁÖÉ×ÁÅÔÅ Á×ÁÒÉÊÎÙÊ ÄÁÍÐ, ×ÁÍ ÐÏÔÒÅÂÕÅÔÓÑ ÐÒÏÓÍÏÔÒÅÔØ
ÓÐÉÓÏË <literal>linker_files</literal> ÎÁÞÉÎÁÑ Ó
<literal>linker_files->tqh_first</literal> É ÓÌÅÄÏ×ÁÔØ ÕËÁÚÁÔÅÌÑÍ
<literal>link.tqe_next</literal> ÄÏ ÔÅÈ ÐÏÒ, ÐÏËÁ ÎÅ ÎÁÊÄÅÔÅ ÚÁÐÉÓØ
Ó ÔÅÍ <literal>filename</literal>, ËÏÔÏÒÙÊ ×Ù ÉÝÅÔÅ. üÌÅÍÅÎÔ
<literal>address</literal> ÜÔÏÊ ÚÁÐÉÓÉ Ñ×ÌÑÅÔÓÑ ÁÄÒÅÓÏÍ ÚÁÇÒÕÚËÉ
ÍÏÄÕÌÑ.</para>
<para>úÁÔÅÍ ×ÁÍ ÎÕÖÎÏ ÏÐÒÅÄÅÌÉÔØ ÓÍÅÝÅÎÉÅ ÔÅËÓÔÏ×ÏÇÏ ÓÅÇÍÅÎÔÁ
ÍÏÄÕÌÑ:</para>
<screen>&prompt.root; <userinput>objdump --section-headers /sys/modules/linux/linux.ko | grep text</userinput>
3 .rel.text 000016e0 000038e0 000038e0 000038e0 2**2
10 .text 00007f34 000062d0 000062d0 000062d0 2**2</screen>
<para>ôÏ, ÞÔÏ ×Ù ÉÝÅÔÅ, Ñ×ÌÑÅÔÓÑ ÓÅËÃÉÅÊ <literal>.text</literal>, ×
ÐÒÉÍÅÒÅ ×ÙÛÅ ÜÔÏ ÓÅËÃÉÑ 10. þÅÔ×ÅÒÔÏÅ ÞÉÓÌÏ×ÏÅ ÐÏÌÅ (×ÓÅÇÏ ÛÅÓÔÏÅ ÐÏ
ÓÞ£ÔÕ) Ñ×ÌÑÅÔÓÑ ÓÍÅÝÅÎÉÅÍ ÔÅËÓÔÏ×ÏÊ ÓÅËÃÉÉ ×ÎÕÔÒÉ ÆÁÊÌÁ. äÏÂÁ×ØÔÅ ÜÔÏ
ÓÍÅÝÅÎÉÅ Ë ÁÄÒÅÓÕ ÚÁÇÒÕÚËÉ, ÞÔÏÂÙ ÐÏÌÕÞÉÔØ ÁÄÒÅÓ, ÎÁ ËÏÔÏÒÙÊ ÂÙÌ
ÐÅÒÅÍÅݣΠËÏÄ ÍÏÄÕÌÑ. ÷ ÎÁÛÅÍ ÐÒÉÍÅÒÅ ÍÙ ÐÏÌÕÞÉÍ
0xc0adc000 + 0x62d0 = c0ae22d0. ÷ÏÓÐÏÌØÚÕÊÔÅÓØ ËÏÍÁÎÄÏÊ
<command>add-symbol-file</command> × GDB ÄÌÑ ÕËÁÚÁÎÉÑ ÏÔÌÁÄÞÉËÕ
ÎÁ ÍÏÄÕÌØ:</para>
<screen><prompt>(kgdb)</prompt> <userinput>add-symbol-file /sys/modules/linux/linux.ko 0xc0ae22d0</userinput>
add symbol table from file "/sys/modules/linux/linux.ko" at text_addr = 0xc0ae22d0?
(y or n) <userinput>y</userinput>
Reading symbols from /sys/modules/linux/linux.ko...done.
<prompt>(kgdb)</prompt></screen>
<para>ôÅÐÅÒØ ×Ù ÄÏÌÖÎÙ ÐÏÌÕÞÉÔØ ÄÏÓÔÕÐ ËÏ ×ÓÅÍ ÓÉÍ×ÏÌÁÍ × ÍÏÄÕÌÅ.</para>
</sect1>
<sect1 id="kerneldebug-console">
<title>ïÔÌÁÄËÁ ÄÒÁÊ×ÅÒÁ ËÏÎÓÏÌÉ</title>
<para>ôÁË ËÁË ÄÌÑ ÒÁÂÏÔÙ DDB ×ÁÍ ÔÒÅÂÕÅÔÓÑ ÄÒÁÊ×ÅÒ ËÏÎÓÏÌÉ, ÔÏ × ÓÌÕÞÁÅ
ÎÅÉÓÐÒÁ×ÎÏÓÔÅÊ ÓÁÍÏÇÏ ÄÒÁÊ×ÅÒÁ ËÏÎÓÏÌÉ ×ÓÅ ÓÔÁÎÏ×ÉÔÓÑ ÇÏÒÁÚÄÏ ÓÌÏÖÎÅÅ.
÷Ù ÍÏÖÅÔÅ ×ÓÐÏÍÎÉÔØ Ï ÉÓÐÏÌØÚÏ×ÁÎÉÉ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÊ ËÏÎÓÏÌÉ (ÌÉÂÏ Ó
ÉÓÐÒÁ×ÌÅÎÎÙÍÉ ÚÁÇÒÕÚÏÞÎÙÍÉ ÂÌÏËÁÍÉ, ÌÉÂÏ ÐÒÉ ÕËÁÚÁÎÉÉ ÆÌÁÇÁ
<option>-h</option> × ÐÒÉÇÌÁÛÅÎÉÉ <prompt>Boot:</prompt>) É ÐÏÄËÌÀÞÉÔØ
ÏÂÙÞÎÙÊ ÔÅÒÍÉÎÁÌ Ë ÐÅÒ×ÏÍÕ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÍÕ ÐÏÒÔÕ. DDB ÒÁÂÏÔÁÅÔ Ó
ÌÀÂÙÍ ÏÔËÏÎÆÉÇÕÒÉÒÏ×ÁÎÎÙÍ ÄÒÁÊ×ÅÒÏÍ ËÏÎÓÏÌÉ, × ÔÏÍ ÞÉÓÌÅ Ó
ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÊ ËÏÎÓÏÌØÀ.</para>
</sect1>
</chapter>
<!--
Local Variables:
mode: sgml
sgml-declaration: "../chapter.decl"
sgml-indent-data: t
sgml-omittag: nil
sgml-always-quote-attributes: t
sgml-parent-document: ("../book.sgml" "part" "chapter")
End:
-->
|