Today I found this :
#include "execinfo.h"
void BT(void) { void *array[50]; size_t size; char **strings; size_t i; size = backtrace (array, 50); strings = backtrace_symbols (array, size); printf ("Obtained %zd stack frames.\n", size); for (i = 0; i < size; i++) printf ("%s\n", strings[i]); free (strings); }
That allow to dump a backtrace (here max 50 frames) from inside a running program. Quite useful if app is non debuggable and don't run with +relay on because of copy protection.
Ciao
Max
2009/4/21 Massimo Del Fedele max@veneto.com:
Today I found this :
#include "execinfo.h"
void BT(void) { void *array[50]; size_t size; char **strings; size_t i;
size = backtrace (array, 50); strings = backtrace_symbols (array, size);
printf ("Obtained %zd stack frames.\n", size);
for (i = 0; i < size; i++) printf ("%s\n", strings[i]);
free (strings); }
That allow to dump a backtrace (here max 50 frames) from inside a running program. Quite useful if app is non debuggable and don't run with +relay on because of copy protection.
Are there any cases like that where the sourcecode of the app is available?
Ben Klein ha scritto:
Are there any cases like that where the sourcecode of the app is available?
I see it much more useful to track the call stack inside wine, not in the app. In my app there's a crash that's triggered after many wine calls, and this was useful to track them down up to calling code inside the application. Of course you can do the same with debugger, IF the app is debuggable, or with +relay, IF the app hasn't some fancy copy protection that blocks it. That was my case.
Ciao
Max