/
scanWin32Coredumps.sh
75 lines (68 loc) · 2.67 KB
/
scanWin32Coredumps.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/bin/bash
debuginfodir="../../debuginfo"
separator="-------SEPARATOR--------"
for dump in coredumps/*.dmp; do
rev=`Win32MinidumpAnalyzer.exe "$dump" 0 | grep -E -o '_r[0-9]+' | sed 's/_//'`
if [ -z "$rev" ]; then
rev=`Win32MinidumpAnalyzer.exe "$dump" 0 | grep -E -o '_beta[0-9]+' | sed 's/_//'`
fi
if [ -z "$rev" ]; then
echo Coredump $dump rev `Win32MinidumpAnalyzer.exe "$dump" 0` - cannot determine revnumber > "$dump.txt"
echo $separator >> "$dump.txt"
continue
fi
echo $dump > "$dump.txt"
echo $rev >> "$dump.txt"
echo $separator >> "$dump.txt"
Win32MinidumpAnalyzer.exe "$dump" 1 >> "$dump.txt"
echo $separator >> "$dump.txt"
Win32MinidumpAnalyzer.exe "$dump" 2 >> "$dump.txt"
echo $separator >> "$dump.txt"
if [ \! -e "$debuginfodir/$rev" ] ; then
echo No debuginfo for rev $rev >> "$dump.txt"
revnumActual=`echo $rev | grep -E -o '[0-9]+'`
revnumMinDiff=100000000
for f in `ls $debuginfodir` ; do
revnumCheck=`echo $f | grep -E -o '[0-9]+'`
revnumDiff=`expr $revnumCheck - $revnumActual | sed 's/-//'`
if [ $revnumDiff -lt $revnumMinDiff ] ; then
revnumMinDiff=$revnumDiff
rev=$f
fi
done
if [ \! -e "$debuginfodir/$rev" ] ; then
echo Cannot find any debuginfo for rev $rev >> "$dump.txt"
echo $separator >> "$dump.txt"
continue
fi
echo Found closest matching debuginfo - rev $rev >> "$dump.txt"
echo $separator >> "$dump.txt"
fi
cdb -y "$debuginfodir/$rev" -i "$debuginfodir/$rev" -z "$dump" \
-srcpath "$debuginfodir/$rev/sources" -lines \
-c ".kframes 100; .ecxr; kp; q" > except.txt
fileline=`grep -o -m 1 '[^[]*@ [0-9]*' except.txt`
rm except.txt
if [ -z "$fileline" ]; then
echo Cannot determine exception location in source files >> "$dump.txt"
echo $separator >> "$dump.txt"
cdb -y "$debuginfodir/$rev" -i "$debuginfodir/$rev" -z "$dump" \
-srcpath "$debuginfodir/$rev/sources" -lines \
-c ".kframes 100; .echo -----ECXR-----; .ecxr; .echo -----CRASHED_THREAD_STACK-----; kp; .echo -----THREADS_STACK-----; ~*kp; q" >> "$dump.txt"
echo $separator >> "$dump.txt"
else
file=`echo $fileline | grep -o '.*@' | sed 's/@//' | sed 's/ //'`
line=`echo $fileline | grep -o '@ [0-9]*' | sed 's/@ //'`
echo Exception at $file: $line >> "$dump.txt"
echo $separator >> "$dump.txt"
if [ $line -gt 10 ]; then
line=`expr $line - 10`
else
line=0
fi
cdb -y "$debuginfodir/$rev" -i "$debuginfodir/$rev" -z "$dump" \
-srcpath "$debuginfodir/$rev/sources" -lines \
-c ".kframes 100; lsp -a 14; .echo -----SOURCE-----; lsf $file; ls $line; .echo -----ECXR-----; .ecxr; .echo -----CRASHED_THREAD_STACK-----; kp; .echo -----THREADS_STACK-----; ~*kp; q" >> "$dump.txt"
echo $separator >> "$dump.txt"
fi
done