Jeg har prøvet at indsætte den kode i min app.config, men så får jeg bare en "ConfigurationErrorsException was unhandled" når jeg forsøger at starte programmet i Visual Studio :-(
min app.config ser sådan ud, det er kun linjen med jitDebugging jeg har tilføjet manuelt, resten var der i forvejen.
hmm den holdt op med at kaste ConfigurationErrorsExceptions da jeg flyttede jitDebugging linjen ned så den var næst-sidste linje, altså lige over "</configuration>"
- jitDebuggeren kommer dog fortsat frem ved fejl :-/
Det er .net 2.0 og det kører med administrative rettigheder.
Ved en kombination af at rette en reg-nøgle, ændre visual studio indstillinger og ændre i machine.config har jeg fået den til at vise en anden dialog ved fejl.
Det virkede dog først da jeg enablede jit i machine.config og i projektet (under tools -> debugging -> just-in-time), så jeg tror jeg har misforstået den oprindelige dialog. Som jeg forstår det NU, var just faktisk slået fra før, og den boks der blev vist var den .net viser ved fejl når jit ikke er aktiveret.
Jeg har også håndteret alle de fejl jeg har fundet - problemet er hvis der er noget jeg ikke har opdaget, der først sker om en uge - så har jeg problemet igen.
Lige nu har jeg lavet en bevidst fejl, som jeg bruger til at teste, for at kunne se hvordan programmet opfører sig ved en uhåndteret fejl.
- Men mig bekendt findes der ingen programmer der er 100 % fejlfri, og hvor der er tænkt på alt hvad der nogensinde sker, kan ske eller ikke sker.
Projektet er startet som et almindeligt Windows Forms projekt. Jeg har søgt efter " main", "main(" og "main (" i alle filer i projekt-mappen, og har ikke fundet noget match.
(at søge efter blot "main" giver ret mange hits, da min hoved-form hedder frmMain...)
i filen "Application.Designer.vb" fandt jeg følgende:
Partial Friend Class MyApplication
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _ Public Sub New() MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) Me.IsSingleInstance = true Me.EnableVisualStyles = true Me.SaveMySettingsOnExit = false Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses End Sub
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _ Protected Overrides Sub OnCreateMainForm() Me.MainForm = Global.Infologik_Main.frmMain End Sub End Class
Men hvis jeg smider indholdet af Sub New() i en try-catch, bliver den sur, og siger at MyBase.New(...) skal være den første linje :-/
Den side du linkede til har jeg også forsøgt mig med, men har på fornemmelsen at jeg ikke bruger det rigtigt.
i min frmMain class har jeg øverst lagt følgende to sub's : Private Sub MYExnHandler(ByVal sender As Object, _ ByVal e As UnhandledExceptionEventArgs) Dim EX As Exception EX = e.ExceptionObject Console.WriteLine(EX.StackTrace) End Sub
Private Sub MYThreadHandler(ByVal sender As Object, _ ByVal e As Threading.ThreadExceptionEventArgs) Console.WriteLine(e.Exception.StackTrace) End Sub
I min frmMain_Load har jeg lagt følgende linjer:
' Get the your application's application domain. Dim currentDomain As AppDomain = AppDomain.CurrentDomain
' Define a handler for unhandled exceptions. AddHandler currentDomain.UnhandledException, AddressOf MYExHandler
' Define a handler for unhandled exceptions for threads behind forms. AddHandler Application.ThreadException, AddressOf MYThreadHandler
- for hvis jeg placerer ovenstående linjer i selve class-delen, uden for frmMain_load sub'en, får jeg "syntax error" ved AddHandler linjerne.
Visual Studio melder ingen fejl ved ovenstående, men hvis jeg ligesom i eksemplet dividerer med 0, bliver det ikke fandet af handleren som det var meningen. Jeg dividerer med 0 i en timer, men ifølge sidens tekst, burde jeg kunne gøre det overalt i programmet, men det kan jeg åbenbart ikke :-/
Public Partial Class MainForm Public Sub New() InitializeComponent() AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf Sorry End Sub Private Sub Sorry(sender As Object, e As UnhandledExceptionEventArgs) MessageBox.Show("Sorry - we have a problem - we will close app now") Application.Exit() Environment.Exit(1) End Sub Private Sub Button1Click(sender As Object, e As EventArgs) Dim a As Integer = 0 Dim b As Integer = 0 Dim c As Integer = a \ b End Sub End Class
Beklager jeg først vender tilbage nu, der kom lige noget sygdom i vejen :-/
Det virkede præcis som jeg havde håbet på, det er helt perfekt! (Jeg har dog ændret lidt, så det prøver at logge detaljer om fejlen til en fil, før programmet afsluttes, men som løsning på mit spørgsmål er det perfekt!)
Private Sub Sorry(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs) Try Dim EX As Exception EX = e.ExceptionObject Logger.LogInfo("Caught unhandled exception: " & EX.Message & vbCrLf & EX.StackTrace) Catch ex As Exception 'do nothing... End Try Application.Exit() Environment.Exit(1) End Sub
Du må meget gerne lægge et svar, så jeg kan lukke spørgsmålet :-)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.