none
Bug im VS2008: Problem mit dem Debugger unter Windows 7 64bit (Keine Anzeige von Laufzeitfehlern) RRS feed

  • Frage

  • <Edit>
    Da keiner auf meinen Post reagiert, habe ich zwangsläufig selber ein wenig getestet:

    Bug: Unter Windows 7 64bit (alle von mir getesteten Versionen) wird während des Debuggens beim Auftreten eines Laufzeitfehlers die Ausführung von Programmcode nicht korrekt unterbrochen.

    Beschreibung: Wenn man unter anderen Betriebssystemen (auch Windows 7 x86) ein Projekt im Debugmodus ausführt, wird bei einem Laufzeitfehler die Ausführung angehalten, und ein Fenster mit der Fehlerbeschreibung erscheint. Man kann den Code korrigieren und fortsetzen. Nicht so unter Windows 7 64bit. Die Ausführung wird nicht unterbrochen, und sämtlicher dahinter folgender Code wird nicht mehr ausgeführt.

    Beispiel: Weiter unten findet man Code mit einer Division durch Null. Diese Division führt nicht zur Anzeige eines Laufzeitfehlers, die darauf folgende MessageBox wird ebenfalls nicht ausgeführt. Man erhält sofort ein leeres Formular angezeigt. Dieses Problem tritt nur während des Debuggens auf.

    Lösung: Bisher ist mir kein Bugfix bekannt. Man sollte auf die Softwareentwicklung unter einem 64bit Windows 7 verzichten und auf Windows 7 x86 zurück greifen. Außer man programmiert fehlerlosen Code. Mit ein bischen Glück reagiert ja Microsoft mal auf diese Meldung.
    </Edit>

    Hallo,

    ich habe folgendes Problem mit dem Debugger unter Windows 7 64bit. Es ist ein englisches System mit deutscher Benutzeroberfläche. Installiert ist VS2008 SP1 mit den verfügbaren Updates (von Microsoft-Updates). Beim Debuggen tritt ein Problem auf und ich hoffe, jemand hat eine Idee. Mein Vorgehen, um den Fehler jederzeit zu erhalten:

    1. Erstellen eines neuen C# Projektes mit Verweisen auf System und System.Windows.Forms
    2. Erzeugen einer Datei mit folgendem Inhalt (Man kann eine Windows Forms Anwendung erstellen und Program.cs mit diesem Inhalt ersetzen):

    using System;
    using System.Windows.Forms;
    
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new NoRuntimeException());
        }
    }
    
    public class NoRuntimeException : Form
    {
        public NoRuntimeException()
        {
            this.Load += new System.EventHandler(this._Load);
        }
    
        private void _Load(object sender, EventArgs e)
        {
            MessageBox.Show("Diese MessageBox wird angezeigt.");
            int b = 0;
            int a = 1 / b;
            MessageBox.Show("Diese nie!");
        }
    }


    3. Beim ersten Ausführen bekomme ich einen Fehler angezeigt: "vshost.exe funktioniert nicht mehr" und eine Meldung: "Es wurde festgestellt, dass dieses Programm nicht richtig ausgeführt wird. Auf dieses Programm wurden Kompatibilitätseinstellungen angewendet, um das Problem zu beheben..."
    4. Beim nächsten Ausführen erscheint kein Fehler mehr, aber alle Befehle hinter int a = 1 / b; werden kommentarlos nicht ausgeführt. Das passiert bei allen Runtimefehlern und macht das Programmieren unter Windows 7 für mich unmöglich.

    Übrigens: Fügt man den Code mit dem Fehler in "static void main()" oder in "public NoRuntimeException()" ein, verhält sich VS2008 so, wie ich es von Windows XP gewohnt bin. Außerdem habe ich die Einstellung Any CPU bereits durch x86 ersetzt.

    Vielen Dank

    KM
    • Bearbeitet karmau Montag, 22. März 2010 12:22
    Sonntag, 6. Dezember 2009 19:06

Antworten

  • Sind die entsprechenden Haken im Menü Debug -> Exceptions gesetzt?
    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Montag, 29. März 2010 06:44
    Moderator

Alle Antworten

  • Mein Problem hat sich leider nicht von alleine gelöst. Auch eine komplette Neuinstallation und warten auf Updates hat sich bis jetzt nicht gelohnt. Nochmal zu meinem System: Es ist ein englisches Windows 7 64bit mit deutschem Langpack und Visual Studio 2008 Pro. Vielleicht kann ja wenigstens jemand mein Problem mit ähnlichen Voraussetzungen bestätigen oder schreiben, daß bei ihm alles funktioniert. KM
    Samstag, 20. März 2010 19:24
  • Hallo, ich bitte nochmals darum, daß sich mal jemand 10 Minuten Zeit nimmt und versucht, den hier beschriebenen Fehler nachzuvollziehen. Das können alle probieren, die ein Windows 7 64bit haben. Die Anleitung dazu findet man im ersten Posting. Mit diesem Bug ist Debuggen nämlich fast unmöglich. Vielen Dank. KM
    Sonntag, 28. März 2010 10:05
  • Sind die entsprechenden Haken im Menü Debug -> Exceptions gesetzt?
    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Montag, 29. März 2010 06:43
    Moderator
  • Sind die entsprechenden Haken im Menü Debug -> Exceptions gesetzt?
    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Montag, 29. März 2010 06:44
    Moderator
  • Hallo,

    bisher habe ich diesen Menüpunkt nicht wahrgenommen - Danke für den Hinweis. Wenn bei "Ausgelöst" ein Haken gesetzt wird, funktioniert es endlich wie gewohnt. Nochmal Danke.

    Aber nun habe ich noch eine Frage: Warum funktioniert Win 7 64bit anders als Win 7 32bit? Welche Auswirkung sollen die Haken denn eigentlich haben? Unter einem 32bit System müssen die Haken nicht gesetzt werden und dennoch wird der Code bei einem Ausnahmefehler unterbrochen. Nach einer frischen Installation vom Visual Studio 2008 sind übrigens alle Haken bei "Vom Benutzercode unbehandelt" gesetzt, alle bei "Ausgelöst" hingegen nicht. Damit funktioniert es unter 32bit, unter 64bit jedoch nicht.

    Mein Fazit: Visual Sudio 8 verhält sich unter einem Win 7 64bit System beim Debuggen anders, als unter einem 32bit System. Das ist dann zwar mit dem Hinweis von M. Richter zu umgehen, aber in Ordnung ist dieses Verhalten in meinen Augen nicht.

    KM
    Dienstag, 30. März 2010 11:56
  • Ganz klar ist mir das auch nicht. Vor alem ist die deutsche Übersetzung dieser Dialoge so mies, dass ich sieicht mit meiner englischen zusammenbringe ;)

    Ich vermute, dass hier ach ein Unterschied darin besteht, dass VS selbst ein 32bit Programm ist.

    Aber das Problem ist ja gelöst... ;)


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Mittwoch, 31. März 2010 06:57
    Moderator