pidgin/old.pidgin.im

Parents 2fe35349140e
Children 88186e46594e
rekkanoryo transported the contents of this file to http://developer.pidgin.im/wiki/GetABacktrace
  • +0 -200
    gdb.php
  • --- a/gdb.php Tue Apr 24 02:42:52 2007 +0000
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,200 +0,0 @@
    -<?
    - $page->title = 'GDB Help';
    - require('inc/template.inc.php');
    -?>
    -
    -<h1>What is a backtrace?</h1>
    -
    -<p>
    - So Pidgin crashed on you again, huh? I'm sorry to hear that. Maybe you can help
    - prevent it from happening again. To diagnose the problem, we need to know the
    - last few functions that were called before Pidgin crashed. This output is
    - called a "backtrace."
    -</p>
    -
    -<h2>Using Ubuntu?</h2>
    -<p>
    -Please follow <a href="https://wiki.ubuntu.com/Backtrace">the instructions on the Ubuntu wiki</a>.
    -</p>
    -
    -<h2>The Easy Way</h2>
    -<p>
    - If you are able to reproduce the crash, the easiest way to obtain a backtrace is by doing
    - the following:
    -</p>
    -
    -<pre>
    -<code>[mark@diverge mark]$ <b>gdb pidgin</b>
    -GNU gdb Red Hat Linux (5.3post-0.20021129.18rh)
    -Copyright 2003 Free Software Foundation, Inc.
    -GDB is free software, covered by the GNU General Public License, and you are
    -welcome to change it and/or distribute copies of it under certain conditions.
    -Type "show copying" to see the conditions.
    -There is absolutely no warranty for GDB. Type "show warranty" for details.
    -This GDB was configured as "i386-redhat-linux-gnu"...
    -(no debugging symbols found)...
    -(gdb) <b>handle SIGPIPE nostop</b>
    -(gdb) <b>run</b>
    -<i>(stuff scrolls by)</i>
    -<i><b>(do whatever it is you did to get Pidgin to crash)</b></i>
    -(gdb) <b>bt full</b>
    -<i>(the bt scrolls by)</i>
    -<i><b>(copy and paste all of this to your bug report)</b></i>
    -(gdb) <b>quit</b>
    -[mark@diverge mark]$</code>
    -</pre>
    -
    -<h2>The Hard Way</h2>
    -<h3>or <i>"How To Make Use Of A Core File"</i></h3>
    -
    -<p>
    - When a program crashes it typically leaves a core file behind. In a console
    - window when you run <code>ls</code>, you should see a file called
    - <code>core</code>:
    -</p>
    -
    -<pre>
    -<code>~ $ <b>ls</b>
    -core</code>
    -</pre>
    -
    -<p>
    - Sometimes this file is also called pidgin.core or something similar, depending
    - on what OS you use and what your settings are. If you don't see this file,
    - it's possible that it's in a different location, and you should look at the
    - settings for your OS to see where it might be. It's also possible that the
    - core file was not created at all; this would happen if your system was
    - configured not to leave a core file. Often you just need to tell your shell
    - to not restrict the size of core files (this may only work for bash):
    -</p>
    -
    -<pre>
    -<code>~ $ <b>ulimit -c unlimited</b></code>
    -</pre>
    -
    -<p>
    - If you have a core file, first check to make sure that it was created by Pidgin,
    - by using <code>file</code> to examine it:
    -</p>
    -
    -<pre>
    -<code>~ $ <b>file core</b>
    -core: ELF 32-bit LSB core file of 'pidgin' (signal 11), Intel 80386, version 1, from 'pidgin'</code>
    -</pre>
    -
    -<p>
    - The output of <code>file</code> may look different depending on your OS and
    - hardware, but it should still be apparent that it was created by Pidgin.
    -</p>
    -<p>
    - Now that you have the core file, you'll want to get the useful information out
    - of it. In order to do that, you'll have to open it in GDB. GDB stands for GNU
    - DeBugger, and is a very useful programmer's tool. It needs to know which
    - application created the core file and what the core file name is, so run:
    -</p>
    -
    -<pre>
    -<code>~ $ <b>gdb pidgin core</b></code>
    -</pre>
    -
    -<pre>
    -<code>GNU gdb 5.0
    -Copyright 2000 Free Software Foundation, Inc.
    -GDB is free software, covered by the GNU General Public License, and you are
    -welcome to change it and/or distribute copies of it under certain conditions.
    -Type "show copying" to see the conditions.
    -There is absolutely no warranty for GDB. Type "show warranty" for details.
    -This GDB was configured as "i686-pc-linux-gnu"...
    -Core was generated by `Pidgin'.
    -Program terminated with signal 11, Segmentation fault.
    -Reading symbols from /usr/lib/libesd.so.0...done.
    -Loaded symbols for /usr/lib/libesd.so.0
    -Reading symbols from /lib/libm.so.6...done.
    -Loaded symbols for /lib/libm.so.6</code>
    -</pre>
    -
    -<p>
    - And so forth. There are a couple reasons why you might see something other
    - than this. One reason is if gdb can't find something it needs, it might give a
    - warning such as <code>"No such file or directory."</code>, in which case you
    - may have to give the full path to both Pidgin and the core file. Another reason
    - would be if the core file isn't created by Pidgin, you may see a message saying
    - "warning: core file may not match specified executable file."
    -</p>
    -<p>
    - If gdb loaded Pidgin and the core file successfully, then once it's done loading
    - all the symbols that it will need, it should print the information from the
    - top of the stack, and prompt you:
    -</p>
    -
    -<pre>
    -<code>#0 0x404f1140 in poll () from /lib/libc.so.6
    -(gdb)</code>
    -</pre>
    -
    -<p>
    - Now you'll want to get the backtrace. At the prompt, type either
    - <code>backtrace</code> or <code>bt</code>. gdb should then print a list of
    - all the functions that were called leading up to the crash:
    -</p>
    -
    -<pre>
    -<code>(gdb) <b>backtrace</b>
    -#0 0x404f1140 in poll () from /lib/libc.so.6
    -#1 0x40325f99 in g_main_poll (timeout=-1, use_priority=0, priority=0) at gmain.c:1034
    -#2 0x4032594d in g_main_iterate (block=1, dispatch=1) at gmain.c:808
    -#3 0x40325cfc in g_main_run (loop=0x81becb0) at gmain.c:935
    -#4 0x4023b4b7 in gtk_main () at gtkmain.c:524
    -#5 0x805b131 in main (argc=1, argv=0xbffffa94) at aim.c:669
    -#6 0x4044938b in __libc_start_main () from /lib/libc.so.6
    -(gdb)</code>
    -</pre>
    -
    -<p>
    - When you get the backtrace, instead of seeing function names, you might see
    - '??' instead. If that's the case, gdb couldn't read the function names from
    - Pidgin and the core file, and so the core file won't end up being very useful
    - after all. However, if you were able to see the function names, then copy all
    - of the output from the backtrace and post a <a href="bug.php">bug report</a>.
    - Be sure to also indicate what you were doing at the time.
    -</p>
    -<p>
    - Now you can exit gdb by typing <code>quit</code>:
    -</p>
    -
    -<pre>
    -<code>(gdb) <b>quit</b>
    -~ $</code>
    -</pre>
    -
    -<p>
    - There may be other useful information that can be retrieved from the core
    - file, such as the values of variables. For this reason it's a good idea to
    - keep the core file. If you upgrade Pidgin, the core file will no longer match
    - the binary, and it won't be useful anymore; however, don't let that stop you
    - from upgrading Pidgin, since there's a good chance your bug will have been
    - fixed.
    -</p>
    -
    -<h2>Distribution Notes</h2>
    -<ul>
    -<li>Debian: see <a href="http://wiki.debian.net/?HowToGetABacktrace">http://wiki.debian.net/?HowToGetABacktrace</a></li>
    -<li>Fedora: Install the -debuginfo rpm first. See <a href="http://fedoraproject.org/wiki/StackTraces">http://fedoraproject.org/wiki/StackTraces</a></li>
    -<li>Redhat: Install the -debuginfo rpm first</li>
    -<li>Gentoo: emerge pidgin with USE=debug</li>
    -</ul>
    -
    -<h2>Additional notes for those who want to do more</h2>
    -
    -<p>
    - Often, you will see a backtrace where one or more of the top lines is in
    - <code>malloc()</code> or <code>g_malloc()</code>. When this happens, chances
    - are your backtrace isn't very useful. The easiest way to find some useful
    - information is to set the environment variable <code>MALLOC_CHECK_</code> to
    - a value of 2. In bash this would be</p>
    - <pre><code>export MALLOC_CHECK_=2</code></pre>
    -<p>
    - You can re-run pidgin inside gdb to get a new backtrace. Note, this does not
    - affect existing core files.
    -</p>
    -