Utilizzo gestori di segnale in un'applicazione Objective-C per rilevare errori irreversibili, come SIGSEGV
, SIGBUS
e simili.Xcode: GDB e gestori di segnale
Quando un tale segnale viene generato, sto scrivendo un file di registro, con un backtrace e dettagli sull'errore (so che posso avere problemi di rientranza, ma non è questo il punto).
In questo modo, posso sapere al prossimo avvio che l'applicazione si è arrestata in modo anomalo e posso chiedere all'utente se desidera riempire un bug report.
Funziona correttamente quando avvio l'app manualmente.
Ma quando lo eseguo da Xcode (con GDB), i gestori di segnale non vengono chiamati.
Ho provato a impostarli con signal
o sigaction
, ma non c'è differenza.
Ho anche verificato con info signals
che quei segnali sono impostati su pass
, il che significa che devono essere passati all'applicazione.
Questo non è un grosso problema, poiché ho riscontrato questo problema solo quando eseguo il debug della mia applicazione, ma sarà molto bello farlo funzionare anche con GDB.
Qualcuno ha riscontrato e risolto un problema simile?
Si potrebbe voler provare a impostare questi segnali su nostop in gdb, quindi è gestito dalla propria applicazione. – steve
L'ho provato prima di fare la domanda, ma suppongo di aver fatto un errore perché non ha funzionato. L'ho provato di nuovo oggi e funziona come un incantesimo. Potresti voler riempire una risposta con questo, quindi posso accettarlo. Grazie :) – Macmade