Debugging-Probleme: Access Violations im Assembler-Code



  • Hallo, liebe Leute!
    Ich habe folgende PRobleme beim Debugging mit Visual C++ 6:
    Ich bin dabei ein VST-Plugin zu schreibe, also eine .dll.
    Im Host-Programm (Cubase SE) funktioniert es manchmal einigermaßen, manchmal werden nur die Hälfte der Controller-Objekte angezeigt und oft, aber nicht immer tritt ein schwerwiegender Fehler auf, wenn ich einen Controller anfasse.
    Welches der oben genannten Verhalten eintritt hängt teilweise davon ab, ob ich irgendwo eine lokale variable deklariere, oder nicht. Also völlig irrationales Verhalten - der Fehler muss irgendwo ganz tief stecken.
    Jetzt das eigentliche Problem: Beim debuggen erhalte ich jede Menge Access Violations, deren Auftreten im Code ich aber nur in kryptischen Prozessen und Assembler angezeigt bekomme. Also keinen Hinweis für mich, wo ich denn die Access Violations produziere.
    Kennt irgendjemand das Problem oder weiß, wie ich weiterkommen kann?
    Selbstverständlich habe ich meinen Code schon so weit es geht durchsucht, aber ohne konkreten Hinweis, wo etwas falsch ist, ist er einfach zu komplex.
    Danke und Viele Grüße
    Sören



  • Such mal im Menü von VC++ nach "Aufrufliste" oder "Call Stack". Dort kannst Du sehen, wer die Funktion, die nur im Assemblercode vorliegt, aufgerufen hat. So kannst Du Dich schrittweise rückwärts bis in Deine eigenen Funktionen durchhangeln.



  • Hi!
    Die Aufrufliste sieht ungefähr so aus:

    NTDLL! 7c91eafa()
    NTDLL! 7c91378b()
    NTDLL! 7c91eafa()
    NTDLL! 7c91378b()

    und das in tausendfacher Ausführung. Also bis zu meinem Code komme ich gar nicht.



  • Das hab ich bei manchen Plugins auch schon erlebt, es gibt wohl solche Stellen in Windows dlls, da kannst du eigentlich dann einfach weiter debuggen. musst halt googlen, ob dein fehler auch zu denen gehört.



  • so so schrieb:

    ...da kannst du eigentlich dann einfach weiter debuggen.

    Wie einfach weiter debuggen?
    Der Debug hält an, wenn die Access Violation auftritt.

    so so schrieb:

    musst halt googlen, ob dein fehler auch zu denen gehört.

    Versteh ich nicht. Meinst du es könnte an den Windows dlls liegen, nicht an meiner dll?

    Grüße
    Sören



  • soerenP schrieb:

    so so schrieb:

    ...da kannst du eigentlich dann einfach weiter debuggen.

    Wie einfach weiter debuggen?
    Der Debug hält an, wenn die Access Violation auftritt.

    Wenn es mit F5 weitert geht, dann könnte es einer von diesen Fehlern sein, wenn er nicht weiter machen will, dann nicht. Da kommen manchmal auch ne ganze Menge nacheinander.

    so so schrieb:

    musst halt googlen, ob dein fehler auch zu denen gehört.

    Versteh ich nicht. Meinst du es könnte an den Windows dlls liegen, nicht an meiner dll?

    ja



  • Das ist quatsch. Guck dir, wie jaxon schon sagte mal den Call-Stack an und zeig uns die letzte Funktion die aufgerufen wurde.



  • Ich kann den Fehler gerade nicht reproduzieren. Es ist halt eine der NTDLL-Funktionen. Ist es wichtig welche?



  • (D)Evil schrieb:

    Das ist quatsch.

    warum?

    Guck dir, wie jaxon schon sagte mal den Call-Stack an und zeig uns die letzte Funktion die aufgerufen wurde.

    steht da oben 🙄



  • Weil du davon ausgehen kannst, dass die Windows DLLs erstmal keine Bugs haben (wenn dann wären die von Microsoft, wenn se bekannt sind, schon per Windows Update ausgemerzt worden).

    Hi!
    Die Aufrufliste sieht ungefähr so aus:

    Call-Stack schrieb:

    NTDLL! 7c91eafa()
    NTDLL! 7c91378b()
    NTDLL! 7c91eafa()
    NTDLL! 7c91378b()

    und das in tausendfacher Ausführung. Bis zu meinem Code komme ich also gar nicht.

    Dann geh "Step" weise durch ... Menu -> Debug -> Step it ... und das solange, bis die Access Volation kommt. Die letzte Stelle die du dann zu Gesicht bekommen hast sollte dann zu 80% den Fehler enthalten ...



  • Kannst davon ausgehen, dass ich dass nicht nur so geschrieben hab.
    http://www.debuginfo.com/tips/userbpntdll.html

    Kann natürlich auch ein anderer Fehler in seinem Code sein, muss aber nicht.



  • Jaaaa....
    Besonders der misteriöse Breakpoint, den ich nicht gesetzt habe, kommt auch des öfteren vor...
    Vielen Dank
    Ich glaube, der link ist (wenn ich Noob ihn erstmal komplett verstanden habe) ganz nützlich.
    tschö
    Sören



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten