Domanda

A seguito di questa domanda:
Buona la segnalazione dei crash libreria in c#

C'è qualche libreria CrashRpt.dll che fa la stessa cosa su Linux?Che è, generare un report di errore tra un core dump e, se necessario, ambiente e segnalare allo sviluppatore su di esso?

Edit:Questo sembra essere un duplicato di questa domanda

È stato utile?

Altri suggerimenti

Compilare il codice con i simboli di debug, inserire unlimit coredumpsize nel proprio guscio e si otterrà un coredump nella stessa cartella il file binario.Utilizzare gdb/ddd - aprire il programma e quindi aprire il core dump.Si può controllare questo per ulteriori info.

@Ionut
Questo gestisce la generazione di core dump, ma non gestire notifica lo sviluppatore altri utenti hanno avuto incidenti.

Nathan, in quali circostanze, in un segmento di base non-zero?Non ho mai visto che si verificano nei miei 5 anni di Linux per lo sviluppo di applicazioni.

Grazie.

@Martin

Faccio architettonico di convalida per x86, quindi sono molto familiarità con l'architettura del processore, ma molto onufamiliarità con l'utilizzo.Che è quello che ho basato il mio commento.Se CR2 può essere contato su per dare la risposta corretta, quindi mi trovo corretto.

Nathan, non insistendo sul fatto che si erano sbagliati;Stavo solo dicendo che nella mia (limitata) esperienza con Linux, il segmento di base è sempre zero.Forse questa è una buona domanda per me a chiedere...

Nota:ci sono due interessanti registri in un x86 seg-errore di crash.

Il primo, EIP, specifica il codice di indirizzo in cui si è verificata l'eccezione.In RichQ risposta, egli utilizza addr2line per mostrare la riga che corrisponde al crash indirizzo.Ma il PEI può essere valido;se si chiama un puntatore a funzione che è nullo, può essere 0x00000000, e se si danneggia il vostro stack di chiamate, il ritorno può pop qualsiasi valore casuale nel PEI.

Il secondo, CR2, specifica l'indirizzo dei dati che ha causato l'errore di segmentazione.In RichQ esempio, è l'impostazione che ho come un puntatore nullo, quindi l'accesso a esso.In questo caso, CR2 sarebbe 0x00000000.Ma se si modifica:

int j = *i

a:

int j = i[2];

Quindi si sta cercando di accesso indirizzo 0x00000008, e che cosa si sarebbe trovato in CR2.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top