Autor Thema: HILFE! Mein Miranda stürzt ab! Howto!  (Gelesen 10703 mal)

eXiTus

  • Stammposter
  • ****
  • Beiträge: 91
    • Profil anzeigen
HILFE! Mein Miranda stürzt ab! Howto!
« am: 06. September 2007, 22:54:03 »
Du bist hier gelandet weil dein Miranda abstürzt?
Dann ließ bitte den folgenden Beitrag durch BEVOR du irgendwo deinen crash report mit einer völlig nichtsaussagende Zeile wie "mein miranda crasht andauernd" oder sowas postest!
Die Informationen von Windows, die du in dem netten Fenster mit dem gefürchteten Text "miranda32.exe hat einen Fehler festgestellt und muss beendet werden" bekommst sind übrigens auch erst einmal komplett NUTZLOS! Achte nicht auf irgendwelche hexadezimalen Zahlen bzw auf die .dll Datei in der der Fehler auftritt, sondern ließ hier weiter!

Und noch eine kleine Information vorab:
JA, das Lesen und Ausführen der hier genannten Hinweise ist ARBEIT! Miranda IM ist ein Open Source Projekt das von Freiwilligen entwickelt wird. Das bedeutet auch die Entwickler tun diese Arbeit in ihrer Freizeit. Genauso die Betreiber dieses Forums und alle Freiwilligen die sich darin tummeln. Dehalb erwarte bitte nicht das du hier den Support Bereich vorfindest, der sich sofort um dich kümmert und dir alle Informationen aus der Nase zieht! Du kannst dir selber und auch allen anderen Beteiligten helfen in dem du hier weiter ließt und dieses kleine Bisschen Arbeit auf dich nimmst.

TEIL 1: Das folgende kann JEDER ausführen

1. Miranda-Installation auf den neuesten Stand bringen
Als allererstes solltest du Miranda und ALLE deine Plugins auf die neueste Version bringen. Du findest die aktuelle Miranda Version hier . Für deine Plugins musst du dich durchs File Listing oder durchs WIKI wühlen. Eventuell benutzt du das Plugin Updater, welches dir diese Arbeit abnimmt. In diesem Fall solltest du in den Miranda Optionen bei Updater kontrollieren ob auch wirklich alle deine Plugins von Updater erkannt werden.
Beim installieren solltest du es vermeiden Testing- und Stable- Versionen zu vermischen. Die ANSI/UNICODE Problematik ist dir wohl auch schon bekannt. Auch hier gilt wieder: Vermeide möglichst das Vermischen von ANSI- und UNICODE- Versionen.

2. Profildatei als Fehlerquelle ausschließen
Soweit so gut, in vielen Fällen kann das Aktualisieren der Miranda Installation das Problem bereits gelöst haben. Eine weitere, sehr einfache und wirkungsvolle Möglichkeit ist das Benutzen einer neuen, frischen Profildatei. Der Grund dafür ist einfach, dass diese Datei im Laufe der Zeit beschädigt worden sein kann, was zu unkontrollierbaren Abstürzen führen kann.
Um solche Probleme auszuschließen solltest du zumindest testweise eine neue Profildatei erstellen. Einfach ein Backup der alten Datei erstellen und diese anschließend aus dem Miranda Verzeichnis entfernen. Ein Umbennen reicht übrigens auch.

Kleiner Exkurs für Leute bei denen eine neue Profildatei hilft:
Sollte sich die Profildatei als "Schuldiger" rausstellen hilft dir eventuell dieser Artikel weiter. Manchmal kann es auch helfen die gespeicherten Einstellungen eines Plugins aus der Profildatei zu löschen. Das hat für das betroffene Plugin den gleichen Effekt wie eine komplett neue Profildatei, für die gesamte Miranda Installation bietet es den Vorteil, dass die restlichen Einstellungen und vor allem die History erhalten bleiben. Für eine solche Aktion muss man sich allerdings sicher sein können WELCHES Plugin nun das "Schuldige" ist. Dies kannst du mit Hilfe einer Minimalversion (siehe weiter unten) rausfinden. Zum Löschen der Einstellungen benötigts du das Plugin DBEditor. Ist es installiert startest du den DBEditor und suchst bei Settings/Einstellungen nach dem jeweiligen Plugin-Namen. Hast du ihn gefunden markierst du einfach den ganzen Ordner und löscht ihn. Keine Angst es handelt sich dabei nur um Einstellungen. Außerdem hast du für alle Fälle ja immer noch ein Backup auf Reserve ;).

3. Problem eingrenzen - "schuldiges" Plugin finden
So, wir sind nun an einem Punkt angekommen an dem wir schon um einiges schlauer sind. Das Aktualisieren der Miranda Version inklusive aller Plugins und das Benutzen einer frischen Profildatei hilft uns nicht, so liegt das Problem entweder an einem Versionen-Konflikt (zb ANSI - UNICODE) zwischen einzelnen Plugins oder an einem Programm-Fehler (genau ein sogenannter Bug :P).
Es gilt also zu klären ob der Fehler an deiner Miranda Installation liegt (Zum Beispiel die falsche Kombination von Plugins oder so etwas) oder ob es wirklich ein Bug ist. Grundsätzlich sollten Ausnahmefehler wie "miranda32.exe hat einen Fehler verursacht..." nie vorkommen. Allerdings können die Entwickler auch nicht tausende von Kontrollen in die Plugins einbauen, die zum Beispiel ständig die Profildatei auf Fehler kontrolliert oder die sicher stellen ob du auch wirklich die benötigten Versionen anderer Plugins verwendest.
Es können also manche Probleme durch einfaches wechseln/updaten der Plugins behoben werden. Aber auch bei Programmfehlern ist es sinnvoll das/die schuldigen Plugins auszumachen.

Wie findest du nun also das/die schuldigen Plugins?
Indem du das Problem eingrenzt!

Hier eine kleine einfache Checkliste, die JEDER der ein solches Problem hat durchgehen kann:
  • Was hab ich zuletzt an meiner Miranda Installation geändert? Welches Plugin hab ich zuletzt installiert bzw aktualisiert?

    In der Regel ist mit dem Beantworten dieser Frage das Schuldige bzw die mitverantwortlichen Plugins auszumachen. Der nächste Schritt ist erstmal Ruhe bewaren und nicht sofort anfangen wild irgendwelche Versionen auszutauschen ;), sondern das Problem erst weiter einzugrenzen. Zu diesem Zeitpunkt kann man auf keinem Fall sicher sein, dass es zb genau das eine Plugin ist was man z.B. erst gestern aktualisiert hat.

  • Wann tritt der Fehler auf? Kann ich den Zeitpunkt des Absturzes genau festlegen (Zum Beispiel immer Beim öffnen des Nachrichtenfensters stürzt Miranda ab) oder passieren die Abstürze zufällig?

    Mit diesen zwei einfachen Fragen bist du dem Problem schon sehr viel näher gekommen. Am Besten ist es jetzt, hier im Forum nach dem Problem zu suchen. Eventuell hast du Glück und findest genau dein Problem und einen möglichen Lösungsansatz wieder. Falls du nicht fündig wirst, machst du am besten noch den nächsten Schritt bevor du einen Thread aufmachst.

  • Mit welcher minimalen Konfiguration von Plugins tritt der Fehler immer noch auf?

    Hinter dieser kompliziert klingenden Frage steckt folgendes: Du gehst nach dem Ausschlussverfahren auf Fehlersuche. Der Gedanke dahinter ist "Ein deaktiviertes Plugin verursacht keinen Absturz". Wie du dir vielleicht schon gedacht hast deaktivierst du jetzt möglichst viele Plugins von denen du meinst die haben mit dem Problem nichts zu tun und schaust ob der Absturz immer noch auftritt. Bei einem konkreten Verdacht (Vor allem Frage 1 beachten!) ist es meistens besser dieses eine Plugin zu deaktivieren. Dennoch solltest du danach noch eine "Minimalkonfiguration" erstellen, also eine Konfiguration mit möglichst wenigen Plugins bei der das Problem aber trotzdem noch auftritt.
    Spezialfall: Miranda stürzt direkt nach dem Start ab, so dass ich keine Möglichkeit habe in den Einstellungen irgendwelche Plugins zu deaktivieren.
    Sollte dies der Fall sein musst du die Plugins "manuell" deaktivieren. Und zwar öffnest du einfach den Plugin Ordner und benennst die gewünschten .dll Dateien in .dll1 oder so etwas um. Wichtig ist, dass die dll Endung weg ist.

Sooo, nun bist du wieder ein Stück schlauer. Jetzt ist es an der Zeit im Forum nach Hilfe zu rufen :D. Und zwar erstellst du mit deiner Minimalversion und einer frischen Profildatei eine Versionsinfo und einen Crash Report. Natürlich nicht nur diese zwei Dateien wortlos posten, sondern noch möglichst viele Infos mitgeben! Am besten ließt du dir die 2 ersten Fragen nochmal durch.
Solltest du wirklich noch Versionen benutzten die sich nicht vertragen wird das bestimmt jemandem auffallen der dich freundlich darauf hinweißt ;)
Wenn das nicht der Fall ist kannst du an dem Punkt nun sicher sein dass es sich um einen Programm-Fehler handelt.

Wie geht es nun weiter?
Naja, gegen einen Bug kannst du erstmal nicht viel machen als das/die Plugins vorrübergehend zu deaktivieren. Handelt es sich um ein Plugin dass im Moment aktiv weiterentwickelt wird hast du ansonsten sehr gute Chancen dass der Autor den Bug fixen wird. Du kannst das ganze natürlich auch selber beschleunigen indem du den Autor mit deinen gezielten Informationen die du bereits gesammelt hast auf das Problem hinweißt. Falls du nicht weißt an wen bzw. wohin du dich mit deinem Problem wenden sollst frag einfach im Forum bzw im Chat nach. Für Miranda Testing Versionen und die enthaltenen Plugins gibt es einen offiziellen Bugtracker.

TEIL 2: Falls du noch nicht genug hast :P
Du bist immer noch interessiert nach weiteren Möglichkeiten der Fehlersuche? Du nutzt bereits die Testing Version von Miranda und willst der sache auf den Grund gehen?
Ok, ab hier wird das ganze etwas technischer und gewisse Erfahrungen mit Miranda werden einfach vorrausgesetzt :)

Gehen wir nochmal zurück zum Anfang: Da war doch das Windows Fenster das uns sagt dass Miranda beendet werden MUSS. Vielleicht habt ihr euch schon einmal gefragt warum "muss" wenn es noch weiter laufen könnte? Um das zu erklären werde ich etwas tiefer einsteigen.

Alle laufenden Prozesse haben einen zugewiesenen Speicherbereich den sie benutzten dürfen. Windows ist sozusagen der Verwalter der Prozesse und sorgt dafür dass jeder Prozess genug Speicher und Rechenleistung zur Verfügung hat. Aber es schützt auch den Speicher der einzelnen Prozesse indem es ein dafür sorgt dass nur der besitztende Prozess eines Speicherbereichs auf diesen zugreifen kann! Versucht ein Prozess auf fremden Speicher zuzugreifen kommt unser nettes Fenster :P
"access violation" - "Zugriffsverletzung"
Jetzt ist euch vielleicht klar was dieser schon oft gehörte Begriff bedeutet :). So gut wie alle Abstürze sind eine Schutzverletzung.

Wie kommt es nun dazu? Ganz einfach: Durch einen Bug der bewirkt das auf falschen Speicher zugegriffen wird. Und wie finde ich diesen? Mit ein paar netten Hilfsmitteln ;)
Windows gibt nämlich den Zugriff auf den kompletten Speicherbereich frei wenn ein Prozess crasht. Aus diesem Speicherabbild zum Zeitpunkt des Absturzes kann man meistens genug Informationen gewinnen um die Ursache zu finden.
Eines dieser Hilfsmittel ist zb das Plugin Crash Report. Es holt die wichtigsten Informationen aus dem Speicherabbild und bringt die in die log Datei. Ich werde das Vorgehen mal an einem kleinem Beispiel erläutern:

Program crashed on Wednesday, 5 Jul 2006 at 19:59:19.
===============================================================================
 F:\Miranda IM\miranda32.exe caused an Access Violation.
 Location 1210c870 in module F:\Miranda IM\Plugins\clist_modern.dll.
 Reading from location 80000000.

 Registers:
-------------------------------------------------------------------------------
 eax=80000000 ebx=00a55010 ecx=0012ef78 edx=0044a640 esi=00000000 edi=00a84ac8
 eip=1210c870 esp=0012ea18 ebp=0012ea6c iopl=0         nv up ei ng nz na po nc
 cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010286

 Address    Module                                               Comp   Symbol
---------- ---------------------------------------------------- ------ ------------------
 1210C870   F:\Miranda IM\Plugins\clist_modern.dll               --     --
 1210F654   F:\Miranda IM\Plugins\clist_modern.dll               --     --
 77D18734   C:\WINDOWS\system32\USER32.dll                       unkn   GetDC
 77D18816   C:\WINDOWS\system32\USER32.dll                       unkn   GetDC
 77D1B89B   C:\WINDOWS\system32\USER32.dll                       unkn   GetParent
 77D1B903   C:\WINDOWS\system32\USER32.dll                       unkn   SendMessageW
 0042D261   F:\Miranda IM\miranda32.exe                          --     --

Ok, gehen wirs einfach mal von oben durch:
Erste zeile is klar ;)
Dann haben wir eine access violation welche oben schon erläutert wurde

Location 1210c870 in module F:\Miranda IM\Plugins\clist_modern.dll.
Ok 1210c870 ist die Adresse an dem die Zugriffsverletzung aufgetreten ist. Dazu wieder eine kleine Erläuterung: Ein ausführbares Programm bzw eine dll Datei enthält Maschinencode. Das bedeutet eine exe bzw dll Datei ist nicht anderes als eine Liste von Anweisungen die der Prozessor ausführen soll. Wird nun ein Programm ausgeführt lädt Windows das Programm in den Speicher und sagt dem Prozessor er soll mal ab dieser Adresse alles abarbeiten.
An der Adresse 1210c870 stand nun die Anweisung die zu unserer Schutzverletzung führte. Die Anweisung der Adresse stammt aus dem Modul "clist_modern.dll" (Windows merkt sich welche Adressbereiche die geladenen Module belegen).

Reading from location 80000000.Die Adresse 80000000 ist die Speicheradresse auf die der Programmcode von clist_modern fälschlicherweise zugreifen wollte.

Registers:
-------------------------------------------------------------------------------
 eax=80000000 ebx=00a55010 ecx=0012ef78 edx=0044a640 esi=00000000 edi=00a84ac8
 eip=1210c870 esp=0012ea18 ebp=0012ea6c iopl=0         nv up ei ng nz na po nc
 cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010286

Das sind sogenannte Prozessor Register in denen temporär Daten gespeichert werden. Die Werte sind eigentlich ziemlich nutzlos oO. Die zweite zeile können wir uns etwas genauer anschauen.
eip ist der instruction pointer. Der Wert in eip ist immer die Speicheraddresse an der die nächste auszuführende Anweisung steht. 1210c870 kommt euch bekannt vor oder :P
esp ist der sogenannte Stack Pointer, ebp der Base Pointer. Das wird euch jetzt nicht viel sagen, aber vielleicht komm ich später nochmal darauf zurück.

Address    Module                                               Comp   Symbol
---------- ---------------------------------------------------- ------ ------------------
 1210C870   F:\Miranda IM\Plugins\clist_modern.dll               --     --
 1210F654   F:\Miranda IM\Plugins\clist_modern.dll               --     --
 77D18734   C:\WINDOWS\system32\USER32.dll                       unkn   GetDC
 77D18816   C:\WINDOWS\system32\USER32.dll                       unkn   GetDC
 77D1B89B   C:\WINDOWS\system32\USER32.dll                       unkn   GetParent
 77D1B903   C:\WINDOWS\system32\USER32.dll                       unkn   SendMessageW
 0042D261   F:\Miranda IM\miranda32.exe                          --     --

Diese Liste kennt ihr bestimmt schon, aber was sie genau bedeutet werde ich hier nochmal erklären. Es handelt sich um den sogenannten "Call Stack". Was ist das nun?
Ein Programm besteht meistens aus vielen kleinen Funktionen. Jede Funktion macht etwas, meistens ruft eine Funktion auch weitere Funktionen auf. Das geschieht alles schön geordnet hintereinander. Wird zb die Funktion a aufgerufen und diese ruft wiederum die Funktion b auf, so wartet die Funktion a bis b "fertig" ist und dann erst macht Funktion a weiter.
Mit dem oben genannten Speicherabbild lässt sich der aktuelle "Status" des Programms, also eine Liste der aufgerufenen Funktionen rekonstruieren. Zum Beispiel hat Funktion a die Funktion b aufgerufen und diese wiederum die Funktion c in der dann eine Zugriffsverletzung auftritt. Also wäre der "Status" dann folgender:
Funktion c
Funktion b
Funktion a

Ganz oben steht immer die zuletzt aufgerufenen Funktion.
In unserem konkreten Beispiel hat also irgendeine Funktion aus der miranda32.exe die SendMessageW Funktion in der USER32.dll aufgerufen. Diese wiederum hat ein paar weitere Funktion in der USER32.dll aufgerufen bis schließlich eine Funktion in der clist_modern.dll aufgerufen wurde. Dann wurde noch die letzte (oberste) Funktion aufgerufen in der der Crash erfolgte.

Nun versuchen wir mal die Liste zu interpretieren:
Formal gesehen ist der Fehler immer in der obersten Funktion zu finden, da diese ja die fehlerhafte Anweisung versucht hat auszuführen. Nur werden bei einem Funktionsaufruf auch noch Informationen übergeben (die Parameter) mit welchen die aufgerufene Funktion arbeitet. Wenn diese übergebenen Informationen nun fehlerhaft sind, dann ist wohl eher die Funktion schuld die den Funktionsaufruf macht. Diese Tatsache kann sich über mehrere Funktionsaufrufe hinziehen, sodass der Crash erst einige Funktionsaufrufe nach dem eigentlichen Fehler im Programm auftritt. Es ist also nicht immer die Oberste bzw eine der obersten Funktionen im Call Stack schuld.

Ihr habt sicher auch schon oft gehört dass wenn im Crash Report eine System dll wie z.B. die msvcrt.dll oder so auftaucht diese nicht schuld ist. Nun wisst ihr auch wieso diese auftauchen kann obwohl sie NICHT schuld ist.
Generell kann man sagen, dass System dlls fehlerfrei sind.

Schauen wir uns den Call Stack nun noch einmal genauer an. Wie schon erwähnt steht in jeder Zeile eine Funktion. Die Oberste wurde als letztes aufgerufen. Was bedeuten nun aber die Spalten?
  • 1. Address
    Das ist eine Speicheradresse an der Maschinencode steht. Und zwar ist es immer die Adresse an der der Funktionsaufruf für die nächste (in der Liste also der Funktion darüber) steht. Ausnahme ist die oberste Zeile: Hier stet wieder die Adresse an der der Ausnahmefehler aufgetreten ist.
  • 2. Module
    Der Pfad zur dll/exe zu welchem die Speicheradresse links daneben gehört.
  • 3. Comp
    Der Compiler mit dem die dll/exe kompiliert wurde. (Glaub ich zumindest oO)
  • 4. Symbol
    Das ist eigentlich die interesannteste Spalte für die Entwickler. Wenn die benötigten Informationen vorhanden sind steht hier sogar die Zeile des Source Codes an dem der Fehler aufgetreten ist. Ansonsten steht zumindest der Name der Funktion da, zu dem die Speicheradresse links gehört. Allerdings kommt es bei einer Standard-Installation von Miranda oft genug vor, dass diese Information völlig fehlt.
    Deswegen sollte man unbedingt die sogenannten "Symbol Files" zu den jeweiligen dll Dateien kopieren. Diese "Symbol Files" findet ihr auf der Testing Download Seite unter "Debug Symbols". Sie besitzen die Endung .pdb und sollten immer im gleichen Verzeichnis wie die zugehörigen Plugins (dll Dateien) liegen.
Der obige Crashreport wurde ohne passende Symbol Files erstellt. Als Beispiel hier noch ein Crash Report, der mit Symbol Files erstellt wurde:

Miranda crashed on Sunday, 19 Aug 2007 at 22:26:25.
===============================================================================
 F:\Miranda IM\miranda32.exe caused an Access Violation.
 Location 00416f3f in module F:\Miranda IM\miranda32.exe.
 Reading from location 21f52fe0.

 Registers:
-------------------------------------------------------------------------------
 eax=ffffffff ebx=00416e45 ecx=00000006 edx=7c91eb94 esi=21f52fe0 edi=2417ff1c
 eip=00416f3f esp=2417fed0 ebp=2417fee4 iopl=0         nv up ei pl nz ac pe nc
 cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010212

 Address    Module                                               Comp   Symbol
---------- ---------------------------------------------------- ------ ------------------
 00416F3F   F:\Miranda IM\miranda32.exe                          msvc   NetlibPacketRecverGetMore @ .\modules\netlib\netlibpktrecver.c:83
 00402DAE   F:\Miranda IM\miranda32.exe                          msvc   CallService @ .\core\modules.c:670
 121A429A   F:\Miranda IM\Plugins\aim.dll                        msvc   Unload
 121AE23D   F:\Miranda IM\Plugins\aim.dll                        unkn   _aim_links_exec@16
 77C0A243   C:\WINDOWS\system32\msvcrt.dll                       msvc   _endthread
 7C80B50B   C:\WINDOWS\system32\kernel32.dll                     msvc   GetModuleFileNameA

TO be continued....
« Letzte Änderung: 28. März 2010, 14:51:34 von R(i)SK »

Herzog

  • Big Boss
  • Administrator
  • ***
  • Beiträge: 2.935
  • Geschlecht: Männlich
  • backend-bitch
    • Profil anzeigen
    • station-23
Re: HILFE! Mein Miranda stürzt ab! Howto !
« Antwort #1 am: 24. August 2008, 16:39:54 »
Miranda stürzt immer noch ab!


Sollte dein Miranda immer noch abstürzen dann verwende bitte die Suche und benutze den Parameter miranda stürzt ab. Du wirst sehr viele Themen finden die den Titel Miranda stürzt ab tragen, poste dort einfach dein Problem. Erwarte aber nicht das du mehr Hilfe bekommst als aus dem Beitrag von eXiTus zu entnehmen ist, denn hättest du dich an die Anleitung oben gehalten würde dein Miranda nicht mehr abstürzen oder du könntest dein Problem auf ein oder mehrere Plugins bzw. deine Datenbank eingrenzen.

Alle neuen Themen die den Titel "miranda stürzt ab", "miranda stürzt beim starten ab", "HILFE mein miranda stürzt ab" etc. tragen, werde ich in Zukunft kommentarlos löschen und PN Anfragen zur Löschung ignorieren!




HowTo als wichtig markiert da sich diese Absturzthemen in letzter Zeit wieder enorm gehäuft haben.
« Letzte Änderung: 24. August 2008, 16:49:32 von R(i)SK »
... es muss eine Lösung geben, die man sich nicht so leicht erklären kann, das is so ...
... da muss irgendwas dahinter sein aber man weiß nicht genau was dahinter ist und was dahinter steckt, das ist die frage ...

... kein support! ...