On Tue, Jan 25, 2000 at 06:55:28PM +0100, Raphael Quinet <[EMAIL PROTECTED]> wrote:
> There is a difference between having the stack trace and having the
> program asking you if you want a stack trace... The latter is more
> useful for developers because you can also choose to start gdb and
Sorry, but _developers_ can always use gdb on the corefile. Having a
signal handler just destroys the stack frame (and the backtrace) in many
cases (here it almost always does).
> - I like Yosh's suggestion to have a configure option that allows to
> choose between "yes/no/query" for the stack trace. The "yes" option
The problem is that (shell-started) perl plug-ins always suffer from the
backtrace, so a configure option wouldn't help.
> triggers a direct call to g_on_error_stack_trace() when a SIGSEGV is
> received, the "no" option exits immediately, and the "query" option
> calls g_on_error_query() as it does now.
Why is that signal handler installed at all, I ask? The signal destroys
the stacktrace anyway. Why caqtch sigsegv at all? Why _exit_, and not dump
core with all trace and ip information intact?
> available on the command-line regardless of the default value
That's nicer, but I think the signals shouldn't be caught at all if it
is "no". It just shoots the developer in the foot. A commandline option
would, however, solve my and Jens' problems immediately (well, almost, as
I need to autodetect that case somehow).
A commandline option would also have no effects on the plug-ins itself, which
suffer from exactly the same problem.
> - The default for the code in CVS would always be "query". This
> ensures that all developers (those who use the CVS code) can easily
> debug the code without having to re-start with different options if
I really do not understand this. The stacktrace simply does not work.
Attaching a debugger is much better, but still: the core file a segv would
create would be _far_ more reliable.
I buy the argument that users can do bug reports better with an automatic
stacktrace, but I don't buy that it makes it easier for developers.
> What is the problem exactly? Most plug-ins do not install a special
> handler for SIGSEGV (actually, I don't remember any plug-in doing that)
Yes, but they do so for HUP, QUIT, INT, PIPE and TERM.
> if there was a handler installed previously. If you have a more
> specific problem, please explain it because I do not see what is wrong
> with the current plug-ins.
The libgimp overwrites signal handlers after they have been set up
(somewhere in gimp_main). That requires that I use sigaction calls rather
than using perl's own methods.
> and an old version of glib, but I haven't seen any similar problem in
> the past year. Also, the stack trace and the option to attach the
> debugger have both been very useful for me when I had some crashes
> under Solaris. Anyway, you could use the new command-line option to
> disable the stack trace if this is causing some problems.
Your proposal is a very good first step, and something lie that would be
a workaround for the problems. However, I still think that the stacktrace
code has done more harm than use, and I will never understand why
mindlessly scribbling over 8 signals just because you are a gimp plug-in
is ever going to help.
> Hmmm... I had these endless loop problems some time ago with 0.99.x
The endless loop problems are most probably caused because, after a
sigsegv, it does no good to do I/O, fork, start other processes, do stdio
After fputs(0xdeadbeaf,stdout), for example, I wouldn't expect a signal
handler to do anything except exit.
----==-- _ |
---==---(_)__ __ ____ __ Marc Lehmann +--
--==---/ / _ \/ // /\ \/ / [EMAIL PROTECTED] |e|
-=====/_/_//_/\_,_/ /_/\_\ XX11-RIPE --+
The choice of a GNU generation |