DebuggingProgramCrash

Differences between revisions 1 and 68 (spanning 67 versions)
Revision 1 as of 2005-05-28 20:36:44
Size: 1040
Editor: adsl-213-190-44-43
Comment: imported from the old wiki
Revision 68 as of 2009-01-11 09:54:12
Size: 5325
Editor: 215
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
= DebuggingProgramCrash = <<Include(Debugging/Header)>>
||<tablestyle="float:right; font-size: 0.9em; width:40%; background:#F1F1ED; margin: 0 0 1em 1em;" style="padding:0.5em;"><<TableOfContents>>||

This document describes how to install debug packages on Ubuntu, which will aid in providing information for bugs.

== Gutsy Gibbon 7.10 , Hardy Heron 8.04, Intrepid Ibex 8.10, and Jaunty Jackalope 9.04 ==

Use this section only if you are using Ubuntu '''Gutsy 7.10''' , '''Hardy 8.04''' or '''Intrepid 8.10''' or '''Jaunty Jackalope'''. See the following section if you are using a prior version.

 1. Add the following lines to `/etc/apt/sources.list`: (of course, replace '''jaunty''' with '''gutsy''' if you're using 7.10 or '''hardy''' for 8.04, or '''intrepid''' for 8.10.)
 {{{
deb http://ddebs.ubuntu.com jaunty main restricted universe multiverse
deb http://ddebs.ubuntu.com jaunty-updates main restricted universe multiverse
deb http://ddebs.ubuntu.com jaunty-proposed main restricted universe multiverse
deb http://ddebs.ubuntu.com jaunty-security main restricted universe multiverse
}}}

 You may also add these lines using the Synaptic Package Manager:
  * Choose ''Synaptic'' via the ''System > Administration'' menu.
  * Choose ''Software Sources'' via the ''Settings'' menu, and click on the ''Third-Party Software'' tab.
  * Click the ''Add'' button and enter each ''deb ...'' line as above one by one and click the ''Add Source'' button (you will have to add these lines one at a time).
  * Click the ''Reload'' button once you are done adding all the ''deb'' lines.

 1. Import the debug symbol archive signing key:
 {{{
gpg --keyserver keyserver.ubuntu.com --recv-key 428D7C01
gpg --check-sigs 428D7C01 # signed by key of Martin Pitt
gpg -o - --export 428D7C01 | sudo apt-key add -
}}}

 1. Then run
 {{{
sudo apt-get update
}}}
 to update your package list.

 1. The debug symbol packages have the '-dbgsym' suffix attached, so to install the debug symbols for the package 'yelp', you first run:
 {{{
apt-cache policy yelp
}}}

This will show you the version number currently installed (we'll use 2.22.1-0ubuntu2.8.04.1 in this example). Then, you can then run the following to install the debug symbols:
 {{{
sudo apt-get install yelp-dbgsym=2.22.1-0ubuntu2.8.04.1
}}}

Alternatively, main Ubuntu repositories could contain '-dbg' debug symbol packages. Those are equivalent to '-dbgsym'. You can safely use either one, but not both at once.

 a. Now you make a [[Backtrace]].
 a. You can also run [[Valgrind]], if the program crashes with a "Segmentation fault" or "Bus error".
 a. Optionally, you may be asked to produce an [[Strace]].
 a. You can also provide this file : '''~/.xsession-errors'''

=== References ===

 * Announcement: https://lists.ubuntu.com/archives/ubuntu-devel-announce/2006-September/000195.html

== Prior Ubuntu versions ==

Use this section if you are using an Ubuntu version prior to Gusty 7.10.
Line 5: Line 64:
  a. Install the build-time dependencies for the package: {{{
Something to keep in mind: if you would like to create a build you're going to need to have the relevant deb-src lines in your /etc/apt/sources.list

  a. Install the development scripts:
  {{{
sudo apt-get install devscripts fakeroot
}}}

  a. Find out to which package your program belongs to:
  {{{
dpkg --search <program>
}}}

  a. Install the build-time dependencies for the package:
  {{{
Line 8: Line 81:
  a. Build .debs for debugging: {{{
DEB_BUILD_OPTIONS="nostrip noopt" sudo apt-get source -b <package>
  a. Build .debs for debugging:
 
{{{
export DEB_BUILD_OPTIONS="debug nostrip noopt"
faker
oot apt-get source -b <package>
Line 11: Line 86:
  a. Install the needed .debs (they will be in the current working directory if the build succeeded): {{{
sudo dpkg --install <package.deb>
  a. Install the needed .debs (they will be in the current working directory if the build succeeded):
 
{{{
sudo debi <package>*.changes
Line 14: Line 90:
 1. Start the program under control of `gdb`: {{{
gdb <program>
(gdb) run <arguments, if any>


* Most packages support the build of debugging version in this way. If this process doesn't work for a package, please open a bug against it.


== The Xorg server ==
The X server will by default trap its own crashes and dump a stack trace in /var/log/Xorg.0.log. However, this stack trace is modified by the signal handler itself. To get a "normal" crash, which will trigger a core dump (and ''apport'' reporting), add this to your /etc/X11/xorg.conf:
{{{
Section "ServerFlags"
        Option "NoTrapSignals" "true"
EndSection
Line 18: Line 102:
 1. The program will start. Perform any actions necessary to reproduce the crash
 1. Retrieve a backtrace of the crash: {{{
(gdb) thread apply all bt full }}}
Please see DebuggingXorg for how to debug Xorg server crashes.
Line 22: Line 104:
 1. Include the complete output from gdb in your bug report == Info for the BugSquad ==
Line 24: Line 106:
* most of the packages support the build of debugging version in this way. If that doesn't work for a package you can open a bug against it. If you're trying to `apport-retrace` a crash report from a bug that didn't happen on the same Ubuntu release as the one you're running, do the following:

Say that you're running `Gutsy` and the crash happened on `Feisty`:

 0. This will create a minimal `feisty` system. {{{
sudo mkdir -p /chroots/feisty
sudo debootstrap feisty /chroots/feisty/}}}
 0. Now you change into this minimal `feisty` system. {{{
sudo chroot /chroots/feisty}}}
 0. edit `/etc/apt/sources/list` and all the repositories you need, especially Martin's ddeb repository.
 0. {{{
apt-get update; apt-get install gdb apport}}}
 0. use `apport-retrace` as you're used to.

For more information on dealing with bug reports [[Apport]] see [[Bugs/ApportRetraces]].

----
CategoryBugSquad CategoryDebugging

Debugging Central

This page is part of the debugging series — pages with debugging details for a variety of Ubuntu packages.

This document describes how to install debug packages on Ubuntu, which will aid in providing information for bugs.

Gutsy Gibbon 7.10 , Hardy Heron 8.04, Intrepid Ibex 8.10, and Jaunty Jackalope 9.04

Use this section only if you are using Ubuntu Gutsy 7.10 , Hardy 8.04 or Intrepid 8.10 or Jaunty Jackalope. See the following section if you are using a prior version.

  1. Add the following lines to /etc/apt/sources.list: (of course, replace jaunty with gutsy if you're using 7.10 or hardy for 8.04, or intrepid for 8.10.)

    deb http://ddebs.ubuntu.com jaunty main restricted universe multiverse
    deb http://ddebs.ubuntu.com jaunty-updates main restricted universe multiverse
    deb http://ddebs.ubuntu.com jaunty-proposed main restricted universe multiverse
    deb http://ddebs.ubuntu.com jaunty-security main restricted universe multiverse
    You may also add these lines using the Synaptic Package Manager:
    • Choose Synaptic via the System > Administration menu.

    • Choose Software Sources via the Settings menu, and click on the Third-Party Software tab.

    • Click the Add button and enter each deb ... line as above one by one and click the Add Source button (you will have to add these lines one at a time).

    • Click the Reload button once you are done adding all the deb lines.

  2. Import the debug symbol archive signing key:
    gpg --keyserver keyserver.ubuntu.com --recv-key 428D7C01
    gpg --check-sigs 428D7C01 # signed by key of Martin Pitt
    gpg -o - --export 428D7C01 | sudo apt-key add -
  3. Then run
    sudo apt-get update
    to update your package list.
  4. The debug symbol packages have the '-dbgsym' suffix attached, so to install the debug symbols for the package 'yelp', you first run:
    apt-cache policy yelp

This will show you the version number currently installed (we'll use 2.22.1-0ubuntu2.8.04.1 in this example). Then, you can then run the following to install the debug symbols:

  • sudo apt-get install yelp-dbgsym=2.22.1-0ubuntu2.8.04.1

Alternatively, main Ubuntu repositories could contain '-dbg' debug symbol packages. Those are equivalent to '-dbgsym'. You can safely use either one, but not both at once.

  1. Now you make a Backtrace.

  2. You can also run Valgrind, if the program crashes with a "Segmentation fault" or "Bus error".

  3. Optionally, you may be asked to produce an Strace.

  4. You can also provide this file : ~/.xsession-errors

References

Prior Ubuntu versions

Use this section if you are using an Ubuntu version prior to Gusty 7.10.

  1. Check if the package has a debugging version available. In general, debugging packages will be named with a -dbg suffix

  2. If not, you can generally* build one this way:

Something to keep in mind: if you would like to create a build you're going to need to have the relevant deb-src lines in your /etc/apt/sources.list

  1. Install the development scripts:
    sudo apt-get install devscripts fakeroot
  2. Find out to which package your program belongs to:
    dpkg --search <program> 
  3. Install the build-time dependencies for the package:
    sudo apt-get build-dep <package>
  4. Build .debs for debugging:
    export DEB_BUILD_OPTIONS="debug nostrip noopt"
    fakeroot apt-get source -b <package>
  5. Install the needed .debs (they will be in the current working directory if the build succeeded):
    sudo debi <package>*.changes

* Most packages support the build of debugging version in this way. If this process doesn't work for a package, please open a bug against it.

The Xorg server

The X server will by default trap its own crashes and dump a stack trace in /var/log/Xorg.0.log. However, this stack trace is modified by the signal handler itself. To get a "normal" crash, which will trigger a core dump (and apport reporting), add this to your /etc/X11/xorg.conf:

Section "ServerFlags"
        Option "NoTrapSignals" "true"
EndSection

Please see DebuggingXorg for how to debug Xorg server crashes.

Info for the BugSquad

If you're trying to apport-retrace a crash report from a bug that didn't happen on the same Ubuntu release as the one you're running, do the following:

Say that you're running Gutsy and the crash happened on Feisty:

  1. This will create a minimal feisty system.

    sudo mkdir -p /chroots/feisty
    sudo debootstrap feisty /chroots/feisty/
  2. Now you change into this minimal feisty system.

    sudo chroot /chroots/feisty
  3. edit /etc/apt/sources/list and all the repositories you need, especially Martin's ddeb repository.

  4. apt-get update; apt-get install gdb apport
  5. use apport-retrace as you're used to.

For more information on dealing with bug reports Apport see Bugs/ApportRetraces.


CategoryBugSquad CategoryDebugging

DebuggingProgramCrash (last edited 2022-12-20 22:13:06 by sergiodj)