Index: components/crash/tools/dmp2minidump.py |
diff --git a/components/crash/tools/dmp2minidump.py b/components/crash/tools/dmp2minidump.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..7823d483681aeaf74dda9814389556f8cacb6c2a |
--- /dev/null |
+++ b/components/crash/tools/dmp2minidump.py |
@@ -0,0 +1,51 @@ |
+#!/usr/bin/env python |
+# Copyright 2013 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+"""A tool to extract minidumps from dmp crash dumps.""" |
+ |
+import os |
+import sys |
+from cgi import parse_multipart |
+ |
+ |
+def ProcessDump(dump_file, minidump_file): |
+ """Extracts the part of the dump file that minidump_stackwalk can read. |
+ |
+ The dump files generated by the breakpad integration multi-part form data |
+ that include the minidump as file attachment. |
+ |
+ Args: |
+ dump_file: the dump file that needs to be processed. |
+ minidump_file: the file to write the minidump to. |
+ """ |
+ try: |
+ dump = open(dump_file, 'rb') |
+ boundary = dump.readline().strip()[2:] |
+ data = parse_multipart(dump, {'boundary': boundary}) |
+ except: |
+ print 'Failed to read dmp file %s' % dump_file |
+ return |
+ |
+ if not 'upload_file_minidump' in data: |
+ print 'Could not find minidump file in dump.' |
+ return |
+ |
+ f = open(minidump_file, 'w') |
+ f.write("\r\n".join(data['upload_file_minidump'])) |
+ f.close() |
+ |
+ |
+def main(): |
+ if len(sys.argv) != 3: |
+ print 'Usage: %s [dmp file] [minidump]' % sys.argv[0] |
+ print '' |
+ print 'Extracts the minidump stored in the crash dump file' |
+ return 1 |
+ |
+ ProcessDump(sys.argv[1], sys.argv[2]) |
+ |
+ |
+if '__main__' == __name__: |
+ sys.exit(main()) |