我正试图通过以下示例获取完整错误:
date time somemethod EXC somenumber sometext R:System.NullReferenceException: Object reference not set to an instance of an object.
at sometext in somepath .cs:line somenumber System.NullReferenceException: Object reference not set to an instance of an object.
at sometext in Somepath .cs:line somenumber
从那以后,我想在EXC
之后获取所有内容cs:line somenumber
。
01/01/01 date (mode) (status) (somenumber) (name+error)
,就在这里,通常会有一个新行继续出现错误消息,该消息以字符cs:line(number)结束。
我设法收到错误消息,因为它始终以EXC开头(所以正则表达式是EXC .*
,但我无法通过代码获取完整的消息。我只能访问PowerShell 2.0,我使用以下公式:
$Filecontent = [io.file]::Readalltext("path to file")
$filecontent | select-string 'EXC .*' -allmatches |
foreach {$_.Matches} | Foreach {$_.Value} > errors.txt
我需要的是获取行号的完整错误,但我有正确的正则表达式的问题。我不关心日期,时间,模式,正则表达式应该获得EXC状态并使用行获取完整的消息。
在使用正则表达式'EXC。* \ n。* cs:line [0-9] {0,99}后,它找到了那些在一行完成错误消息之后的消息,但是,有时会有更多下一行我也想拍摄。 有什么想法吗?
答案 0 :(得分:1)
如果将错误(堆栈跟踪)定义为
然后捕获这样一个块的正则表达式如下所示:
(?m)^\S.*(\s*^ \S.*)+
使用它检索完整的堆栈跟踪块之后,您可以使用以下内容在第二步中选择行号:
at (.*?) in (.*?):line (\d+)
表达式分解为:
(?m) # inline flag: multiline mode
^ # start-of-line
\S # a non-whitespace character
.* # anything up to the end of the line
( # group 1
\s* # any number of whitespace (this matches newline character)
^ # start-of-line
# 3 spaces
\S # a non-whitespace character
.* # anything up to the end of the line
)+ # end of group 1, repeat at least once