Seite 1 von 1

Programm absturz

Verfasst: 9. November 2009 00:01
von dragon476
Hi,
ich habe mit dem QT Creator ein Programm geschrieben, dass im Debugger auch funktioniert. Es macht was es soll und es erscheinen keine Meldungen beim Build.
Wenn ich allerdings die Release Version erstelle, stürzt das Programm ab. Es erscheint die Windowsmeldung Fehlerbericht senden bzw im Creator selber sieht man das:

Code: Alles auswählen

0	ntdll!RtlEnableEarlyCriticalSectionEventCreation	C:\Windows\system32\ntdll.dll	0	
1	ntdll!RtlEnableEarlyCriticalSectionEventCreation	C:\Windows\system32\ntdll.dll	0	
2	ntdll!NtAddBootEntry	C:\Windows\system32\ntdll.dll	0	
3	??		0	
4	??		0	
5	??		0	
6	??		0	
7	??		0	
Jemand eine Idee woran es liegen könnte, bzw wie ich herrausfinden kann, welche Stelle den Fehler verursacht?

mfG Maddin

Verfasst: 9. November 2009 12:04
von AuE
Debuggen oder Code posten(ggf demoprog) ->hellsehen können wir leider nicht

Verfasst: 9. November 2009 13:29
von solarix
Es macht was es soll und es erscheinen keine Meldungen beim Build.
Das heisst noch lange nicht, dass es fehlerfrei ist :wink:
Besonders uninitialisierte Variabeln (Pointer) sind tükisch..
Wenn ich allerdings die Release Version erstelle, stürzt das Programm ab
Wann? Gleich zu beginn oder erst später beim Ausführen einer bestimmten Funktion?

Ich bin kein Windows-Hacker, aber achte mal auf folgende Punkte:
  1. Debug/Release-Durcheinander von dynamischen Libraries. Achte auf den Linkeraufruf und kontrolliere, ob wirklich alle Libraries im Release-Mode erstellt wurden und up-to-date sind. Achte auch zur Runtime darauf, dass die richtigen Libraries genommen werden (DependencyWalker)
  2. Softwarefehler: Überprüfe Pointeroperationen (gegebenfalls mit einem Analyzer... unter Linux "valgrind", keine Ahnung was es unter Windows gibt)
  3. Evt. könnte sich auch eine nicht abgefangene Exception oder ein ASSERT im Release-Modus so auswirken..

Verfasst: 9. November 2009 20:49
von dragon476
Hi,
scheint wohl so als ob der Aufruf einer Funktion aus einer anderen Library zu dem Fehler führt. Hierbei handelt es sich um eine CTAPI Schnittstelle.
Definition:

Code: Alles auswählen

    typedef char (*CT_INIT) (USHORT, USHORT);
    typedef char (*CT_DATA) (USHORT, UCHAR*, UCHAR*, USHORT, UCHAR*, USHORT*, CHAR*);
    typedef char (*CT_CLOSE) (USHORT);
    HINSTANCE hDLL; CT_INIT CT_init; CT_DATA CT_data; CT_CLOSE CT_close;
Aufruf:

Code: Alles auswählen

    hDLL = LoadLibrary(L"ctpcsc32kv.dll");
    CT_init = (CT_INIT)GetProcAddress(hDLL,"CT_init");
    CT_data = (CT_DATA)GetProcAddress(hDLL,"CT_data");
    CT_close = (CT_CLOSE)GetProcAddress(hDLL,"CT_close");

unsigned char sad, dad;
    char response [MAXMEM]={0};
    unsigned short int ctn, lenr;
    char res;
    ctn=1;

    res = CT_init(ctn,0);

    unsigned char Reset_ICC[5] = {0x20,0x11,0x00,0x00,0x00}; //dad=1 sad=2
    unsigned char Request_ICC[7] = {0x20,0x12,0x01,0x01,0x01,0x0A,0x00}; //dad=1 sad=2
    unsigned char Get_Status[5] = {0x20,0x13,0x00,0x46,0x00}; //dad=1 sad=2
    unsigned char Select_File[11] = {0x00,0xA4,0x04,0x00,0x06,0xD2,0x80,0x00,0x00,0x01,0x01}; //dad=0 sad=2
    unsigned char Read_Binary[5] = {0x00,0xB0,0x00,0x00,0x00}; //dad=0 sad=2


    dad=1;
    sad=2;
    lenr=0;
    res=CT_data(ctn,&dad,&sad,5, Reset_ICC,&lenr,response);//Reset


            dad=1;
            sad=2;
            lenr=255;

            res=CT_data(ctn,&dad,&sad,7, Request_ICC,&lenr,response);//Request ICC


                    dad=1;
                    sad=2;
                    lenr=255;
                    res=CT_data(ctn,&dad,&sad,5, Get_Status,&lenr,response);//Get Status
                    if(res==0){

                            dad=0;
                            sad=2;
                            lenr=2000;
                            res=CT_data(ctn,&dad,&sad,11, Select_File,&lenr,response);//Select File

                            dad=0;
                            sad=2;
                            lenr=2000;
                            res=CT_data(ctn,&dad,&sad,5, Read_Binary,&lenr,response);//Read Binary


                            }

    CT_close(ctn);

In der Debug-Version erhalte ich die Daten der Karte und kann diese weiter verarbeiten. In der Release-Version stürzt das Prgm beim Ersten Aufruf der ct_data ab.
mfG Martin

Verfasst: 10. November 2009 07:43
von AuE
Kriegt er die lib geladen?
Wie ist dein Linker eingestellt? Ist die lib auch in release gebaut?

Verfasst: 10. November 2009 21:06
von dragon476
Jap die lib läd er
liegt auch im Release Ordner