Ada*_*vis 8 debugging xcode sigint
我的控制台应用程序陷阱,SIGINT
所以它可以优雅地退出.
但是,在调试程序时按XCode内部的CTRL+ C不起作用.
我可以找到进程并使用终端窗口向SIGINT
我的进程发送一个,但是我希望我能在XCode中做一个更简单的解决方案.
调试器控制台的暂停按钮实际上会向您的应用发送SIGINT.如果您想让调试器将信号传递给您的应用程序,您可以执行以下操作:
handle SIGINT pass
并按ENTER键现在再次按下Xcode调试器控制台的Pause按钮将使SIGINT命中您的应用程序.
如果您不想在捕获SIGINT后立即停止调试器,您可能还想添加到上一个列表.handle SIGINT nostop
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)