1
2 #### crash dump
3
4 rm -f $TMP/*.json
5
6 OILS_CRASH_DUMP_DIR=$TMP $SH -c '
7 g() {
8 local glocal="glocal"
9 echo $(( 1 / 0 ))
10 }
11 f() {
12 local flocal="flocal"
13 shift
14 FOO=bar g
15 }
16 readonly array=(A B C)
17 f "${array[@]}"
18 ' dummy a b c
19
20 echo status=$?
21
22 # Just check that we can parse it. TODO: Test properties.
23 python3 -c '
24 import json, sys
25 from pprint import pprint
26
27 for path in sys.argv[1:]:
28 #print(path)
29 with open(path) as f:
30 dump = json.load(f)
31
32 if 0:
33 print("DUMP")
34 print("status = %d" % dump["status"])
35 print("pid = %d" % dump["pid"])
36
37 if 0:
38 # This has msg, source, line
39 print("error %s" % dump["error"])
40 print()
41
42 if 0:
43 # It would be nice if this has the proc name, I guess debug_stack has it
44 print("argv_stack")
45 pprint(dump["argv_stack"])
46 print()
47
48 if 0:
49 print("debug_stack")
50 pprint(dump["debug_stack"])
51 print()
52
53 if 0:
54 print("var_stack")
55 pprint(dump["var_stack"])
56
57 ' $TMP/*.json
58 echo status=$?
59
60 ## STDOUT:
61 status=1
62 status=0
63 ## END
64
65 #### crash dump with source
66 # TODO: The failure is not propagated through 'source'. Failure only happens
67 # on 'errexit'.
68 #rm -f $TMP/*.json
69 OILS_CRASH_DUMP_DIR=$TMP $SH -c "
70 set -o errexit
71 source $REPO_ROOT/spec/testdata/crash.sh
72 "
73 echo crash status=$?
74
75 # Now try to parse crash dumps
76 set -o xtrace
77 set -o errexit
78
79 # Enumerate crash dumps
80 ok=0
81 for dump in $TMP/*.json; do
82 # Workaround for test issue: release binaries leave empty files because they
83 # don't have the json module.
84 if test -s $dump; then # non-empty
85 python2 -m json.tool $dump > /dev/null
86 echo "OK $dump" >&2
87 (( ++ok ))
88 fi
89 done
90
91 if test $ok -ge 1; then # make sure we parsed at least once crash dump
92 echo 'found crash dump'
93 fi
94
95 ## STDOUT:
96 crash status=1
97 found crash dump
98 ## END
99
100 # NOTE: strict_arith has one case in arith.test.sh), strict_word-eval has a case in var-op-other.
101
102
103 #### --tool cat-em
104
105 $SH --tool cat-em zzZZ
106 echo status=$?
107
108 $SH --tool cat-em stdlib/math.ysh > /dev/null
109 echo status=$?
110
111 $SH --tool cat-em zzZZ stdlib/math.ysh > /dev/null
112 echo status=$?
113
114 ## STDOUT:
115 status=1
116 status=0
117 status=1
118 ## END
119
120