我是iOS开发人员,并尝试在子线程中获取主线程的回溯。
首先,像performSelector
或dispatch_async
之类的东西不起作用,因为它会破坏主线程的当前回溯。
我不擅长C / C ++编程,所以看看内存中的符号对我来说似乎是不可能的。
在我看来,解决这个问题的关键是在不调用方法的情况下在特定线程中执行代码。 This article激励我使用信号。
我知道pthread_kill
可以向特定线程发送信号,然后处理程序可以捕获此信号。但是我无法找到并且可以运行这个演示。我发现的所有演示都使用处理程序来捕获在进程外部生成的信号,例如按Ctrl + C
。
我尝试了下面的代码,但仍然有一个信号SIGINT
,这意味着它没有被处理程序捕获。
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <pthread.h>
void sig_handler(int signum) {
printf("Received signal %d\n", signum);
}
int main() {
signal(SIGINT, sig_handler);
pthread_kill(pthread_self(), SIGINT);
return 0;
}
我也听说在信号处理程序中使用printf
并不安全。所以我想知道是否可以使用signal来获取其他线程的回溯。