Идея обходного пути: если существует только небольшое количество мест, которые могут вызвать обработчик сигнала, или вас интересует только, в каком большем блоке это произошло, вы можете сохранить это в переменной.
(64-битной или 32-битной) Linux - например:
void signal_handler(int) {
// want to know where the program is interrupted ...
}
int main() {
...
signal(SIGALRM, signal_handler);
alarm(5);
...
printf(...); <------- at this point, we trigger signal_handler
...
}
В signal_handler, как мы можем узнать, что мы прерваны в printf в main ()?