~pitti/apport/interactive-hooks

« back to all changes in this revision

Viewing changes to bin/apport-retrace

  • Committer: Martin Pitt
  • Date: 2009-07-15 14:53:38 UTC
  • Revision ID: martin.pitt@canonical.com-20090715145338-lkw2z1ujajyh8pvk
add support for kernel crashes

- apport/report.py: Add add_kernel_crash_info() to reprocess a
  "KernelCrash" problem type with the "crash" program.
- apport/report.py: Add crash signature calculation for kernel crashes.
- backends/packaging-apt-dpkg.py: Add _install_debug_kernel() to
  special-case fetching kernel ddebs, and call it in
  install_retracing_packages().
- bin/apport-retrace: Call add_kernel_crash_info() and update sanity
  checks for kernel crashes.
- bin/kernel_crashdump: Call add_os_info() right in the hook.

Thanks to Michael Vogt!

Show diffs side-by-side

added added

removed removed

Lines of Context:
104
104
 
105
105
    print '--- stack trace ---'
106
106
    print report['Stacktrace']
107
 
    print '--- thread stack trace ---'
108
 
    print report['ThreadStacktrace']
 
107
    if report.has_key('ThreadedStacktrace'):
 
108
        print '--- thread stack trace ---'
 
109
        print report['ThreadStacktrace']
109
110
    print '---'
110
111
 
111
112
    ch = None
243
244
 
244
245
# sanity checks
245
246
required_fields = set(['CoreDump', 'ExecutablePath', 'Package'])
246
 
if not required_fields.issubset(set(report.keys())):
 
247
if report['ProblemType'] == 'KernelCrash':
 
248
    if not set(['Package','VmCore']).issubset(set(report.keys())):
 
249
        print >> sys.stderr, 'report file does not contain the required fields'
 
250
        sys.exit(0)
 
251
elif not required_fields.issubset(set(report.keys())):
247
252
    print >> sys.stderr, 'report file does not contain required fields: ' + \
248
253
        ' '.join(required_fields)
249
254
    sys.exit(0)
250
255
 
 
256
 
251
257
(installed, outdated_msg) = apport.packaging.install_retracing_packages(report,
252
258
    options.verbose, options.unpack_only, options.no_pkg,
253
259
    options.extra_packages)
265
271
    # regenerate gdb info
266
272
    try:
267
273
        report.add_gdb_info()
 
274
        report.add_kernel_crash_info()
268
275
        gen_source_stacktrace(report)
269
276
    except AssertionError:
270
277
        if outdated_msg:
283
290
if options.stdout:
284
291
    print '--- stack trace ---'
285
292
    print report['Stacktrace']
286
 
    print '--- thread stack trace ---'
287
 
    print report['ThreadStacktrace']
 
293
    if report.has_key('ThreadedStacktrace'):
 
294
        print '--- thread stack trace ---'
 
295
        print report['ThreadStacktrace']
288
296
    if report.has_key('StacktraceSource'):
289
297
        print '--- source code stack trace ---'
290
298
        print report['StacktraceSource']