gpt4 book ai didi

ios - 我可以在信号处理程序中做什么?

转载 作者:可可西里 更新时间:2023-11-01 04:38:56 26 4
gpt4 key购买 nike

struct sigaction newSignalAction;
memset(&newSignalAction, 0, sizeof(newSignalAction));
newSignalAction.sa_handler = &SignalHandler;
sigaction(SIGSEGV, &newSignalAction, NULL);

[TestFlight takeOff:@"etc etc etc"];

然后

void SignalHandler(int sig) {
NSLog(@"Boom");
}

我尝试执行 SIGSEGV 信号:

int *p = NULL;
*p = 1;

但是我的处理程序没有被调用。相反,Xcode 指出行 *p = 1

我读到您不能使用信号处理程序打印内容。也许这就是问题所在。那我可以做什么?我听说您应该保存数据 - 所以我想我可以在 Documents 目录中创建文件。我也尝试这样做,但也没有创建文件。

最佳答案

近似地,您不能在信号处理程序中执行任何操作。问题是被信号中断的代码可能持有锁。如果您的处理程序试图获取相同的锁,那么它就会死锁。

sigaction 手册页列出了正式批准用于信号处理程序的函数。 list 很短。 NSLog() 和 Objective-C 方法调度都不在该列表中。

但是,如果 NSLog() 没有死锁,那么它应该像往常一样打印输出。也许您的崩溃是 SIGBUS 而不是 SIGSEGV。也许编译器优化器正在转换您的 *NULL=1 以使其以不同的方式崩溃。也许 TestFlight 安装了自己的信号处理程序来替换您的信号处理程序。

关于ios - 我可以在信号处理程序中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24051879/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com