使用XCode进行调试时如何生成SIGINT?

Ada*_*vis 8 debugging xcode sigint

我的控制台应用程序陷阱,SIGINT所以它可以优雅地退出.

但是,在调试程序时按XCode内部的CTRL+ C不起作用.

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

ale*_*ria 5

调试器控制台的暂停按钮实际上会向您的应用发送SIGINT.如果您想让调试器信号传递给您的应用程序,您可以执行以下操作:

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

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

如果您不想在捕获SIGINT后立即停止调试器,您可能还想添加到上一个列表.handle SIGINT nostop

  • 使用llvm调试器的XCode 6不再起作用. (4认同)

wob*_*als 5

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

process handle SIGINT -s false
process handle SIGINT -p true
Run Code Online (Sandbox Code Playgroud)

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

void on_signal(int sig) {
  is_interrupted = 1;
}

int main(int argc, const char * argv[]) {
  signal(SIGINT, on_signal);
  // ... do stuff
}
Run Code Online (Sandbox Code Playgroud)