diff options
Diffstat (limited to 'tools/drakx-in-chroot')
-rwxr-xr-x | tools/drakx-in-chroot | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/tools/drakx-in-chroot b/tools/drakx-in-chroot index a4064ed5b..744b68096 100755 --- a/tools/drakx-in-chroot +++ b/tools/drakx-in-chroot @@ -29,6 +29,7 @@ my ($disk_iso_repository, $repository_uri); "; (my $repository, my $dir, @ARGV) = @ARGV; +my ($gdb); foreach (@ARGV) { if (/--resolution=(.*)/) { $resolution = $1; @@ -36,6 +37,8 @@ foreach (@ARGV) { $disk_iso_repository = $1; } elsif (/--repository=(.*)/) { $repository_uri = $1; + } elsif (/--gdb/) { + $gdb = "gdb -q --args"; } } my ($repository_without_arch, $repository_arch) = basename($repository) eq arch() ? (dirname($repository), '/' . arch()) : ($repository, ''); @@ -137,7 +140,18 @@ if (my $pid = fork()) { if_($disk_iso_repository, "--method disk-iso"), if_($remote_repository, "--method $remote_repository"), @ARGV); - exec "$sudo chroot $SLASH_LOCATION $cmd" or die "exec $cmd in $SLASH_LOCATION failed\n"; + if ($gdb) { + warn qq(GDB USAGE +Beware that debug info won't be found so on segfault +just generate a core dump with "gcore" and then +analyze it offline. +Thus you sessions will look like: +(gdb) run +(gdb) gcore +(gdb) exit +); + } + exec "$sudo $gdb chroot $SLASH_LOCATION $cmd" or die "exec $cmd in $SLASH_LOCATION failed\n"; } sub system_verbose { warn join(' ', @_), "\n" if $verbose; system(@_) } |