2011-09-16 16 views
5

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?

+0

Si potrebbe voler provare a impostare questi segnali su nostop in gdb, quindi è gestito dalla propria applicazione. – steve

+0

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

risposta

1

Si potrebbe voler provare a impostare questi segnali su nostop in gdb, quindi è gestito dalla propria applicazione.

Problemi correlati