Programm starten ohne Debuggen > Absturz



  • traceman schrieb:

    ...

    Welchen Compiler verwendest du?

    static void printHelp(char *progname) {}
    

    ist meines wissens nicht erlaubt - und überhaupt: guck dir mal an, wozu static da ist ^^

    bb



  • unskilled schrieb:

    traceman schrieb:

    ...

    Welchen Compiler verwendest du?

    static void printHelp(char *progname) {}
    

    ist meines wissens nicht erlaubt - und überhaupt: guck dir mal an, wozu static da ist ^^

    bb

    Schau du dir mal an wozu static da ist.



  • habs alles auskommentiert aber stürtzt leider immer noch ab ich benutze den nmake



  • unskilled schrieb:

    static void printHelp(char *progname) {}
    

    ist meines wissens nicht erlaubt - und überhaupt: guck dir mal an, wozu static da ist ^^

    Das hatte ich auch mal verwirrt 😉 Statische Nicht-Member-Funktionen sind einfach nur gegenüber anderen Modulen unsichtbar. Quasi wie in einem anonymen namespace gepackt.



  • traceman schrieb:

    habs alles auskommentiert aber stürtzt leider immer noch ab

    Dann hast du ja ein minmales Codebeispiel plus ein makefile die zusammen den Fehler ergeben. Zeigs uns. Ohne den auskommentierten Code.



  • ohne kommentare schaut es so aus

    #include <QtGui/QApplication>
    #define CONFIG_INDICATOR "-cf"
    
    #include <stdio.h>
    #include <iostream>
    
    int main(int argc, char *argv[])
    {
    
    	printf("hallo");
    	return 0;
    }
    

    also ich glaub mit nmake hab ich mich getäuscht ich mein ich verwende halt den compiler der mit visual studio 2003 .net mitkommt. Deswegen find ich auch kein make file in meinem Verzeichnis. Dafür hab ich ein Buildlog das sich im Programmverzeichnis neben den .obj Dateien befindet. Hier ein Auszug:

    UIC ParamIO\ui\parameterSetWidget.ui
    UIC ParamIO\ui\parameterDialog.ui
    Warning: name tab is already used
    UIC ui\upm_module_widget.ui
    RCC res\upmviewer.qrc
    MOC upm\upmodule.h
    MOC src\upm_tool_bar.h
    MOC src\upm_rst_map_widget.h
    MOC src\upm_module_widget.h
    MOC src\upm_module.h
    MOC src\upm_map_widget.h
    MOC src\upm_main_window.h
    MOC src\upm_instruments_widget.h
    MOC src\upm_instrument_widget.h
    MOC src\upm_gms_map_widget.h
    MOC src\upm_file_input_control.h
    MOC ParamIO\src\parameterdialog.h
    MOC src\nmea_logger.h
    MOC src\message_logger.h
    MOC src\mcs_message_view.h
    MOC src\mcs_dock_widget.h
    MOC upm\inputthread.h
    MOC src\digital_clock.h
    Kompilieren...
    qrc_upmviewer.cpp
    moc_upmodule.cpp
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\arch\qatomic_windows.h(133) : warning C4311: 'reinterpret_cast': Zeigerverkürzung von 'void *' zu 'long'
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\arch\qatomic_windows.h(133) : warning C4311: 'reinterpret_cast': Zeigerverkürzung von 'void *' zu 'long'
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\arch\qatomic_windows.h(133) : warning C4312: 'reinterpret_cast': Konvertierung von 'long' in größeren Typ 'void *'
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\arch\qatomic_windows.h(145) : warning C4311: 'reinterpret_cast': Zeigerverkürzung von 'void *' zu 'long'
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\arch\qatomic_windows.h(145) : warning C4312: 'reinterpret_cast': Konvertierung von 'long' in größeren Typ 'void *'
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\tools\qbytearray.h(327) : warning C4127: Bedingter Ausdruck ist konstant
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\tools\qbytearray.h(329) : warning C4127: Bedingter Ausdruck ist konstant
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\tools\qbytearray.h(331) : warning C4127: Bedingter Ausdruck ist konstant
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\tools\qbytearray.h(394) : warning C4127: Bedingter Ausdruck ist konstant
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\tools\qstring.h(579) : warning C4127: Bedingter Ausdruck ist konstant
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\tools\qstring.h(581) : warning C4127: Bedingter Ausdruck ist konstant
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\tools\qstring.h(583) : warning C4127: Bedingter Ausdruck ist konstant
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\tools\qstring.h(606) : warning C4127: Bedingter Ausdruck ist konstant
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\tools\qstring.h(732) : warning C4127: Bedingter Ausdruck ist konstant
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\tools\qhash.h(47) : warning C4127: Bedingter Ausdruck ist konstant
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\tools\qhash.h(56) : warning C4127: Bedingter Ausdruck ist konstant
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\tools\qpoint.h(147) : warning C4127: Bedingter Ausdruck ist konstant
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\tools\qpoint.h(155) : warning C4127: Bedingter Ausdruck ist konstant
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\tools\qpoint.h(316) : warning C4127: Bedingter Ausdruck ist konstant
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\tools\qpoint.h(324) : warning C4127: Bedingter Ausdruck ist konstant
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\tools\qsize.h(152) : warning C4127: Bedingter Ausdruck ist konstant
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\tools\qsize.h(159) : warning C4127: Bedingter Ausdruck ist konstant
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\tools\qsize.h(308) : warning C4127: Bedingter Ausdruck ist konstant
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\tools\qsize.h(315) : warning C4127: Bedingter Ausdruck ist konstant
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\kernel\qvariant.h(386) : warning C4127: Bedingter Ausdruck ist konstant
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\tools\qbitarray.h(92) : warning C4127: Bedingter Ausdruck ist konstant
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\tools\qbitarray.h(96) : warning C4127: Bedingter Ausdruck ist konstant
    c:\Qt\4.2.3\include\QtCore\../../src\corelib\tools\qbitarray.h(100) : warning C4127: Bedingter Ausdruck ist konstant
    (...)



  • Pack die vcproj dazu, da sind alle Einstellungen drin gespeichert.



  • Vermutlich gibt es in den anderen .cpp Files, deren Inhalt du uns vorenthältst, statisch instanzierte Objekte. Und wenigstens einer der Konstruktoren die da laufen wird Mist bauen.



  • Du tendierst also eher zu sagen das dort der Hund begraben ist, und nicht in der Konfiguration?

    Hier die vcproj datei:

    (...)
    
    \bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_XML_LIB -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;C:\Qt\4.2.3\include\QtCore&quot; -I&quot;C:\Qt\4.2.3\include\QtCore&quot; -I&quot;C:\Qt\4.2.3\include\QtNetwork&quot; -I&quot;C:\Qt\4.2.3\include\QtNetwork&quot; -I&quot;C:\Qt\4.2.3\include\QtGui&quot; -I&quot;C:\Qt\4.2.3\include\QtGui&quot; -I&quot;C:\Qt\4.2.3\include\QtOpenGL&quot; -I&quot;C:\Qt\4.2.3\include\QtOpenGL&quot; -I&quot;C:\Qt\4.2.3\include\QtXml&quot; -I&quot;C:\Qt\4.2.3\include\QtXml&quot; -I&quot;C:\Qt\4.2.3\include&quot; -I&quot;nmea\src&quot; -I&quot;src&quot; -I&quot;ParamIO\src&quot; -I&quot;MovingMap\src&quot; -I&quot;.&quot; -I&quot;C:\Qt\4.2.3\include\ActiveQt&quot; -I&quot;release&quot; -I&quot;ui_include&quot; -Ic:\Qt\4.2.3\mkspecs\default -D_MSC_VER=1300 -DWIN32 src\upm_module_widget.h -o release\moc_upm_module_widget.cpp
    "
    						AdditionalDependencies="c:\Qt\4.2.3\bin\moc.exe"
    						Outputs="release\moc_upm_module_widget.cpp"/>
    				</FileConfiguration>
    				<FileConfiguration
    					Name="Debug|Win32">
    					<Tool
    						Name="VCCustomBuildTool"
    						Description="MOC src\upm_module_widget.h"
    						CommandLine="c:\Qt\4.2.3\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_XML_LIB -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;C:\Qt\4.2.3\include\QtCore&quot; -I&quot;C:\Qt\4.2.3\include\QtCore&quot; -I&quot;C:\Qt\4.2.3\include\QtNetwork&quot; -I&quot;C:\Qt\4.2.3\include\QtNetwork&quot; -I&quot;C:\Qt\4.2.3\include\QtGui&quot; -I&quot;C:\Qt\4.2.3\include\QtGui&quot; -I&quot;C:\Qt\4.2.3\include\QtOpenGL&quot; -I&quot;C:\Qt\4.2.3\include\QtOpenGL&quot; -I&quot;C:\Qt\4.2.3\include\QtXml&quot; -I&quot;C:\Qt\4.2.3\include\QtXml&quot; -I&quot;C:\Qt\4.2.3\include&quot; -I&quot;nmea\src&quot; -I&quot;src&quot; -I&quot;ParamIO\src&quot; -I&quot;MovingMap\src&quot; -I&quot;.&quot; -I&quot;C:\Qt\4.2.3\include\ActiveQt&quot; -I&quot;debug&quot; -I&quot;ui_include&quot; -Ic:\Qt\4.2.3\mkspecs\default -D_MSC_VER=1300 -DWIN32 src\upm_module_widget.h -o debug\moc_upm_module_widget.cpp
    "
    						AdditionalDependencies="c:\Qt\4.2.3\bin\moc.exe"
    						Outputs="debug\moc_upm_module_widget.cpp"/>
    				</FileConfiguration>
    			</File>
    			<File
    				RelativePath="src\upm_rst_map_widget.h">
    				<FileConfiguration
    					Name="Release|Win32">
    					<Tool
    						Name="VCCustomBuildTool"
    						Description="MOC src\upm_rst_map_widget.h"
    						CommandLine="c:\Qt\4.2.3\bin\moc.exe  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_XML_LIB -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I&quot;C:\Qt\4.2.3\include\QtCore&quot; -I&quot;C:\Qt\4.2.3\include\QtCore&quot; -I&quot;C:\Qt\4.2.3\include\QtNetwork&quot; -I&quot;C:\Qt\4.2.3\include\QtNetwork&quot; -I&quot;C:\Qt\4.2.3\include\QtGui&quot; -I&quot;C:\Qt\4.2.3\include
    


  • Ich glaube du liegst richtig irgenwas muss mit den static variablen oder pointern nicht stimmen. Inzwischen bin ich zumindest mal soweit das ich die Konfiguration ausschliessen kann da ich Module rausgeschmissen hab und nun sukzessive dazuhänge



  • @traceman:
    Ja.

    Lass es einfach crashen, und häng dich dann auf das gecrashte Programm mit dem Debugger drauf. Normalerweise gibts genau dafür eh einen "Debug" Button im "Crash-Dialog", der einem das ganz komfortabel ermöglicht. Dann siehst du sofort genau wo & was das Problem ist.

    Sollte ein Failed Assertion Dialog kommen, drück einfach auch "Retry".

    p.S.: ich hoffe du weisst dass man auch Release Configs mit Debug-Informationen bauen kann 😉



  • hustbaer schrieb:

    @traceman:
    Ja.

    Lass es einfach crashen, und häng dich dann auf das gecrashte Programm mit dem Debugger drauf. Normalerweise gibts genau dafür eh einen "Debug" Button im "Crash-Dialog", der einem das ganz komfortabel ermöglicht. Dann siehst du sofort genau wo & was das Problem ist.

    Sollte ein Failed Assertion Dialog kommen, drück einfach auch "Retry".

    p.S.: ich hoffe du weisst dass man auch Release Configs mit Debug-Informationen bauen kann 😉

    Ja gut das Problem ist ja wenn ich den Debugger einschalte dann gehts ja aber und zwar völlig egal ob ich release oder debug config mache!! (Das ist ja das komische)
    Wenn ich aber Starten ohne Debug Information (wie gesagt unabhänig ob release oder debug CONFIG) starte dann bricht es ab. Im Prinzip dasselbe wie wenn ich im Explorer einfach auf die exe doppelklicke.

    Ich kann also nicht Debuggen und wenn der Abstutzt kommt meldet er einfach Eine Ausnahme ist eingetroffen blah blah und man kann nur auf OK oder Abbrechen klicken und nicht auf Retry.
    So und jetzt klick ich auf Abbrechen (um das programm zu debuggen).

    Darauf hin erschein ein Dialog "Just-In-Time Debuggen" Eine Ausnahme 'Unbehandelte W32-Ausnahme' ist in programm.exe aufgetreten. Mögliche Debugger..Neue Instanz von Visual Studio.Net 2003...möchten Sei den ausgewählen Debugger verwenden?...Klicke auf 'Ja'

    Jetzt öffnet sich VisualStudio ein Dialog erscheint: 'An den Prozess anhängen' Prozess [2364] c:\programm.exe...Wählen Sie die Programmtypen zum Debuggen aus: Common Language Runtime (selektiert) und Native (selektiert).. Klicke auf OK Dialog verschwindet und nun ist rechts ein Projekt "programm" ohne verzeichnisse, code und sonstiges zu sehen..auch auf allen Debugfenstern unten ist in keinem was zu sehen..in der Mitte ist einfach der graue Hintergrund von Visual Studio (also nix)...

    Sprich wie soll ich jetzt debuggen?



  • traceman schrieb:

    hustbaer schrieb:

    @traceman:
    Ja.

    Lass es einfach crashen, und häng dich dann auf das gecrashte Programm mit dem Debugger drauf. Normalerweise gibts genau dafür eh einen "Debug" Button im "Crash-Dialog", der einem das ganz komfortabel ermöglicht. Dann siehst du sofort genau wo & was das Problem ist.

    Sollte ein Failed Assertion Dialog kommen, drück einfach auch "Retry".

    p.S.: ich hoffe du weisst dass man auch Release Configs mit Debug-Informationen bauen kann 😉

    Ja gut das Problem ist ja wenn ich den Debugger einschalte dann gehts ja aber und zwar völlig egal ob ich release oder debug config mache!! (Das ist ja das komische)
    Wenn ich aber Starten ohne Debug Information (wie gesagt unabhänig ob release oder debug CONFIG) starte dann bricht es ab. Im Prinzip dasselbe wie wenn ich im Explorer einfach auf die exe doppelklicke.

    Ich kann also nicht Debuggen und wenn der Abstutzt kommt meldet er einfach Eine Ausnahme ist eingetroffen blah blah und man kann nur auf OK oder Abbrechen klicken und nicht auf Retry.
    So und jetzt klick ich auf Abbrechen (um das programm zu debuggen).

    Darauf hin erschein ein Dialog "Just-In-Time Debuggen" Eine Ausnahme 'Unbehandelte W32-Ausnahme' ist in programm.exe aufgetreten. Mögliche Debugger..Neue Instanz von Visual Studio.Net 2003...möchten Sei den ausgewählen Debugger verwenden?...Klicke auf 'Ja'

    Jetzt öffnet sich VisualStudio ein Dialog erscheint: 'An den Prozess anhängen' Prozess [2364] c:\programm.exe...Wählen Sie die Programmtypen zum Debuggen aus: Common Language Runtime (selektiert) und Native (selektiert).. Klicke auf OK Dialog verschwindet und nun ist rechts ein Projekt "programm" ohne verzeichnisse, code und sonstiges zu sehen..auch auf allen Debugfenstern unten ist in keinem was zu sehen..in der Mitte ist einfach der graue Hintergrund von Visual Studio (also nix)...

    Sprich wie soll ich jetzt debuggen?

    Du musst halt die Debug-Fenster einblenden, da du nicht deine Standard-Ansicht geladen hast. Ansonsten öffne doch einfach Visual Studio mit deinem Projekt bevor du die Anwendung ohne Debuggen startest, dann kannst du diese Instanz auch in dem Dialog auswählen und hast die Quellcodeansicht (vorausgesetzt, dass du eben Debugging-Informationen in der .EXE hast, ansonsten kannst du dir nur den Assembler-Code anschauen).



  • Tippgeber schrieb:

    Du musst halt die Debug-Fenster einblenden, da du nicht deine Standard-Ansicht geladen hast. Ansonsten öffne doch einfach Visual Studio mit deinem Projekt bevor du die Anwendung ohne Debuggen startest, dann kannst du diese Instanz auch in dem Dialog auswählen und hast die Quellcodeansicht (vorausgesetzt, dass du eben Debugging-Informationen in der .EXE hast, ansonsten kannst du dir nur den Assembler-Code anschauen).

    Jo danke schonmal für deine Antwort aber ich habs jetzt genauso gemacht wie dus gesagt hast und habe alle Debugfenster eingeblendet und die selbe Instanz verwendet in der auch das Prgramm ausgeführt wird. Nur es wird mir absolut nichst angezeigt. Da sich ja der Fehler nur 'ohne Debuginformationen starten' zeigt gibts auch keine Debuginformation zum debuggen. Und komischerweise zeigt er nicht mal den Assemblercode an.



  • traceman schrieb:

    Tippgeber schrieb:

    Du musst halt die Debug-Fenster einblenden, da du nicht deine Standard-Ansicht geladen hast. Ansonsten öffne doch einfach Visual Studio mit deinem Projekt bevor du die Anwendung ohne Debuggen startest, dann kannst du diese Instanz auch in dem Dialog auswählen und hast die Quellcodeansicht (vorausgesetzt, dass du eben Debugging-Informationen in der .EXE hast, ansonsten kannst du dir nur den Assembler-Code anschauen).

    Jo danke schonmal für deine Antwort aber ich habs jetzt genauso gemacht wie dus gesagt hast und habe alle Debugfenster eingeblendet und die selbe Instanz verwendet in der auch das Prgramm ausgeführt wird. Nur es wird mir absolut nichst angezeigt. Da sich ja der Fehler nur 'ohne Debuginformationen starten' zeigt gibts auch keine Debuginformation zum debuggen. Und komischerweise zeigt er nicht mal den Assemblercode an.

    Ok, in dem Fall gibt es kein Patentrezept mehr (falls es das jemals gab). Du könntest mit einer binären Suche Schrittweise deinen Quellcode reduzieren (einmal die eine Hälfte auskommentieren, dann die andere Hälfte usw.) bis du den Fehler im Idealfall auf eine einzige .cpp Datei reduziert hast und dort dann mit den globalen Variablen so fort fahren. Wenn du das auf eine einzige globale Variable zurückführen kannst, dann kannst du den Code der dort aufgerufen wird mit printf-debugging (in C++ wohl eher std::cout) überprüfen. Alternativ kannst du auch mal noch OllyDbg versuchen, ob der dir noch etwas sinnvolles anzeigen kann nachdem der Fehler aufgetreten ist.



  • Tippgeber schrieb:

    traceman schrieb:

    Tippgeber schrieb:

    Du musst halt die Debug-Fenster einblenden, da du nicht deine Standard-Ansicht geladen hast. Ansonsten öffne doch einfach Visual Studio mit deinem Projekt bevor du die Anwendung ohne Debuggen startest, dann kannst du diese Instanz auch in dem Dialog auswählen und hast die Quellcodeansicht (vorausgesetzt, dass du eben Debugging-Informationen in der .EXE hast, ansonsten kannst du dir nur den Assembler-Code anschauen).

    Jo danke schonmal für deine Antwort aber ich habs jetzt genauso gemacht wie dus gesagt hast und habe alle Debugfenster eingeblendet und die selbe Instanz verwendet in der auch das Prgramm ausgeführt wird. Nur es wird mir absolut nichst angezeigt. Da sich ja der Fehler nur 'ohne Debuginformationen starten' zeigt gibts auch keine Debuginformation zum debuggen. Und komischerweise zeigt er nicht mal den Assemblercode an.

    Ok, in dem Fall gibt es kein Patentrezept mehr (falls es das jemals gab). Du könntest mit einer binären Suche Schrittweise deinen Quellcode reduzieren (einmal die eine Hälfte auskommentieren, dann die andere Hälfte usw.) bis du den Fehler im Idealfall auf eine einzige .cpp Datei reduziert hast und dort dann mit den globalen Variablen so fort fahren. Wenn du das auf eine einzige globale Variable zurückführen kannst, dann kannst du den Code der dort aufgerufen wird mit printf-debugging (in C++ wohl eher std::cout) überprüfen. Alternativ kannst du auch mal noch OllyDbg versuchen, ob der dir noch etwas sinnvolles anzeigen kann nachdem der Fehler aufgetreten ist.

    Das ist ein guter Tipp und wahrscheinlcih auch der letzte Weg.. ich habe leider das programm von extern und muss nun eben schauen wie ich zurecht komme, da derjenige nicht zur Verfügung steht. Wahrscheinlich ist es besser nun alles zu reduzieren und nach und nach alles wieder dazuhängen. Gruss


Anmelden zum Antworten