【问题标题】:How do I generate a SIGINT when using XCode to debug?使用 XCode 调试时如何生成 SIGINT?
【发布时间】:2011-10-01 11:07:59
【问题描述】:

我的控制台应用捕获了SIGINT,因此它可以正常退出。

但是,在调试程序时在 XCode 中按 CTRL+C 无效。

我可以找到进程并使用终端窗口向我的进程发送SIGINT,但是我希望有一个更简单的解决方案可以在 XCode 中完成。

【问题讨论】:

    标签: xcode debugging sigint


    【解决方案1】:

    调试器控制台的 pause 按钮实际上会向您的应用发送 SIGINT。 如果您想让调试器将信号传递到您的应用,您可以执行以下操作:

    1. 按下调试器的暂停按钮,等待调试控制台获得焦点
    2. 输入handle SIGINT pass,然后按ENTER
    3. 继续按钮

    现在再次按下 Xcode 调试器控制台的 Pause 按钮将使 SIGINT 命中您的应用。

    如果您不希望调试器在 SIGINT 被捕获后立即停止,您可能还需要将 handle SIGINT nostop 添加到上一个列表中。 p>

    【讨论】:

    • 不再适用于使用 llvm 调试器的 XCode 6。
    • @Lothar 我为 Xcode 5 及更高版本添加了答案:stackoverflow.com/a/36521995/1255551
    • @wobbals 添加了适用于 XCode 8 及更高版本(例如 10.0)的解决方案:stackoverflow.com/a/44516465/1032277
    【解决方案2】:

    2017 / Xcode 8 更新:用于通知 lldb 您处理中断的意图的正确命令:

    process handle SIGINT -s false
    process handle SIGINT -p true
    

    根据我的经验,即使使用上述命令,调试器的 pause 功能仍然会中断应用程序并将控制权交给调试器的堆栈指针,但是终端上的 pkill -2 appname 会触发您的中断函数无需与调试器进行任何交互,例如:

    void on_signal(int sig) {
      is_interrupted = 1;
    }
    
    int main(int argc, const char * argv[]) {
      signal(SIGINT, on_signal);
      // ... do stuff
    }
    

    【讨论】:

      【解决方案3】:

      在 Xcode 5+ (llvm) 中:

      1. 暂停进程

      2. (llvm) 提示符下,输入process signal SIGINT

      3. 恢复执行

      【讨论】:

      【解决方案4】:

      一种解决方案是使用 UNIX killkillall 命令。

      如果您知道进程 ID,您可以打开终端应用程序并输入:

      kill -SIGINT 415
      

      (其中 415 是此进程的 PID)

      或者,也许更简单,您可以键入

      killall -SIGINT my_console_app
      

      (其中my_console_app 是您的应用程序的名称,即创建的二进制文件的名称 - 如果它在一个包中,则不是捆绑包)

      这会将信号发送到应用程序的所有个实例,正如名称killall 所暗示的那样,因此它可能不合适。在执行 killall (;

      【讨论】:

        【解决方案5】:

        处理中断的麻烦的解决方法之一是使用 CTRL-C 快捷方式创建 MainMenu 来执行您请求的例程,或者如果您确实需要 sig,则向自身发送SIGINT

        【讨论】:

          猜你喜欢
          • 2011-02-04
          • 2016-10-03
          • 2013-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-29
          • 1970-01-01
          相关资源
          最近更新 更多