Programmfehler seit Windowsversion 1903

  • VB.NET
  • .NET 4.5

Es gibt 90 Antworten in diesem Thema. Der letzte Beitrag () ist von Westerwälder.

    Mit dem CallerMemeberNameAttribute

    Deine Logfunktion sieht dann so aus:

    VB.NET-Quellcode

    1. Public Sub Log(String message, <CallerMemberName> Optional memberName As String = Nothing)


    memberName ist dann immer automatisch der Name der aufrufenden Methode bzw. Property.
    SIMDoku (Simple Dokumentenverwaltung)
    Mein Lernprojekt um die verschiedensten Facetten der .NET Entwicklung zu erkunden.
    GitHub

    VB Paradise Dark Theme
    Inoffizieller VB-Paradise Discord.

    C.O.D.E schrieb:

    den Namen einer Function innerhalb der Function
    Ab Framework 4.5 geht so was:
    Spoiler anzeigen

    C#-Quellcode

    1. using System;
    2. using System.Windows.Forms;
    3. namespace WindowsFormsApplication1
    4. {
    5. public partial class Form1 : Form
    6. {
    7. public Form1()
    8. {
    9. this.InitializeComponent();
    10. }
    11. private void button1_Click(object sender, EventArgs e)
    12. {
    13. // der Rest wird vom Compiler ausgefüllt
    14. Form1.TraceMessage("Something happened.");
    15. }
    16. /// <summary>
    17. /// Dies geht ab Framework 4.5
    18. /// </summary>
    19. /// <param name="message">eine eigene Message</param>
    20. /// <param name="memberName">Name der Prozedur</param>
    21. /// <param name="sourceFilePath">Pfad zur Datei</param>
    22. /// <param name="sourceLineNumber">Zeilennummer</param>
    23. public static void TraceMessage(string message,
    24. [System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
    25. [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
    26. [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)
    27. {
    28. System.Diagnostics.Trace.WriteLine("message: " + message);
    29. System.Diagnostics.Trace.WriteLine("member name: " + memberName); // button1_Click | .ctor | .cctor | Finalize
    30. System.Diagnostics.Trace.WriteLine("source file path: " + sourceFilePath); // Pfad zur Datei
    31. System.Diagnostics.Trace.WriteLine("source line number: " + sourceLineNumber); // Zeilennummer von TraceMessage("Something happened.");
    32. }
    33. }
    34. }
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    Den Timer ändern geht nicht, da in der Sub Form_Datum dann weitere Fehler entstehen.

    Denke das die Anwendung korrekt programmiert ist, da nach dem Zweitstart alles richtig läuft.
    Habe nach einem Globalen Fehlerhändler geschaut, aber nicht wirklich was brauchbares gefunden.

    Vielleicht weiß hier ja jemand was vernünftiges.
    Gruß Markus
    Wenn du im Menü/Projekt/Anwendung die Anwendungsereignisse anzeigen aufrufst, kannst du folgenden Ereignis-Code für deine Anwendung erstellen:

    VB.NET-Quellcode

    1. Imports Microsoft.VisualBasic.ApplicationServices
    2. Namespace My
    3. ' Für MyApplication sind folgende Ereignisse verfügbar:
    4. ' Startup: Wird beim Starten der Anwendung noch vor dem Erstellen des Startformulars ausgelöst.
    5. ' Shutdown: Wird nach dem Schließen aller Anwendungsformulare ausgelöst. Dieses Ereignis wird nicht ausgelöst, wenn die Anwendung mit einem Fehler beendet wird.
    6. ' UnhandledException: Wird bei einem Ausnahmefehler ausgelöst.
    7. ' StartupNextInstance: Wird beim Starten einer Einzelinstanzanwendung ausgelöst, wenn die Anwendung bereits aktiv ist.
    8. ' NetworkAvailabilityChanged: Wird beim Herstellen oder Trennen der Netzwerkverbindung ausgelöst.
    9. Partial Friend Class MyApplication
    10. Private Sub MyApplication_UnhandledException(sender As Object, e As UnhandledExceptionEventArgs) Handles Me.UnhandledException
    11. End Sub
    12. End Class
    13. End Namespace
    @VB1963 Hatte ich bereits in Post #2 gefragt.
    Allerdings dürfte der nicht anspringen, denn bei einer solchen Exception kommt der allbekannte System-Dialog und das Programm wird beendet.
    @Westerwälder Mit Spekulatius und Glaskugel wage ich mal folgende Hypothese:
    Ein Thread wartet auf die Beendigung eines anderen und steckt in einem Dead-Lock.
    Gib mal im Log jeweils noch die aktuelle Thread-ID mit aus.
    docs.microsoft.com/de-de/dotne…ead?view=netframework-4.8
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!

    Westerwälder schrieb:

    Vielleicht weiß hier ja jemand was vernünftiges.

    Vielleicht hast du ja meinen Beitrag überlesen und einfach ignoriert, aber in Visual Studio auf Pause zu drücken, genau zu sehen wo welcher Thread steht, alle Stack-Traces zu haben, jeden Wert von jeder Variablen anschauen können. Was geht denn da noch vernünftiger?
    Du musst einfach nach dem Starten des Rechners das Projekt öffnen und im Menü den Debugger anhängen:

    Wenn die Exe dem Projekt entspricht erkennt VS das und es ist so als hättest du es direkt über VS mit [F5] gestartet. Du könntest dann auch noch im Exception-Fenster alle Exceptions einschalten, damit er bei jeder Exception anhält auch wenn diese in einem Try Catch liegt um zu sehen, dass hier etwas passiert ist.
    Hallo Bluespide, in meiner kostenlose Version von VB 2017 kann ich diese Option nicht finden.
    VB1963, danke für die Hife aber wie Rod schon ahnte, wird in der Fehlersub nichts ausgelöst.

    Rod: Auch wenn ich alle Aufgaben deaktivere, bleibt das Programm nach dem Erstlauf stehen.
    Gruß Markus
    @Westerwälder Was ist, wenn Du den Erstlauf im Debug-Mode im Studio ausführst?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    Habe ich auch schon versucht, Einschlaf nach ca. 70 Sekunden ohne Fehlermeldung.

    Die Sache ist doch, warum nur nach dem booten und dem Windowsupdate?
    Falls ein Fehler im Code enthalten ist, müßte es doch beim Zweitstart auch knallen.
    Oder sehe ich das falsch?
    Gruß Markus
    @Westerwälder Der Fehler liegt möglicherweise im Framework, ich denke mal, wenn eine Assembly erstmals nachgeladen wird.
    Wenn Du im "Einschlafzustand" ein Break machst, wo steht er da?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!

    Westerwälder schrieb:

    Du meinst sicher nun im Debug-Modus?
    Hab ich doch in Post #29 geschrieben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    Guten Morgen,

    habe die IDE nun vor der Exe gestartet und mir mal die Fehlerliste anzeigen lassen:
    Folgende Hinweise finde ich hier:

    Warnung Die Komponente "Microsoft.Office.Core", auf die verwiesen wird, wurde nicht gefunden. MBHome

    Warnung Die Abhängigkeiten des COM-Verweises "Microsoft.Office.Interop.Outlook" konnten nicht ermittelt werden. Fehler beim Laden der Typbibliothek/DLL. (Ausnahme von HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY)) MBHome

    Warnung Die Typbibliothek für den Verweis "Microsoft.Office.Core" kann nicht geladen werden. Fehler beim Laden der Typbibliothek/DLL. (Ausnahme von HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY)) MBHome

    Warnung BC40059 Es wurde ein Verweis auf die eingebettete Interopassembly "Interop.WMPLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" aufgrund eines indirekten Verweises auf diese Assembly aus Assembly "AxInterop.WMPLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" erstellt. Ändern Sie ggf. für beide Assemblys die Eigenschaft "Interoptypen einbetten". MBHome


    Es liegt wohl an der Microsoft Office 16.0 Object Libary.
    Im alten Programm MBSoft konnte ich hier den Verweispfad angeben.
    Wenn ich im neuen Programm MBHome den gleichen Pfad wähle, wird die office.dll nicht angeboten (siehe Bilder)
    Bilder
    • MBHome.png

      184,62 kB, 1.920×1.080, 32 mal angesehen
    • MBSoft.png

      185,09 kB, 1.920×1.080, 45 mal angesehen
    Gruß Markus

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Westerwälder“ ()

    Guten Morgen,

    die Microsoft.Office.Core habe ich komplett rausgenommen.
    Nun bekomme ich die anderen Warnungen nicht mehr angezeigt.

    Rod: Wenn Du im "Einschlafzustand" ein Break machst, wo steht er da?
    Finde die Option nicht. Liegt es wieder an der kostenlose VB-Version?
    Gruß Markus
    @Westerwälder Dann machst Du das im Menü des Studios:
    Debuggen - alle unterbrechen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    @Westerwälder Dann machst Du das im Menü des Studios:
    Debuggen - alle unterbrechen.


    Ich hatte diese Funktion in VB6 damals. Ich finde sie ebenfalls nicht.

    Also das er Codezeile für Codezeile ausführt und man dabei verfolgen kann.

    Ich hätte gedacht das du "Einzelschritt" meinst, wenn ich es damit Starte, startet er ganz Normal. ;(
    Bilder
    • Unbenannt.png

      17,49 kB, 424×494, 26 mal angesehen
    Liebe Grüße,
    C.O.D.E

    Testautomatisierung (TA):

    5%
    Du findest meinen Beitrag Hilfreich? :thumbup: Dann drück auf Hilfreich!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „C.O.D.E“ ()

    @Westerwälder Dann musst Du die Log-Methode ausbauen.
    @C.O.D.E Sehr merkwürdig.
    Sieh mal nach, ob Du diesen Befehl dem Studio hinzufügen kannst: Extras -> Anpassen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    @C.O.D.E Sehr merkwürdig.
    Sieh mal nach, ob Du diesen Befehl dem Studio hinzufügen kannst: Extras -> Anpassen.


    Ich habe versucht den Befehl hinzuzufügen, leider Existiert ein solcher Befehl bei mir nicht. :|

    Wärst du so lieb und Uploadest mal einen Screenshot wie das Menü bei dir aussieht?
    Und welchen Schritt du meinst? Und Welche Visual Studio Version benutzt du?

    Das würde mir sehr weiterhelfen. :thumbsup: Danke für deine Hilfe!!

    Okay, hat sich geklärt. Man muss erst einen Haltepunkt mit F9 setzen. Dann Startet man das Programm mit F5 und kann dann Zeile für Zeile mit F8 Debuggen.

    Danke für deine Hilfe! :)
    Liebe Grüße,
    C.O.D.E

    Testautomatisierung (TA):

    5%
    Du findest meinen Beitrag Hilfreich? :thumbup: Dann drück auf Hilfreich!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „C.O.D.E“ ()