【问题标题】:How to make gdb send an external notification on receiving a signal?如何让 gdb 在收到信号时发送外部通知?
【发布时间】:2011-06-18 06:04:15
【问题描述】:

我在 tmux 会话中的 gdb 内以前台模式调试运行守护程序应用程序。此守护程序偶尔会因 SIGSEGV 崩溃。这次崩溃的结果对外界来说并没有立即显现出来,所以我可能需要一段时间才能发现守护进程已经崩溃。我想在发生崩溃时立即收到某种通知,即使是电子邮件也可以。我没有从 man gdb 那里找到任何帮助。这是如何(如果有的话)实现的?

~ $ gdb --version
GNU gdb (Gentoo 7.2 p1) 7.2

【问题讨论】:

    标签: gdb notifications crash-reports


    【解决方案1】:

    便宜又丑陋的东西:

    while sleep 30 ; ps auxw | grep progname | grep " t "` && mail -s CRASHED username@host < /etc/hostname ; done
    

    如果您希望它只发送一次;) 那么还有更多工作要做。但是每 30 秒发送一封电子邮件,直到你杀死这可能只是诀窍。

    【讨论】:

      【解决方案2】:

      看起来我已经解决了这个问题,过了一会儿又回到了它。在Make gdb quit automatically on successful termination? 的答案之一中提示有关 $_exitcode 的提示让我走上了这条路,并在gdb hooks 上进行了一些谷歌搜索。

      经过一些试验,这就是我现在为这个应用程序的 .gdbinit 所拥有的。好消息是,我可以区分信号,所以正常的 kill 命令给了我一个正常的完全退出三头怪物(tmux + gdb + app),而任何不寻常的东西都会掉到 gdb shell,抽出一封电子邮件并等待我 tmux 诊断:

      set $_exitcode = -999
      set height 0
      handle SIGTERM nostop print pass
      handle SIGPIPE nostop
      define hook-stop
          if $_exitcode != -999
              quit
          else
              shell echo | mail -s "NOTICE: app has stopped on unhandled signal" root
          end
      end
      echo .gdbinit: running app\n
      run
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-28
        • 2017-10-06
        • 1970-01-01
        • 1970-01-01
        • 2011-12-11
        • 1970-01-01
        • 2016-08-19
        • 1970-01-01
        相关资源
        最近更新 更多