Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

11.12.2013, 19:18

(C++) Fenster öffnen im Debug-Menü geht nicht.

Hi Community,
Ich hab (mal wieder) ein Problem mit meiner Entwicklungsumgebung Visual Stidio 2012. Es ist kein großen Problem, doch hindert das Problem mich an meinem Fortschritt.

Das ist der Code den ich durch das Debug-Menü unter "Starten ohne Debugging" nicht öffnen kann. Das ist ein Fensterprogramm, dass ich aus dem Buch "C++ für Spieleprogrammierer" von Heiko Kalista abgetippt habe (Kommentare auf Englisch übersetzt):


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include<windows.h>

//Prototype of Callback-Function
LRESULT CALLBACK WindowProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

//Main Program

int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpcmdline, int ncmdshow)
{
    WNDCLASSEX windowclass; //Structure for Windowsettings
    HWND       hWnd;        //Window-Handle
    MSG        message;     //Message

    //The Classname of the Window is free to choose
    const TCHAR szClassName[] = TEXT("Standard Window");

    //Fill in Structures with your Settings

    //Buffer size of Structure
    windowclass.cbSize = sizeof (WNDCLASSEX);

    //Redraw Window if moved
    windowclass.style = CS_HREDRAW | CS_VREDRAW;

    //Pointer on Callback-Function
    windowclass.lpfnWndProc = WindowProc;
    
    //More Settings
    windowclass.cbClsExtra;
    windowclass.cbWndExtra;

    //Save Intstance
    windowclass.hInstance = hInst;

    //Set Icons and Cursors
    windowclass.hIcon   = LoadIcon (NULL, IDI_APPLICATION);
    windowclass.hIconSm = LoadIcon (NULL, IDI_WINLOGO);
    windowclass.hCursor = LoadIcon (NULL, IDC_WAIT);

    //Set Background Colour
    windowclass.hbrBackground = (HBRUSH)COLOR_BACKGROUND+1;

    //Menue
    windowclass.lpszMenuName = NULL;

    //Class Name
    windowclass.lpszClassName = szClassName;

    //Register Windowclass
    if (!RegisterClassEx (&windowclass) )
        return (0);

    //CreateWindow
    hWnd = CreateWindowEx (NULL,
        szClassName,
        TEXT("Das erste Fenster"),
        WS_OVERLAPPEDWINDOW | WS_VISIBLE,
        100, 100,
        300, 250,
        NULL,
        NULL,
        hInst,
        NULL);

    //Check, if all worked
    if (hWnd == NULL)
        return (0);

    //"Heartbeat" of Program,
    //All Messages will be fetched,
    //translated and redirected here.
    while (GetMessage (&message, NULL, 0, 0) )
    {
        TranslateMessage (&message);
        DispatchMessage (&message);

    }
    //End Program
    return(int)(message.wParam);

}//WinMain

//Callback-Function for Message Processing
//
LRESULT CALLBACK WindowProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    //Analysing Message
    switch (message)
    {
        //Closing Window
    case WM_DESTROY:
        {
            //Send Message to end
            PostQuitMessage (0);
            return(0);
        }
    //Key was pressed
    case WM_KEYDOWN:
        {
            //Switching for each Key pressed
            switch (wParam)
            {
                //"Esc" was pressed
            case VK_ESCAPE:
                {
                    //Send Message to end
                    PostQuitMessage (0);
                    return (0);
                }
            }
        } break;
    }

    //Messages which are not processed by the user
    //will be processed by Windows
    return (DefWindowProc (hWnd, message, wParam, lParam) );

} //WindowProc



Bei den Konsolenprogrammen hat der oben beschriebene Vorgang immer funktioniert, doch jetzt funktioniert er beim Win-Programm nicht.

Zuletzt noch die Frage: Wie öffne ich nun das Programm?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

11.12.2013, 21:50

Dann starte es doch mal mit Debugging und schau ab welcher Zeile es Ärger macht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

12.12.2013, 06:49

Debug-Ausgabe

Dann starte es doch mal mit Debugging und schau ab welcher Zeile es Ärger macht.


Das passierte nachdem ich den "Lokaler Windows-Debugger" Button geklickt habe:



"Erstes Fenster.exe" (Win32): "C:\Users\user\Documents\Visual Studio 2012\Projects\Erstes Fenster\Debug\Erstes Fenster.exe" geladen. Symbole wurden geladen.
"Erstes Fenster.exe" (Win32): "C:\Windows\SysWOW64\ntdll.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Erstes Fenster.exe" (Win32): "C:\Windows\SysWOW64\kernel32.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Erstes Fenster.exe" (Win32): "C:\Windows\SysWOW64\KernelBase.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Erstes Fenster.exe" (Win32): "C:\Windows\SysWOW64\apphelp.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
SHIMVIEW: ShimInfo(Complete)
"Erstes Fenster.exe" (Win32): "C:\Windows\SysWOW64\user32.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Erstes Fenster.exe" (Win32): "C:\Windows\SysWOW64\msvcr110d.dll" geladen. Symbole wurden geladen.
"Erstes Fenster.exe" (Win32): "C:\Windows\SysWOW64\gdi32.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Erstes Fenster.exe" (Win32): "C:\Windows\SysWOW64\imm32.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Erstes Fenster.exe" (Win32): "C:\Windows\SysWOW64\msctf.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Erstes Fenster.exe" (Win32): "C:\Windows\SysWOW64\msvcrt.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
Das Programm "[6152] Erstes Fenster.exe" wurde mit Code 0 (0x0) beendet.




Und nichts passierte wenn ich unter dem Debug-Menü auf den "Starten ohne Debugging" Button geklickt habe.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

12.12.2013, 06:58

Und hast Du mal einen Breakpoint gesetzt und bist Schritt für Schritt ab der ersten Zeile Deines Programms durchgegangen?
Hilfreich wäre es übrigens gewesen das Programm nicht immer mit Code 0 zu beenden, sondern für jeden Fehler-Fall dort einen eigenen anzugeben. Dann wüssten wir jetzt nämlich schon mehr.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

5

12.12.2013, 07:06

und wie?

Und hast Du mal einen Breakpoint gesetzt und bist Schritt für Schritt ab der ersten Zeile Deines Programms durchgegangen?
Hilfreich wäre es übrigens gewesen das Programm nicht immer mit Code 0 zu beenden, sondern für jeden Fehler-Fall dort einen eigenen anzugeben. Dann wüssten wir jetzt nämlich schon mehr.


Da müsste mir jemand mal helfen, denn ich habe nur das abgetippt was im Buch stand. Ich hatte auch sonst keine Fehlermeldungen vom Compiler bekommen.
Ich weiß nämlich auch nicht was ein Breakpoint ist.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

12.12.2013, 07:11

Geh mit dem Cursor in die erste Zeile in WinMain und drück F9. Dann führ das Programm mit Debugging aus.
Die ganzen "return 0" ändern in etwas, was mehr aussagt. Z.B. return -1 und return -2. Verschiedene Werte benutzen, nicht überall dieselben, sonst weiß man wieder gar nichts.
Mit F10 und F11 kannst Du schrittweise durchgehen, jede Zeile einzeln ausführen. Ich kann mir gar nicht vorstellen, dass das im Buch nirgends erwähnt wird, das ist DAS Tool jedes Entwicklers schlechthin.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige