Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(71)

Side by Side Diff: snapshot/win/end_to_end_test.py

Issue 1430773003: win: Handle binary with embedded CodeView debug record (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: rebase Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « handler/win/z7_test.dll ('k') | snapshot/win/module_snapshot_win.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 2
3 # Copyright 2015 The Crashpad Authors. All rights reserved. 3 # Copyright 2015 The Crashpad Authors. All rights reserved.
4 # 4 #
5 # Licensed under the Apache License, Version 2.0 (the "License"); 5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License. 6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at 7 # You may obtain a copy of the License at
8 # 8 #
9 # http://www.apache.org/licenses/LICENSE-2.0 9 # http://www.apache.org/licenses/LICENSE-2.0
10 # 10 #
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 114
115 115
116 def GetDumpFromCrashyProgram(out_dir, pipe_name): 116 def GetDumpFromCrashyProgram(out_dir, pipe_name):
117 return GetDumpFromProgram(out_dir, pipe_name, 'crashy_program.exe') 117 return GetDumpFromProgram(out_dir, pipe_name, 'crashy_program.exe')
118 118
119 119
120 def GetDumpFromSelfDestroyingProgram(out_dir, pipe_name): 120 def GetDumpFromSelfDestroyingProgram(out_dir, pipe_name):
121 return GetDumpFromProgram(out_dir, pipe_name, 'self_destroying_program.exe') 121 return GetDumpFromProgram(out_dir, pipe_name, 'self_destroying_program.exe')
122 122
123 123
124 def GetDumpFromZ7Program(out_dir, pipe_name):
125 return GetDumpFromProgram(out_dir, pipe_name, 'crashy_z7_loader.exe')
126
127
124 class CdbRun(object): 128 class CdbRun(object):
125 """Run cdb.exe passing it a cdb command and capturing the output. 129 """Run cdb.exe passing it a cdb command and capturing the output.
126 `Check()` searches for regex patterns in sequence allowing verification of 130 `Check()` searches for regex patterns in sequence allowing verification of
127 expected output. 131 expected output.
128 """ 132 """
129 133
130 def __init__(self, cdb_path, dump_path, command): 134 def __init__(self, cdb_path, dump_path, command):
131 # Run a command line that loads the dump, runs the specified cdb command, 135 # Run a command line that loads the dump, runs the specified cdb command,
132 # and then quits, and capturing stdout. 136 # and then quits, and capturing stdout.
133 self.out = subprocess.check_output([ 137 self.out = subprocess.check_output([
(...skipping 14 matching lines...) Expand all
148 print >>sys.stderr, 'FAILED - %s' % message 152 print >>sys.stderr, 'FAILED - %s' % message
149 print >>sys.stderr, '-' * 80 153 print >>sys.stderr, '-' * 80
150 print >>sys.stderr, 'did not match:\n %s' % pattern 154 print >>sys.stderr, 'did not match:\n %s' % pattern
151 print >>sys.stderr, '-' * 80 155 print >>sys.stderr, '-' * 80
152 print >>sys.stderr, 'remaining output was:\n %s' % self.out 156 print >>sys.stderr, 'remaining output was:\n %s' % self.out
153 print >>sys.stderr, '-' * 80 157 print >>sys.stderr, '-' * 80
154 sys.stderr.flush() 158 sys.stderr.flush()
155 sys.exit(1) 159 sys.exit(1)
156 160
157 161
158 def RunTests(cdb_path, dump_path, destroyed_dump_path, pipe_name): 162 def RunTests(cdb_path, dump_path, destroyed_dump_path, z7_dump_path, pipe_name):
159 """Runs various tests in sequence. Runs a new cdb instance on the dump for 163 """Runs various tests in sequence. Runs a new cdb instance on the dump for
160 each block of tests to reduce the chances that output from one command is 164 each block of tests to reduce the chances that output from one command is
161 confused for output from another. 165 confused for output from another.
162 """ 166 """
163 out = CdbRun(cdb_path, dump_path, '.ecxr') 167 out = CdbRun(cdb_path, dump_path, '.ecxr')
164 out.Check('This dump file has an exception of interest stored in it', 168 out.Check('This dump file has an exception of interest stored in it',
165 'captured exception') 169 'captured exception')
166 out.Check( 170 out.Check(
167 'crashy_program!crashpad::`anonymous namespace\'::SomeCrashyFunction', 171 'crashy_program!crashpad::`anonymous namespace\'::SomeCrashyFunction',
168 'exception at correct location') 172 'exception at correct location')
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 out.Check(r'ntdll\.dll', 'ntdll present', re.IGNORECASE) 209 out.Check(r'ntdll\.dll', 'ntdll present', re.IGNORECASE)
206 210
207 # Check that there is no stack trace in the self-destroyed process. Confirm 211 # Check that there is no stack trace in the self-destroyed process. Confirm
208 # that the top is where we expect it (that's based only on IP), but subsequent 212 # that the top is where we expect it (that's based only on IP), but subsequent
209 # stack entries will not be available. This confirms that we have a mostly 213 # stack entries will not be available. This confirms that we have a mostly
210 # valid dump, but that the stack was omitted. 214 # valid dump, but that the stack was omitted.
211 out.Check(r'self_destroying_program!crashpad::`anonymous namespace\'::' 215 out.Check(r'self_destroying_program!crashpad::`anonymous namespace\'::'
212 r'FreeOwnStackAndBreak.*\nquit:', 216 r'FreeOwnStackAndBreak.*\nquit:',
213 'at correct location, no additional stack entries') 217 'at correct location, no additional stack entries')
214 218
219 if z7_dump_path:
220 out = CdbRun(cdb_path, z7_dump_path, '.ecxr;lm')
221 out.Check('This dump file has an exception of interest stored in it',
222 'captured exception in z7 module')
223 out.Check(r'z7_test\+0x[0-8a-f]+:', 'exception in z7 at correct location')
224 out.Check(r'z7_test C \(codeview symbols\) z7_test.dll',
225 'expected non-pdb symbol format')
226
227
215 def main(args): 228 def main(args):
216 try: 229 try:
217 if len(args) != 1: 230 if len(args) != 1:
218 print >>sys.stderr, 'must supply binary dir' 231 print >>sys.stderr, 'must supply binary dir'
219 return 1 232 return 1
220 233
221 cdb_path = GetCdbPath() 234 cdb_path = GetCdbPath()
222 if not cdb_path: 235 if not cdb_path:
223 print >>sys.stderr, 'could not find cdb' 236 print >>sys.stderr, 'could not find cdb'
224 return 1 237 return 1
(...skipping 10 matching lines...) Expand all
235 os.getpid(), str(random.getrandbits(64))) 248 os.getpid(), str(random.getrandbits(64)))
236 249
237 crashy_dump_path = GetDumpFromCrashyProgram(args[0], pipe_name) 250 crashy_dump_path = GetDumpFromCrashyProgram(args[0], pipe_name)
238 if not crashy_dump_path: 251 if not crashy_dump_path:
239 return 1 252 return 1
240 253
241 destroyed_dump_path = GetDumpFromSelfDestroyingProgram(args[0], pipe_name) 254 destroyed_dump_path = GetDumpFromSelfDestroyingProgram(args[0], pipe_name)
242 if not destroyed_dump_path: 255 if not destroyed_dump_path:
243 return 1 256 return 1
244 257
245 RunTests(cdb_path, crashy_dump_path, destroyed_dump_path, pipe_name) 258 z7_dump_path = None
259 if not args[0].endswith('x64'):
260 z7_dump_path = GetDumpFromZ7Program(args[0], pipe_name)
261 if not z7_dump_path:
262 return 1
263
264 RunTests(cdb_path, crashy_dump_path, destroyed_dump_path, z7_dump_path,
265 pipe_name)
246 266
247 return 0 267 return 0
248 finally: 268 finally:
249 CleanUpTempDirs() 269 CleanUpTempDirs()
250 270
251 271
252 if __name__ == '__main__': 272 if __name__ == '__main__':
253 sys.exit(main(sys.argv[1:])) 273 sys.exit(main(sys.argv[1:]))
OLDNEW
« no previous file with comments | « handler/win/z7_test.dll ('k') | snapshot/win/module_snapshot_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698