GDB: Ctrl+C doesn't interrupt process as it usually does but rather terminates the program

前端 未结 5 1798
南旧
南旧 2020-12-05 02:05

Normally when you run a program through GDB you can press Ctrl+C to interrupt it, e.g. if it gets stuck in an infinite loop and you want to get a backtrace.

I\'m deb

相关标签:
5条回答
  • 2020-12-05 02:39

    I'll bet that xmms2d is using sigwait() to handle signals, which breaks gdb's ability to catch CTRL-C. See https://bugzilla.kernel.org/show_bug.cgi?id=9039

    I got an idea for a workaround by reading Continue to debug after failed assertion on Linux? -- when I'm ready to break in gdb, I run "kill -TRAP <pid>" from another terminal window.

    0 讨论(0)
  • 2020-12-05 02:49

    In the gdb prompt you can do "handle SIGINT stop" so that gdb catches CTRL-C

    0 讨论(0)
  • 2020-12-05 02:52

    You can change GDB's input/output target using the following command:

    gdb -tty = /dev/tty1
    
    0 讨论(0)
  • 2020-12-05 03:04

    I had same problem caused by SDL signal handlers that interfere with gdb. One solution I find to workaround this when starting gdb:

    start
    call sigignore(2)
    continue
    

    Now all CTRL-C will be ignored by application.

    If you attach to some process and want to restore it to original condition after debuging, you can do this:

    set $oldcallback = signal(2, 0)
    call sigignore(2)
    continue
    

    And when you are done:

    call signal(2, $oldcallback)
    detach
    
    0 讨论(0)
  • 2020-12-05 03:05

    Note that running GDB under rlwrap breaks its ability to intercept ^C correctly. If you are doing this, then try running it without rlwrap.

    0 讨论(0)
提交回复
热议问题