Da ich mich häufig dabei erwi…

(2010-05-31)

Da ich mich häufig dabei erwische, im aktuellen Verzeichnis nach dem letzten Coredump zu suchen um ihn inklusive zugehörigem Programm in den Debugger zu laden, habe ich diese Aufgabe in ein Script ausgelagert. Die folgenden Zeilen Perl suchen den letzten Coredump (dazu muss das Coredump-Pattern mit sysctl -w kernel.core_pattern = %e.core.%p sinnvoll definiert sein) und starten gdb mit den passenden Optionen:

#!/usr/bin/env perl                                      
# vim:ts=4:sw=4:expandtab:ft=perl

use strict;
use warnings;
use File::stat;
use List::Util qw(max);
use v5.10;

# Get mtime/filename of all core dumps matching core.*.([0-9]+)$
my %files = map { (stat($_)->mtime, $_) } grep { /\.([0-9]+)$/ } <*.core.*>;
my $newest_dump = $files{max keys %files};

# Get the program which generated this core dump using file(1)
my $output = qx(file $newest_dump);
my ($call) = ($output =~ /'([^']+)'/);
my ($program, $args) = ($call =~ /([^ ]+) (.+)/);

# Call gdb
say "Running: gdb $program -c $newest_dump --args $program $args";
system "gdb $program -c $newest_dump --args $program $args";