Difference between revisions of "Stack Trace"

From GnuCash
Jump to: navigation, search
(See also: Windows link)
(What is a Stack Trace?: add windows comment)
Line 1: Line 1:
 
__NOTOC__
 
__NOTOC__
= What is a Stack Trace? =
+
== What is a Stack Trace? ==
 
If GnuCash terminates abnormally (i. e. it crashes), then a ''stack trace'' is a very helpful information for the developers to figure out the program error that caused this crash.
 
If GnuCash terminates abnormally (i. e. it crashes), then a ''stack trace'' is a very helpful information for the developers to figure out the program error that caused this crash.
 +
 +
=== Also on Windows? ===
 +
However, on [[Windows]] there is currently no easy way to obtain such a stack trace. Some explanation on how to do this for experts is on [[Windows#gdb]], but we are aware of the fact that this is way too difficult for the average user. If you have been asked to provide a stack trace, but you are using GnuCash on Windows only, please respond along the lines of "I'm sorry, but I encountered this problem only on Windows and your wiki page says it's impossible to obtain stack traces there". Thanks a lot.
  
 
== How to obtain a Stack Trace ==
 
== How to obtain a Stack Trace ==

Revision as of 14:42, 4 June 2007

What is a Stack Trace?

If GnuCash terminates abnormally (i. e. it crashes), then a stack trace is a very helpful information for the developers to figure out the program error that caused this crash.

Also on Windows?

However, on Windows there is currently no easy way to obtain such a stack trace. Some explanation on how to do this for experts is on Windows#gdb, but we are aware of the fact that this is way too difficult for the average user. If you have been asked to provide a stack trace, but you are using GnuCash on Windows only, please respond along the lines of "I'm sorry, but I encountered this problem only on Windows and your wiki page says it's impossible to obtain stack traces there". Thanks a lot.

How to obtain a Stack Trace

There are two possibilities to obtain a stack trace. You can choose either one, whichever seems easier or works better for you.

Attach gdb to running process

The program "gnucash" itself is not an executable but a script. Therefore it cannot be called directly by the gdb debugger. We propose to "attach" the gdb to the running gnucash process instead.

To attach to the running gnucash process:

  1. Start gnucash normally
  2. Use "ps afx" (some people prefere "ps aux") to find out the process number (PID) of the running gnucash process; it might be called "gnucash" or "gnucash-bin". Say the PID is 12345.
  3. Start gdb by typing "gdb"
  4. Attach to the running process by typing "attach 12345"; gdb will temporarily stop the program
  5. Continue program execution by typing "continue" at the "(gdb)" prompt
  6. Provoke the crash; type "backtrace" or shorthand "bt" at the gdb prompt to obtain the backtrace.

Please submit the backtrace together with the instructions on how to reproduce this crash as a new bug report into Bugzilla. Thank you for your contribution.

Starting GnuCash under gdb

Sometimes GnuCash might crash too early in the startup sequence such that you cannot attach gdb to the running process. In that case you can run gnucash under gdb. This is much easier as of GnuCash 2.0. To run GnuCash under gdb from the beginning:

  1. run "gnucash-env gdb gnucash-bin"
  2. at the gdb prompt, type: "run". Also add your parameters here, like "run --nofile"
  3. Provoke the crash; type "backtrace" or shorthand "bt" at the gdb prompt to obtain the backtrace.

See also

Other explanations on how to obtain stack traces:

Debug symbol information

Gnucash needs to be compiled in a way that has the debug symbols still included in the resulting binary libraries. When compiling gnucash from the tarball yourself, this is achieved by using the configure option ./configure --enable-debug.

Gentoo

When emerging gnucash on gentoo, you need to make sure that

  1. the "debug" flag is enabled
  2. and "FEATURES=nostrip" is set to disable symbol stripping.