| Index: content/shell/tools/breakpad_integration_test.py
|
| diff --git a/content/shell/tools/breakpad_integration_test.py b/content/shell/tools/breakpad_integration_test.py
|
| index 9e31ad710acd836c9ea432567c834edffe065f49..d34b11652d7020303d4b23444ad77c4c3b815786 100755
|
| --- a/content/shell/tools/breakpad_integration_test.py
|
| +++ b/content/shell/tools/breakpad_integration_test.py
|
| @@ -57,24 +57,36 @@ def main():
|
| # Create a temporary directory to store the crash dumps and symbols in.
|
| crash_dir = tempfile.mkdtemp()
|
|
|
| + crash_service = None
|
| +
|
| try:
|
| - print "# Generate symbols."
|
| - breakpad_tools_dir = os.path.join(
|
| - os.path.dirname(__file__), '..', '..', '..',
|
| - 'components', 'crash', 'content', 'tools')
|
| - generate_symbols = os.path.join(
|
| - breakpad_tools_dir, 'generate_breakpad_symbols.py')
|
| - symbols_dir = os.path.join(crash_dir, 'symbols')
|
| - cmd = [generate_symbols,
|
| - '--build-dir=%s' % options.build_dir,
|
| - '--binary=%s' % options.binary,
|
| - '--symbols-dir=%s' % symbols_dir,
|
| - '--jobs=%d' % options.jobs]
|
| - if options.verbose:
|
| - cmd.append('--verbose')
|
| - print ' '.join(cmd)
|
| - failure = 'Failed to run generate_breakpad_symbols.py.'
|
| - subprocess.check_call(cmd)
|
| + if sys.platform == 'win32':
|
| + print "# Starting crash service."
|
| + crash_service_exe = os.path.join(options.build_dir,
|
| + 'content_shell_crash_service.exe')
|
| + cmd = [crash_service_exe, '--dumps-dir=%s' % crash_dir]
|
| + if options.verbose:
|
| + print ' '.join(cmd)
|
| + failure = 'Failed to start crash service.'
|
| + crash_service = subprocess.Popen(cmd)
|
| + else:
|
| + print "# Generate symbols."
|
| + breakpad_tools_dir = os.path.join(
|
| + os.path.dirname(__file__), '..', '..', '..',
|
| + 'components', 'crash', 'content', 'tools')
|
| + generate_symbols = os.path.join(
|
| + breakpad_tools_dir, 'generate_breakpad_symbols.py')
|
| + symbols_dir = os.path.join(crash_dir, 'symbols')
|
| + cmd = [generate_symbols,
|
| + '--build-dir=%s' % options.build_dir,
|
| + '--binary=%s' % options.binary,
|
| + '--symbols-dir=%s' % symbols_dir,
|
| + '--jobs=%d' % options.jobs]
|
| + if options.verbose:
|
| + cmd.append('--verbose')
|
| + print ' '.join(cmd)
|
| + failure = 'Failed to run generate_breakpad_symbols.py.'
|
| + subprocess.check_call(cmd)
|
|
|
| print "# Run content_shell and make it crash."
|
| cmd = [options.binary,
|
| @@ -91,29 +103,48 @@ def main():
|
| with open(os.devnull, 'w') as devnull:
|
| subprocess.check_call(cmd, stdout=devnull, stderr=devnull)
|
|
|
| + if sys.platform == 'win32':
|
| + print "# Stopping crash service"
|
| + failure = 'Failed to stop crash service.'
|
| + crash_service.terminate()
|
| + crash_service = None
|
| +
|
| print "# Retrieve crash dump."
|
| dmp_files = glob.glob(os.path.join(crash_dir, '*.dmp'))
|
| failure = 'Expected 1 crash dump, found %d.' % len(dmp_files)
|
| if len(dmp_files) != 1:
|
| raise Exception(failure)
|
| dmp_file = dmp_files[0]
|
| - minidump = os.path.join(crash_dir, 'minidump')
|
|
|
| - dmp_to_minidump = os.path.join(breakpad_tools_dir, 'dmp2minidump.py')
|
| - cmd = [dmp_to_minidump, dmp_file, minidump]
|
| - if options.verbose:
|
| - print ' '.join(cmd)
|
| - failure = 'Failed to run dmp_to_minidump.'
|
| - subprocess.check_call(cmd)
|
| + if sys.platform != 'win32':
|
| + minidump = os.path.join(crash_dir, 'minidump')
|
| + dmp_to_minidump = os.path.join(breakpad_tools_dir, 'dmp2minidump.py')
|
| + cmd = [dmp_to_minidump, dmp_file, minidump]
|
| + if options.verbose:
|
| + print ' '.join(cmd)
|
| + failure = 'Failed to run dmp_to_minidump.'
|
| + subprocess.check_call(cmd)
|
|
|
| print "# Symbolize crash dump."
|
| - minidump_stackwalk = os.path.join(options.build_dir, 'minidump_stackwalk')
|
| - cmd = [minidump_stackwalk, minidump, symbols_dir]
|
| - if options.verbose:
|
| - print ' '.join(cmd)
|
| - failure = 'Failed to run minidump_stackwalk.'
|
| - proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
| - stack = proc.communicate()[0]
|
| + if sys.platform == 'win32':
|
| + cdb_exe = os.path.join(options.build_dir, 'cdb', 'cdb.exe')
|
| + cmd = [cdb_exe, '-y', options.build_dir, '-c', '.lines;.excr;k30;q',
|
| + '-z', dmp_file]
|
| + if options.verbose:
|
| + print ' '.join(cmd)
|
| + failure = 'Failed to run cdb.exe.'
|
| + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
|
| + stderr=subprocess.PIPE)
|
| + stack = proc.communicate()[0]
|
| + else:
|
| + minidump_stackwalk = os.path.join(options.build_dir, 'minidump_stackwalk')
|
| + cmd = [minidump_stackwalk, minidump, symbols_dir]
|
| + if options.verbose:
|
| + print ' '.join(cmd)
|
| + failure = 'Failed to run minidump_stackwalk.'
|
| + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
|
| + stderr=subprocess.PIPE)
|
| + stack = proc.communicate()[0]
|
|
|
| # Check whether the stack contains a CrashIntentionally symbol.
|
| found_symbol = 'CrashIntentionally' in stack
|
| @@ -147,6 +178,8 @@ def main():
|
| return 0
|
|
|
| finally:
|
| + if crash_service:
|
| + crash_service.terminate()
|
| try:
|
| shutil.rmtree(crash_dir)
|
| except:
|
|
|