From Federico Mena Quintero:
"X is not locked up. It is likely that you are hitting a breakpoint inside a callback that is called from a place in Gtk that has a mouse grab."
"Run your program with the --sync option; it will make it easier to debug. Also, you may want to use the console for running the debugger, and just let the program run in another console with the X server."
Eric Mouw had another solution:
"An old terminal connected to an otherwise unused serial port is also great for debugging X programs. Old vt100/vt220 terminals are dirt cheap but a bit hard to get (here in The Netherlands, YMMV)."
Another option is to run your application on Xnest. Xnest is an X server which displays its root window in a regular window of another X server. A pointer grab on the Xnest display will not affect the GUI of your debugger running on your regular X server.
Xnest :1 twm -display :1 myapp --display=:1