aboutsummaryrefslogtreecommitdiffstats
path: root/doc/backtrace.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/backtrace.txt')
-rw-r--r--doc/backtrace.txt277
1 files changed, 0 insertions, 277 deletions
diff --git a/doc/backtrace.txt b/doc/backtrace.txt
deleted file mode 100644
index cf2518de0..000000000
--- a/doc/backtrace.txt
+++ /dev/null
@@ -1,277 +0,0 @@
-===============================================================================
-===
-=== Collecting Backtrace Information
-===
-=== Last updated: 2010-04-12
-===============================================================================
-
-This document is intended to provide information on how to obtain the
-backtraces required on the asterisk bug tracker, available at
-https://issues.asterisk.org.
-
--------------------------------------------------------------------------------
---- Overview
--------------------------------------------------------------------------------
-
-The backtrace information is required by developers to help fix problem with
-bugs of any kind. Backtraces provide information about what was wrong when a
-program crashed; in our case, Asterisk.
-
--------------------------------------------------------------------------------
---- Preparing Asterisk To Produce Core Files On Crash
--------------------------------------------------------------------------------
-
-First of all, when you start Asterisk, you MUST start it with option
--g. This tells Asterisk to produce a core file if it crashes.
-
-If you start Asterisk with the safe_asterisk script, it automatically
-starts using the option -g.
-
-If you're not sure if Asterisk is running with the -g option, type the
-following command in your shell:
-
-debian:/tmp# ps aux | grep asterisk
-root 17832 0.0 1.2 2348 788 pts/1 S Aug12 0:00 /bin/sh /usr/sbin/safe_asterisk
-root 26686 0.0 2.8 15544 1744 pts/1 S Aug13 0:02 asterisk -vvvg -c
-[...]
-
-The interesting information is located in the last column.
-
-Second, your copy of Asterisk must have been built without
-optimization or the backtrace will be (nearly) unusable. This can be
-done by selecting the 'DONT_OPTIMIZE' option in the Compiler Flags
-submenu in the 'make menuselect' tree before building Asterisk.
-
-Running a production server with DONT_OPTIMIZE is generally safe.
-You'll notice the binary files may be a bit larger, but in terms of
-Asterisk performance, and impact should be negligible.
-
-After Asterisk crashes, a core file will be "dumped" in your /tmp/
-directory. To make sure it's really there, you can just type the
-following command in your shell:
-
-debian:/tmp# ls -l /tmp/core.*
--rw------- 1 root root 10592256 Aug 12 19:40 /tmp/core.26252
--rw------- 1 root root 9924608 Aug 12 20:12 /tmp/core.26340
--rw------- 1 root root 10862592 Aug 12 20:14 /tmp/core.26374
--rw------- 1 root root 9105408 Aug 12 20:19 /tmp/core.26426
--rw------- 1 root root 9441280 Aug 12 20:20 /tmp/core.26462
--rw------- 1 root root 8331264 Aug 13 00:32 /tmp/core.26647
-debian:/tmp#
-
-In the event that there are multiple core files present (as in the
-above example), it is important to look at the file timestamps in
-order to determine which one you really intend to look at.
-
--------------------------------------------------------------------------------
---- Getting Information After A Crash
--------------------------------------------------------------------------------
-
-There are two kind of backtraces (aka 'bt') which are useful: bt and bt full.
-
-Now that we've verified the core file has been written to disk, the final part
-is to extract 'bt' from the core file. Core files are pretty big, don't be
-scared, it's normal.
-
-******************************************************************************
-*** NOTE: Don't attach core files on the bug tracker as they are only useful *
-*** on the machine they were generated on. We only need the output of *
-*** the 'bt' and 'bt full.' *
-******************************************************************************
-
-For extraction, we use a really nice tool, called gdb. To verify that
-you have gdb installed on your system:
-
-debian:/tmp# gdb -v
-GNU gdb 6.3-debian
-Copyright 2004 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-linux".
-debian:/tmp#
-
-If you don't have gdb installed, go install gdb. You should be able to install
-using something like: apt-get install gdb --or-- yum install gdb
-
-Now load the core file in gdb with the following command. This will also save
-the output of gdb to the /tmp/backtract.txt file.
-
-# gdb -se "asterisk" -c /tmp/core.26252 | tee /tmp/backtrace.txt
-
-******************************************************************************
-*** TIP!
-*** Just run the following command to get the output into the
-*** backtrace.txt file, ready for uploading to the issue tracker. Be sure
-*** to change the name of the core file to your actual core dump file:
-***
-*** gdb -se "asterisk" -ex "bt full" -ex "thread apply all bt" --batch -c /tmp/core.26252 > /tmp/backtrace.txt
-***
-******************************************************************************
-
-
-[...]
-(You would see a lot of output here.)
-[...]
-Reading symbols from /usr/lib/asterisk/modules/app_externalivr.so...done.
-Loaded symbols for /usr/lib/asterisk/modules/app_externalivr.so
-#0 0x29b45d7e in ?? ()
-(gdb)
-
-In order to make extracting the gdb output easier, you may wish to
-turn on logging using "set logging on". This command will save all
-output to the default file of gdb.txt, which in the end can be
-uploaded as an attachment to the bug tracker.
-
-Now at the gdb prompt, type: bt
-You would see output similar to:
-
-(gdb) bt
-#0 0x29b45d7e in ?? ()
-#1 0x08180bf8 in ?? ()
-#2 0xbcdffa58 in ?? ()
-#3 0x08180bf8 in ?? ()
-#4 0xbcdffa60 in ?? ()
-#5 0x08180bf8 in ?? ()
-#6 0x180bf894 in ?? ()
-#7 0x0bf80008 in ?? ()
-#8 0x180b0818 in ?? ()
-#9 0x08068008 in ast_stopstream (tmp=0x40758d38) at file.c:180
-#10 0x000000a0 in ?? ()
-#11 0x000000a0 in ?? ()
-#12 0x00000000 in ?? ()
-#13 0x407513c3 in confcall_careful_stream (conf=0x8180bf8, filename=0x8181de8 "DAHDI/pseudo-1324221520") at app_meetme.c:262
-#14 0x40751332 in streamconfthread (args=0x8180bf8) at app_meetme.c:1965
-#15 0xbcdffbe0 in ?? ()
-#16 0x40028e51 in pthread_start_thread () from /lib/libpthread.so.0
-#17 0x401ec92a in clone () from /lib/libc.so.6
-(gdb)
-
-
-The bt's output is the information that we need on the bug tracker.
-
-Now do a bt full as follows:
-
-(gdb) bt full
-#0 0x29b45d7e in ?? ()
-No symbol table info available.
-#1 0x08180bf8 in ?? ()
-No symbol table info available.
-#2 0xbcdffa58 in ?? ()
-No symbol table info available.
-#3 0x08180bf8 in ?? ()
-No symbol table info available.
-#4 0xbcdffa60 in ?? ()
-No symbol table info available.
-#5 0x08180bf8 in ?? ()
-No symbol table info available.
-#6 0x180bf894 in ?? ()
-No symbol table info available.
-#7 0x0bf80008 in ?? ()
-No symbol table info available.
-#8 0x180b0818 in ?? ()
-No symbol table info available.
-#9 0x08068008 in ast_stopstream (tmp=0x40758d38) at file.c:180
-No locals.
-#10 0x000000a0 in ?? ()
-No symbol table info available.
-#11 0x000000a0 in ?? ()
-No symbol table info available.
-#12 0x00000000 in ?? ()
-No symbol table info available.
-#13 0x407513c3 in confcall_careful_stream (conf=0x8180bf8, filename=0x8181de8 "DAHDI/pseudo-1324221520") at app_meetme.c:262
- f = (struct ast_frame *) 0x8180bf8
- trans = (struct ast_trans_pvt *) 0x0
-#14 0x40751332 in streamconfthread (args=0x8180bf8) at app_meetme.c:1965
-No locals.
-#15 0xbcdffbe0 in ?? ()
-No symbol table info available.
-#16 0x40028e51 in pthread_start_thread () from /lib/libpthread.so.0
-No symbol table info available.
-#17 0x401ec92a in clone () from /lib/libc.so.6
-No symbol table info available.
-(gdb)
-
-The final "extraction" would be to know all traces by all threads. Even if
-Asterisk runs on the same thread for each call, it could have created some new
-threads.
-
-To make sure we have the correct information, just do:
-(gdb) thread apply all bt
-
-Thread 1 (process 26252):
-#0 0x29b45d7e in ?? ()
-#1 0x08180bf8 in ?? ()
-#2 0xbcdffa58 in ?? ()
-#3 0x08180bf8 in ?? ()
-#4 0xbcdffa60 in ?? ()
-#5 0x08180bf8 in ?? ()
-#6 0x180bf894 in ?? ()
-#7 0x0bf80008 in ?? ()
-#8 0x180b0818 in ?? ()
-#9 0x08068008 in ast_stopstream (tmp=0x40758d38) at file.c:180
-#10 0x000000a0 in ?? ()
-#11 0x000000a0 in ?? ()
-#12 0x00000000 in ?? ()
-#13 0x407513c3 in confcall_careful_stream (conf=0x8180bf8, filename=0x8181de8 "DAHDI/pseudo-1324221520") at app_meetme.c:262
-#14 0x40751332 in streamconfthread (args=0x8180bf8) at app_meetme.c:1965
-#15 0xbcdffbe0 in ?? ()
-#16 0x40028e51 in pthread_start_thread () from /lib/libpthread.so.0
-#17 0x401ec92a in clone () from /lib/libc.so.6
-(gdb)
-
-
-That output tells us crucial information about each thread.
-
--------------------------------------------------------------------------------
---- Getting Information For A Deadlock
--------------------------------------------------------------------------------
-
-Whenever supplying information about a deadlock (i.e. when you run the
-'core show locks' command on the Asterisk console), it is useful to also have
-additional information about the threads. We can generate this information by
-attaching to a running Asterisk process and gathering that information.
-
-You can easily attach to a running Asterisk process, gather the output required
-and then detach from the process all in a single step. Execute the following
-command and upload the resulting backtrace-threads.txt file to the Asterisk
-issue tracker:
-
- gdb -ex "thread apply all bt" --batch /usr/sbin/asterisk `pidof asterisk` > /tmp/backtrace-threads.txt
-
-Note that this gathers information from the running Asterisk process, so you
-want to make sure you run this command immediately before or after gathering
-the output of 'core show locks'. You can gather that information by running the
-following command:
-
- asterisk -rx "core show locks" > /tmp/core-show-locks.txt
-
--------------------------------------------------------------------------------
---- Verify Your Backtraces
--------------------------------------------------------------------------------
-
-Before uploading your backtraces to the issue tracker, you should double check
-to make sure the data you have is of use to the developers. Check your
-backtrace files to make sure you're not seeing several of the following:
-
- <value optimized out>
-
-If you are, then you likely haven't compiled with DONT_OPTIMIZE. The impact of
-DONT_OPTIMIZE is negligible on most systems. Be sure you've enabled the
-DONT_OPTIMIZE flag within the Compiler Flags section of menuselect. After
-doing so, be sure to run 'make install' and restart Asterisk.
-
--------------------------------------------------------------------------------
---- Uploading Your Information To The Issue Tracker
--------------------------------------------------------------------------------
-
-You're now ready to upload your files to the Asterisk issue tracker (located at
-https://issues.asterisk.org).
-
-******************************************************************************
-*** NOTE: Please ATTACH your output! DO NOT paste it as a note! *
-******************************************************************************
-
-If you have questions or comments regarding this documentation, feel free to
-pass by the #asterisk-bugs channel on irc.freenode.net.