Powered by Invision Power Board


  
 
Reply to this topicStart new topicStart Poll

> So erstellt man ein Backtrace
R2D2
  Geschrieben am: Samstag, 14.November 2009, 13:10 Uhr
Quote Post


Prinz
****

Gruppe: Moderators
Beiträge: 6149
Mitgliedsnummer.: 1131
Mitglied seit: 2005-10-30



Ab und kann es vorkommen dass der VDR einfach mal "abschmiert".

wenn man dann im Logfile (/log/messages) solche Meldungen findet:
CODE
....
Nov 15 15:23:33 [kernel] vdr[13855]: segfault at 1 ip b7e4bd5a sp a39792e0 error 4 in libstdc++.so.6.0.10[b7dba000+d9000]
....
kann es sinnvoll sein, ein Backtrace zu erstellen.

Dazu muss aber der VDR mit dem DEBUG Flag übersetzt sein, und das geht so:

In der: /usr/local/src/VDR/Make.config muss die Zeile GDB_DEBUG = 1 vorhanden sein - ggf. das "#" entfernen.

Dann den VDR neu bauen...

CODE
cd /usr/local/src/VDR
make clean
make include-dir
make
/_config/bin/instvdr.sh


Wenn nur der VDR "abschmiert", wird in /tmp/coreflies jedesmal ein sog. Corefile angelegt.

Um nun das Backtrace zu ziehen geht man wie folgt vor:

Den VDR stoppen:

CODE
stp vdr


Dann den GDB Debugger aufrufen:

CODE
gdb vdr /tmp/corefiles/core.xxxx

--> xxxx ggf. durch die entsprechende Zahl ersetzen.

Dann kommen erstmal eine ganze Menge an Ausgaben, die aber nicht unbedingt interessant sind.
Am Ende kommt dann ein Promt (gdb), dort dann bt eintippen, gefolgt von <enter>. Dann kommt das eigentliche Backtrace, dieses Postet Ihr dann im entsprechenden Thread oder im Bugtracer.

Das sieht dann z.B. so aus:

CODE
[.....]
(gdb) bt
#0  0xb7e4bd5a in std::string::operator= () from /usr/lib/gcc/i686-pc-linux-gnu/4.3.4/libstdc++.so.6
#1  0xb55f9c62 in cDisplayItem::lookupVariable (this=0xa5d85828, name=0xa397974d "eventSubtitle", value=@0xa39798b4, fmt=0xa397984d "") at dspitems.c:233
#2  0xb5623dc0 in VariableProvider::evaluate (this=0xa5d85834, buf=@0xa3979924, var=0xa5d85814 "{eventSubtitle}") at theme.c:193
#3  0xb55f768a in cDisplayText::draw (this=0xa5d85828) at dspitems.c:1369
#4  0xb55f26be in cDisplayItem::refresh (this=0xa5d85828) at dspitems.c:955
#5  0xb5605382 in cGraphTFTDisplay::display (this=0xad33be00, sectionName=
       {static npos = 4294967295, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0xa397a344 "\0240G\236"}}) at display.c:2109
#6  0xb5605fb7 in cGraphTFTDisplay::Action (this=0xad33be00) at display.c:776
#7  0x0817b8e7 in cThread::StartThread (Thread=0xad33be0c) at thread.c:261
#8  0xb7f8442f in ?? () from /lib/libpthread.so.0
#9  0xad33be0c in ?? ()
#10 0xa397ab70 in ?? ()
#11 0xa397ab70 in ?? ()
#12 0xa397ab70 in ?? ()
#13 0xa397a450 in ?? ()
#14 0x00000000 in ?? ()
(gdb)


Beendet wird GDB mit q, gefolgt von <enter>.

Anschließend kann der VDR wieder gestartet werden.

CODE
stt vdr


ACHTUNG!!

Wenn der VDR mit dem DEBUG Flag übersetzt ist, wird bei jedem Absturz ein Corefiel angelegt. Die Corefiles haben aber nicht selten eine Größe von 500MB(!) und mehr. D.h. es kann sein, dass bei häufigen Abstürzen sehr schnell die Festplatte "zugemüllt" wird.

Das Debugging schaltet man wieder wie folgt ab:

In der: /usr/local/src/VDR/Make.config vor die Zeile GDB_DEBUG = 1 ein "#" setzen.

CODE
# GDB_DEBUG = 1


Dann:

CODE
cd /usr/local/src/VDR
make clean
make include-dir
make
/_config/bin/instvdr.sh
Email PosterUsers WebsiteICQ
Top
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 Anonyme Benutzer)
0 Mitglieder:

Topic Options Reply to this topicStart new topicStart Poll