Programm absturz

Alles rund um die Programmierung mit Qt
Antworten
dragon476
Beiträge: 9
Registriert: 10. Mai 2009 15:51

Programm absturz

Beitrag 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
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Debuggen oder Code posten(ggf demoprog) ->hellsehen können wir leider nicht
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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..
dragon476
Beiträge: 9
Registriert: 10. Mai 2009 15:51

Beitrag 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
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Kriegt er die lib geladen?
Wie ist dein Linker eingestellt? Ist die lib auch in release gebaut?
dragon476
Beiträge: 9
Registriert: 10. Mai 2009 15:51

Beitrag von dragon476 »

Jap die lib läd er
liegt auch im Release Ordner
Antworten