vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
FxCop Custom Rule - Wie finde ich raus, welche Exception gefangen wurde??? 
Autor: Jumula
Datum: 13.10.08 14:00

Hallo, habe eine CustomRule erstellt, die prüfen soll, ob die XML-Kommentare gesetzt sind. Jetzt möchte ich auch prüfen, wenn eine Exception geworfen wird, ob diese in einem CatchBlock gefangen wird.
Die muss dann nicht dokumentiert werden, sondern nur die, die nicht im TRY-Block stehen oder die, die im Try-Block stehen und nicht abgefangen werden.
Dazu muss ich jetzt herausfinden, welcher Typ Exception in einem Catch behandelt wird. Leider weiß ich nicht, wie ich von dem Instruction-Objekt auf den Namen der Exception komme.
Bin echt total verzweifelt, weil ich die Regel bald fertig haben muss und nicht dahinterkomme. Es gibt auch im Netz total wenig Dokumentation darüber...falls jemand noch einen Link hat, der mir helfen könnte....

Hier ist mein bisheriger Code..er befindet sich in der Check(ByVal vMember As Member)-Methode.
Hier werden erst alle Instructions der Methode gelesen und dann einzeln durchgegangen.
Die Prüfungen, ob eine Exception im TRY-Block geworfen wird oder nicht funktioniert auch ....nur weiß ich nicht, wie ich auf den Exceptionname komme....

  'Instructions durchgehen und schauen ob Try-Block drin ist 
            Dim instructions As InstructionList = DirectCast(vMember, _
              Method).Instructions
            Dim blnTry As Boolean = False
            Dim arrEx As New List(Of String)
            Dim arrExImTry As New List(Of String)
            Dim arrCatchEx As New List(Of String)
 
            For i As Integer = 0 To instructions.Length - 1
 
                If instructions(i).OpCode = OpCode._Try Then
                    blnTry = True
                    Output(vbCrLf & ">>>>>> IM TRY.......")
                End If
                If instructions(i).OpCode = OpCode._EndTry Then
                    Output(vbCrLf & ">>>>>> .......ENDTRY")
                    blnTry = False
                End If
 
                'Schleife über alle Statements 
                If instructions(i).OpCode = OpCode.Throw Then
                    Dim strExType As String = ""
                    For Each stat As Statement In DirectCast(vMember, _
                      Method).Body.Statements
                        If stat.NodeType = NodeType.Block Then
                            Dim b As Block = DirectCast(stat, Block)
                            For Each stat2 As Statement In b.Statements
                                If stat2.NodeType = NodeType.Throw And _
                                  stat2.SourceContext.StartLine = instructions( _
                                  i).SourceContext.StartLine Then
                                    Dim t As [Throw] = CType(stat2, [Throw])
                                    strExType = t.Expression.Type.FullName
                                End If
                            Next
                        End If
                    Next
                    If blnTry Then
                        'Instruction gefunden: Dieses Throw liegt innerhalb von 
                        ' TRY-Block
                        arrExImTry.Add(strExType)
                        Output(vbCrLf & "<<<<< INNERHALB TRY: " & strExType)
                    Else
                        'Instruction gefunden: Dieses Throw liegt nicht 
                        ' innerhalb von TRY-Block
                        Output(vbCrLf & "<<<<< AUßERHALB TRY: " & strExType)
                        arrEx.Add(strExType)
                    End If
 
                End If
 
 
                If instructions(i).OpCode = OpCode._Catch Then
                    blnTry = False
                    Output(vbCrLf & ">>>>>> .......CATCH")
                    'prüfen, ob eine geworfene Exception aus arrExImTry nicht 
                    ' abgefangen wurde
'HIER PROBLEM: WIE KOMME ICH AUF DEN TYP DER EXCEPTION??????????????????
                    Dim strExTypeAbgefangen As String = ""
                End If
            Next
 
            'Prüfen, welche der Exceptions, die im TRY geworfen wurden nicht 
            ' abgefangen wurden!
            For Each e As String In arrExImTry
                If Not arrCatchEx.Contains(e) Then
                    'wird nicht abgefangen, dann in andere Liste (der nicht 
                    ' abgefangenen Ex) rein
                    arrEx.Add(e)
                End If
            Next
 
            'Fehlermeldungen ausgeben
            Dim strMerk As String = ""
            For Each item As String In arrEx
                If InStr(strMerk, item) = 0 Then 'Wenn es noch nicht 
                ' aufgenommen wurde.
                    Me.Problems.Add(New Problem(Me.GetNamedResolution( _
                      "FehlendesTag", vMember.Name.ToString, "Exception für die" & _
                      "" & item)))
                    strMerk += item
                End If
            Next

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
FxCop Custom Rule - Wie finde ich raus, welche Exception gef...790Jumula13.10.08 14:00

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel