Thu, 28 Oct 2010 11:02:13 +1100 письмо от Lex Trotman <elextr gmail com>:
> From the traceback below, GIO is using threads to implement
> asynchronism.  Using sigprocmask and therefore signal() is undefined
> in a multi-threaded program but probably defaults to applying to the
> current thread only. Clearly it hasn't blocked the sigint in the
> thread waiting on the pipe IO.  So that thread received the signal and
> executed the default action, terminate the process :-(
> Try blocking sigint very first thing in main(), before any g_* calls,
> then subsequent threads will inherit the signal mask with sigint
> blocked.
Thank you for your answer, Lex.
I put signal(SIGINT, SIG_IGN) as a first instruction in main(), but
SIGINT is still passing to IDE process, and moreover - to display manager
so my X session finishes if I'm not running all this mess under another gdb instance.
Maybe GTK resets handler to SIG_DFL for some reason? 
I didn't get clearly about threads, signal handler is set for a whole process, isn't it?

> GDB sends the signal to its child, ie the process its debugging, but
> signals received by any member go to the whole signal group which by
> default includes GDB itself and your IDE.
Here you gave me a point, I attempted out to move gdb to a new process group after spawning (setpgid(gdb_pid, 0)),
IDE stopped to receive SIGINT, but gdb output was not like any interruption
really took place: "^done\n&Quit\n", no "*stopped" marker,
so probably SIGINT was not sent at all to any process

> Thats the traceback, whats the error message, I'm assuming something
> like sigint received??
Program received signal SIGINT, Interrupt.
0xb7fe2424 in __kernel_vsyscall ()

I want be able to interrupt gdb to be able to insert/delete/modify breakpoints while
debugger is running, by the way I'm trying to do it for geany, I saw your name in geany-devel list,
are you still in business?

Best regards,

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]