cvs commit: de-docproj/books/developers-handbook/kerneldebug chapter.sgml

From: Benedict Reuschling <bcr(at)doc.bsdgroup.de>
Date: Sat, 2 Oct 2010 18:19:15 GMT

bcr 2010-10-02 18:19:15 UTC

  FreeBSD German Documentation Repository

  Modified files:
    books/developers-handbook/kerneldebug chapter.sgml
  Log:
  MFen 1.79
  
  Zwei überflüssige Abschnitte entfernt, die schon länger nicht mehr
  aktuell sind.
  
  Revision Changes Path
  1.12 +2 -114 de-docproj/books/developers-handbook/kerneldebug/chapter.sgml
  
  Index: chapter.sgml
  ===================================================================
  RCS file: /home/cvs/de-docproj/books/developers-handbook/kerneldebug/chapter.sgml,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -I$FreeBSDde.*$ -r1.11 -r1.12
  --- chapter.sgml 1 Jun 2009 20:44:17 -0000 1.11
  +++ chapter.sgml 2 Oct 2010 18:19:15 -0000 1.12
  @@ -2,9 +2,9 @@
         The FreeBSD Documentation Project
         The FreeBSD German Documentation Project
   
  - $FreeBSD: doc/de_DE.ISO8859-1/books/developers-handbook/kerneldebug/chapter.sgml,v 1.1 2009/02/14 22:06:22 miwi Exp $
  - $FreeBSDde: de-docproj/books/developers-handbook/kerneldebug/chapter.sgml,v 1.11 2009/06/01 20:44:17 bcr Exp $
  - basiert auf: 1.78
  + $FreeBSD: doc/de_DE.ISO8859-1/books/developers-handbook/kerneldebug/chapter.sgml,v 1.2 2009/06/13 20:35:10 bcr Exp $
  + $FreeBSDde: de-docproj/books/developers-handbook/kerneldebug/chapter.sgml,v 1.12 2010/10/02 18:19:15 bcr Exp $
  + basiert auf: 1.79
   -->
   
   <chapter id="kerneldebug">
  @@ -506,54 +506,7 @@
         Schnittstelle von <command>ddd</command> anzugehen.</para>
     </sect1>
   
  - <sect1 id="kerneldebug-post-mortem">
  - <title>Post-Mortem-Auswertung eines Speicherauszugs</title>
   
  - <para>Was machen Sie, falls ein Kernel abst&uuml;rzt und einen
  - Kernspeicherauszug ablegt, aber Sie es nicht erwartet haben und
  - der Kernel folglich nicht unter Benutzung von <command>config
  - -g</command> kompiliert wurde? Nicht alles ist dann verloren.
  - Geraten Sie nicht in Panik!</para>
  -
  - <para>Nat&uuml;rlich m&uuml;ssen Sie immer noch die Ablage von
  - Speicherausz&uuml;gen nach einem Absturz aktivieren. Sehen Sie
  - weiter oben nach den Optionen, die Sie festlegen m&uuml;ssen, um
  - dies zu tun.</para>
  -
  - <para>Wechseln Sie in Ihr Kernel-Konfigurationsverzeichnis
  - (<filename>/usr/src/sys/<replaceable>arch</replaceable>/conf</filename>)
  - und bearbeiten Sie die Konfigurationsdatei. Entfernen Sie den
  - Kommentar vor folgender Zeile (oder f&uuml;gen Sie sie hinzu,
  - falls sie nicht vorhanden ist):</para>
  -
  - <programlisting>makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols</programlisting>
  -
  - <para>Bauen Sie den Kernel neu. Aufgrund der &Auml;nderung des
  - Zeitstempels im Makefile werden einige weitere Objektdateien neu
  - gebaut, zum Beispiel <filename>trap.o</filename>. Mit etwas
  - Gl&uuml;ck &auml;ndert die hinzugef&uuml;gte
  - <option>-g</option>-Option nichts am erzeugten Code, sodass Sie
  - schlie&szlig;lich einen neuen Kernel mit gleichem Code wie im
  - fehlerbehafteten, jedoch mit einigen Symbolen zur Fehlersuche
  - (Debugging-Symbols), erhalten. Sie sollten zumindest die alten
  - und neuen Dateigr&ouml;&szlig;en mit dem &man.size.1;-Befehl
  - &uuml;berpr&uuml;fen. Falls sich eine Nicht&uuml;bereinstimmung
  - findet, m&uuml;ssen Sie an dieser Stelle vermutlich
  - aufgeben.</para>
  -
  - <para>Untersuchen Sie nun den Speicherauszug, wie oben beschrieben.
  - Die Symbole zur Fehlersuche k&ouml;nnten an manchen Stellen
  - unvollst&auml;ndig sein, wie es die Stack-Ablaufverfolgung im
  - Beispiel oben zeigt, wo manche Funktionen ohne Zeilennummer und
  - Parameterliste aufgelistet sind. Falls Sie mehr Symbole zur
  - Fehlersuche ben&ouml;tigen, entfernen Sie geeignete Objektdateien,
  - bauen Sie den Kernel ein weiteres Mal neu und wiederholen Sie die
  - <command>gdb <option>-k</option></command>-Sitzung, bis Sie
  - genug wissen.</para>
  -
  - <para>Das Ganze funktioniert nicht unter Garantie, reicht aber in
  - den meisten F&auml;llen aus.</para>
  - </sect1>
   
     <sect1 id="kerneldebug-online-ddb">
       <title>Online-Kernel-Fehlersuche mit DDB</title>
  @@ -898,71 +851,6 @@
         Emacs-Fenster bietet), usw.</para>
     </sect1>
   
  - <sect1 id="kerneldebug-kld">
  - <title>Fehlersuche bei ladbaren Modulen mit GDB</title>
  -
  - <para>W&auml;hrend der Fehlersuche bei einer Panic, die innerhalb
  - eines Moduls oder unter Benutzung von GDB auf einem entfernten
  - System gegen ein System, das dynamische Module benutzt,
  - ausgel&ouml;st wurde, m&uuml;ssen Sie GDB mitteilen, wie es an
  - die Informationen zu den Symbolen dieser Module kommt.</para>
  -
  - <para>Zuerst m&uuml;ssen Sie die Module mit Informationen zur
  - Fehlersuche bauen:</para>
  -
  - <screen>&prompt.root; <userinput>cd /sys/modules/linux</userinput>
  -&prompt.root; <userinput>make clean; make COPTS=-g</userinput></screen>
  -
  - <para>Falls Sie GDB auf einem entfernten System benutzen,
  - k&ouml;nnen Sie <command>kldstat</command> auf dem Zielsystem
  - starten, um herauszufinden, wohin die Module geladen
  - wurden:</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>Falls Sie einen Speicherauszug nach einem Absturz auf Fehler
  - untersuchen, m&uuml;ssen Sie die
  - <literal>linker_files</literal>-Liste abgehen, beginnend mit
  - <literal>linker_files-&gt;tqh_first</literal> und den
  - <literal>link.tqe_next</literal>-Zeigern folgend, bis Sie den
  - Eintrag mit dem <literal>Dateinamen</literal>, nach dem Sie
  - suchen, gefunden haben. Der <literal>Adress</literal>-Teil des
  - Eintrags ist die Adresse, wohin das Modul geladen
  - wurde.</para>
  -
  - <para>Als N&auml;chstes m&uuml;ssen Sie den Adressabstand des
  - Textabschnitts innerhalb des Moduls herausfinden:</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>Das, wonach Sie suchen, ist die
  - <literal>.text</literal>-Zeile, Zeile 10 im Beispiel oben. Die
  - vierte hexadezimale Spalte (insgesamt die sechste) zeigt den
  - Adressabstand des Textabschnitts innerhalb der Datei. Addieren
  - Sie diesen Adressabstand zu der Ladeadresse des Moduls, um die
  - Verschiebungsadresse f&uuml;r den Code des Moduls zu erhalten.
  - In unserem Beispiel erhalten wir 0xc0adc000 + 0x62d0 =
  - 0x0ae22d0. Benutzen Sie den
  - <command>add-symbol-file</command>-Befehl in GDB, um dem
  - Debugger das Modul mitzuteilen:</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>Sie sollten nun auf alle Symbole im Modul zugreifen
  - k&ouml;nnen.</para>
  - </sect1>
  -
     <sect1 id="kerneldebug-console">
       <title>Fehlersuche bei einem Konsolen-Treiber</title>
   
  

To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-cvs-doc" in the body of the message
Received on Sat 02 Oct 2010 - 20:19:37 CEST

search this site