作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我维护了一个大型VB6应用程序,昨天一位客户在屏幕上报告了“下标超出范围错误”,因此单击它退出了该应用程序。
我们使用一个标准的错误处理例程,该例程抛出一个消息框并将错误记录到文件中,而这两种情况均未发生,这一事实使我认为所讨论的代码行没有任何错误处理。
现在..我该如何找到这行代码在我的项目中的位置?
我可以写一些内容来扫描每个文件,注意在子等中看到on error...
时的情况,但是有人能想到更好/更快的方法吗?有没有做这种事情的工具?
最佳答案
我编写了此( VB.NET )代码以提取此信息(请注意,编码虽然又快又脏,但似乎可以工作)
它不会在同一子例程中处理on error goto 0
和on error goto [label]
:
Private Sub SearchForNoErrorHandlers(ByVal path As String)
Dim line As String, subName As String = "", inSub As Boolean = False, handlerFound As Boolean = False
For Each file As String In Directory.GetFiles(path, "*.*", SearchOption.AllDirectories)
'Debug.WriteLine(file) 'gives the full path and filename of any files found
If file.EndsWith(".bas") OrElse file.EndsWith(".cls") OrElse file.EndsWith(".frm") Then
Using sr As New StreamReader(file)
Do Until sr.EndOfStream
line = sr.ReadLine
'Debug.WriteLine(line)
If IsStartOfSub(line) AndAlso Not inSub Then
subName = line
inSub = True
handlerFound = False
ElseIf IsEndOfSub(line) AndAlso inSub Then
inSub = False
If handlerFound = False Then
Debug.WriteLine("** No handler found for file {0} in Sub: {1}", file, subName)
End If
ElseIf line.ToUpper.Contains("ON ERROR") AndAlso inSub Then
handlerFound = True
End If
Loop
End Using
End If
Next
End Sub
Private Function IsStartOfSub(ByVal line As String) As Boolean
Dim subTextPosition As Integer = line.ToUpper.IndexOf("SUB ")
Dim functionTextPosition As Integer = line.ToUpper.IndexOf("FUNCTION ")
Dim openBracket As Integer = line.IndexOf("(")
Dim closeBracket As Integer = line.IndexOf(")")
If subTextPosition >= 0 AndAlso openBracket >= 0 AndAlso closeBracket >= 0 AndAlso closeBracket > openBracket AndAlso openBracket > subTextPosition Then
Return True
ElseIf functionTextPosition >= 0 AndAlso openBracket >= 0 AndAlso closeBracket >= 0 AndAlso closeBracket > openBracket AndAlso openBracket > functionTextPosition Then
Return True
Else
Return False
End If
End Function
Private Function IsEndOfSub(ByVal line As String) As Boolean
Return (line.ToUpper.Contains("END SUB") OrElse line.ToUpper.Contains("END FUNCTION"))
End Function
关于parsing - 查找没有错误处理程序的子例程或代码段的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9427919/
我是一名优秀的程序员,十分优秀!