Supposons que je donne les résultats suivants:utiliser la fonction de rappel pour signaler pile backtrace
typedef struct {
char *name;
char binding;
int address;
} Fn_Symbol //definition of function symbol
static Fn_Symbol *fnSymbols; //array of function symbols in a file
statc int total; //number of symbol functions in the array and file
static void PrintBacktrace(int sigum, siginfo_t * siginfo, void *context)
{
printf("\nSignal received %d (%s)\n", signum, strsignal(signum));
const int eip_index = 14;
void *eip = (void *)((struct ucontext *)context)->uc_mcontext.gregs[eip_index];
printf("Error at [%p] %s (+0x%x), eip, fnName, offset from start); //?????
exit(0);
}
J'ai ce jusqu'à présent, mais quelle est la meilleure façon en utilisant le pointeur global fnSymbols statique pour identifier la fonction où l'erreur est survenue et puis retour trace à travers la pile pour identifier chaque fonction d'appel par adresse, nom et décalage?
http://stackoverflow.com/questions/3151779/how-its-better-to-invoke-gdb-from-program-to-print-its-stacktrace/4611112#4611112 – karlphillip