Probleme mit StandaloneExe



  • Hallo zusammen,

    habe ein Projekt, welches eigentlich fehlerfrei läuft. Lass ich mir jedoch die StandaloneExe bilden, so entstehen Fehler, welche ich nicht nachvollziehen kann. Das Projekt besteht prinzipiell aus mehreren DLL's. Wenn eine dieser DLL's mehrmals (nicht beim ersten oder zweiten Mal) aufgerufen wird, so will mir XP erzählen, dass nicht genügend Arbeitsspeicher vorhanden sei. Irgendwo ist also der Wurm drin. Der Codeguard erzeugt ein Logfile, in welchem Fehlermeldungen wie

    Error 00001. 0x310000 (Thread 0x0BE8):
    Bad parameter: A bad memory block (0xD9C000) has been passed to the function.
    Error 00002. 0x400000 (Thread 0x0BE8):
    Exception 0xC0000005: Access violation at 0x0.
    Call Tree:
    0x0CD157B0(=CG32.DLL:0x01:0147B0)
    0x0CD17126(=CG32.DLL:0x01:016126)
    0x0CD13FED(=CG32.DLL:0x01:012FED)
    0x0CD016FE(=CG32.DLL:0x01:0006FE)
    0x0CD01774(=CG32.DLL:0x01:000774)
    0x0045441B(=P_KinetikExplorer.exe:0x01:05341B)

    angezeigt werden. Leider kann ich damit gar nichts anfangen. Ich weiß, dass eine Fehleranalyse nicht einfach ist, aber vielleicht kann jemand was damit anfangen und kann mir sagen um welchen Fehler es sich handelt.Aus der BCB 6 Hilfe werd ich nicht so wirklich schlau.
    Ich wäre auch schon sehr dankbar, wenn mir jemand sagen könnte, wie man am besten systematisch vorgehen kann. Das Projekt ist relativ groß.

    Danke im Voraus

    Sebastian



  • Schetal schrieb:

    habe ein Projekt, welches eigentlich fehlerfrei läuft. Lass ich mir jedoch die StandaloneExe bilden, so entstehen Fehler, welche ich nicht nachvollziehen kann.

    Das passiert i.d.R., weil in der Debug-Version zuweilen Variablen initialisiert werden, in der Release-Version nicht. Außerdem ist der Memory-Manager in der Debug-Version (und offenbar auch in der DLL-Version) AFAIK großzügiger, so daß Zugriffe auf eigentlich nicht allozierten Speicher ggf. nicht zu einer AV-Exception führen.

    Schetal schrieb:

    Das Projekt besteht prinzipiell aus mehreren DLL's. Wenn eine dieser DLL's mehrmals (nicht beim ersten oder zweiten Mal) aufgerufen wird, so will mir XP erzählen, dass nicht genügend Arbeitsspeicher vorhanden sei.

    ... und bekanntlich ist "Not enough memory" die Standardfehlermeldung für jeden Fehler, den sich der Programmierer nicht erklären konnte 😉

    Schetal schrieb:

    Error 00001. 0x310000 (Thread 0x0BE8):
    Bad parameter: A bad memory block (0xD9C000) has been passed to the function.
    Error 00002. 0x400000 (Thread 0x0BE8):
    Exception 0xC0000005: Access violation at 0x0.

    Finde ich eigentlich recht eindeutig: eine Funktion ruft eine andere Funktion mit einem Zeiger auf nicht allozierten Speicher auf. Diese versucht darauf zuzugreifen, wodurch eine AV-Exception entsteht.

    Schetal schrieb:

    Ich wäre auch schon sehr dankbar, wenn mir jemand sagen könnte, wie man am besten systematisch vorgehen kann. Das Projekt ist relativ groß.

    Zunächst könntest du die Funktionen, die du verdächtigst, mit Breakpoints versehen und dann mit dem Debugger durchsteppen.



  • Nimm mal Codeguard aus deinem Projekt raus.


Anmelden zum Antworten