File: dmp2minidump.py

package info (click to toggle)
chromium-browser 57.0.2987.98-1~deb8u1
  • links: PTS, VCS
  • area: main
  • in suites: jessie
  • size: 2,637,852 kB
  • ctags: 2,544,394
  • sloc: cpp: 12,815,961; ansic: 3,676,222; python: 1,147,112; asm: 526,608; java: 523,212; xml: 286,794; perl: 92,654; sh: 86,408; objc: 73,271; makefile: 27,698; cs: 18,487; yacc: 13,031; tcl: 12,957; pascal: 4,875; ml: 4,716; lex: 3,904; sql: 3,862; ruby: 1,982; lisp: 1,508; php: 1,368; exp: 404; awk: 325; csh: 117; jsp: 39; sed: 37
file content (51 lines) | stat: -rwxr-xr-x 1,353 bytes parent folder | download | duplicates (13)
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
#!/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())