@@ -266,7 +266,7 @@ End Function
266266'参数: ParentItem: 母节点序号
267267'. OutputString: 需要分析的字符串
268268Private Sub ArrayParser (ParentItem As Long , OutputString As String )
269- ' On Error Resume Next 'todo
269+ On Error Resume Next 'todo
270270 Dim SplitTmp() As String '字符串分割缓存
271271 Dim tmpStr As String '字符串处理缓存
272272 Dim NewVarNodesIndex As Long '新添加的VarNodes元素索引
@@ -305,7 +305,6 @@ Private Sub ArrayParser(ParentItem As Long, OutputString As String)
305305 StartQuotePos = InStr(tmpStr, """" ) - 1 '查找第一个“"”的位置
306306 BracketStartPos = 1 '初始化第一个“{”的位置
307307
308- 'ToDo: handle 【, <incomplete sequence \214>,】
309308 VarName = VarName & "[" '变量名后面加上“[”,为之后添加数组元素序号做准备
310309 If StartQuotePos >= 0 Then '如果找到了“"”,再做进一步的判断
311310 If Left(tmpStr, StartQuotePos) = String (StartQuotePos, "{" ) Then '这是一个字符串数组(var = {{...(n个{)...{"*)
@@ -315,6 +314,9 @@ Private Sub ArrayParser(ParentItem As Long, OutputString As String)
315314 BracketLevel = BracketLevel + 1
316315 ElseIf Mid(tmpStr, i, 1 ) = "}" Then
317316 If BracketLevel <= 0 Then '查找到匹配的“}”。此时i是下一个匹配的“}”的位置
317+ If BracketStartPos >= i + 1 Then '检查括号位置是否超出查找的位置。如果超出,就退出过程
318+ Exit Sub
319+ End If
318320 NewParentVarNodesIndex = AddVarItem(NewVarNodesIndex, VarName & ArrayElementIndex & "]" , _
319321 VarName & ArrayElementIndex & "]" , VarTypeName, _
320322 Mid(tmpStr, BracketStartPos, i - BracketStartPos + 1 ))
@@ -326,22 +328,35 @@ Private Sub ArrayParser(ParentItem As Long, OutputString As String)
326328 Else
327329 BracketLevel = BracketLevel - 1
328330 End If
329- ElseIf Mid(tmpStr, i, 1 ) = """" Then '遇到“"”,查找到下一个匹配的”"“ ,确保不会分析到字符串中间去
331+ ElseIf Mid(tmpStr, i, 1 ) = """" Then '遇到“"”,查找下一个匹配的“"” ,确保不会分析到字符串中间去
330332 Do
331333 i = i + 1
332334 Loop Until (Mid(tmpStr, i, 1 ) = """" And Mid(tmpStr, i - 1 , 1 ) <> "\" ) Or i > Len(tmpStr) '一直向后查找“"”,直到不处于字符串中间
335+ ElseIf Mid(tmpStr, i, 1 ) = "<" Then '遇到“”,查找下一个匹配的“”,确保不会分析到“<>”中间去(处理新版gdb的“<incomplete sequence \*>”输出)
336+ Do
337+ i = i + 1
338+ Loop Until Mid(tmpStr, i, 1 ) = ">" Or i > Len(tmpStr) '一直向后查找“>”,直到不处于“<>”中间
339+ i = i + 2 '跳过“, ”
333340 End If
334341 Next i
335342 Else '否则就依次添加所有元素
336- StartQuotePos = 1
337- For i = 2 To Len(tmpStr) '查找开头的“"”对应的下一个“"”
338- Do '一直向后查找“"”,直到不处于字符串中间
339- i = i + 1
340- Loop Until (Mid(tmpStr, i, 1 ) = """" And Mid(tmpStr, i - 1 , 1 ) <> "\" ) Or i > Len(tmpStr) '跳过“\"”,这是在字符串里面的“"”
343+ StartQuotePos = 0
344+ For i = 1 To Len(tmpStr) '查找开头的“"”对应的下一个“"”
345+ If Mid(tmpStr, i, 1 ) = """" Then '如果是以“"”开头的元素
346+ Do '一直向后查找“"”,直到不处于字符串中间
347+ i = i + 1
348+ Loop Until (Mid(tmpStr, i, 1 ) = """" And Mid(tmpStr, i - 1 , 1 ) <> "\" ) Or i > Len(tmpStr) '跳过“\"”,这是在字符串里面的“"”
349+ ElseIf Mid(tmpStr, i, 1 ) = "<" Then '如果是以“<”开头的元素(处理新版gdb的“<incomplete sequence \*>”输出)
350+ Do '一直向后查找“>”,直到不处于“<>”中间
351+ i = i + 1
352+ Loop Until Mid(tmpStr, i, 1 ) = ">" Or i > Len(tmpStr)
353+ Else '其它东西?应该不会出现这种情况吧
354+ i = Len(tmpStr) '如果真的出现这种情况... 直接跳到结尾吧
355+ End If
341356 Call AddVarItem (NewVarNodesIndex, VarName & ArrayElementIndex & "]" , VarName & ArrayElementIndex & "]" , _
342- VarTypeName, Mid(tmpStr, StartQuotePos + 1 , i - StartQuotePos - 1 ))
357+ VarTypeName, Mid(tmpStr, StartQuotePos + 1 , i - StartQuotePos))
343358 ArrayElementIndex = ArrayElementIndex + 1
344- i = i + 3 '跳过“, ”
359+ i = i + 2 '跳过“, ”
345360 StartQuotePos = i '记录新的“"”的位置
346361 Next i
347362 End If
0 commit comments