Print source on SIGSEGV
This commit is contained in:
@@ -54,6 +54,8 @@ int msleep(long msec)
|
|||||||
#define INIT_SCRIPT ".debugusrc.js"
|
#define INIT_SCRIPT ".debugusrc.js"
|
||||||
#define MAX_JS_FUNCS 100
|
#define MAX_JS_FUNCS 100
|
||||||
|
|
||||||
|
#define SOURCE_EXPANSION 4
|
||||||
|
|
||||||
void print_source(const char *file, size_t line)
|
void print_source(const char *file, size_t line)
|
||||||
{
|
{
|
||||||
FILE *src = fopen(file, "r");
|
FILE *src = fopen(file, "r");
|
||||||
@@ -69,7 +71,7 @@ void print_source(const char *file, size_t line)
|
|||||||
fread(srcbuf, sz, 1, src);
|
fread(srcbuf, sz, 1, src);
|
||||||
srcbuf[sz] = '\0';
|
srcbuf[sz] = '\0';
|
||||||
|
|
||||||
const int expand = 4;
|
const int expand = SOURCE_EXPANSION;
|
||||||
|
|
||||||
char *p = srcbuf;
|
char *p = srcbuf;
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
@@ -257,6 +259,11 @@ void dbg_handle_sigsegv(Dbg *dbg, siginfo_t info)
|
|||||||
AddrInfo *ai = libelfin_wrap_info_from_rip(dbg->plibelfin, (uint64_t)(addr - dbg->program_load_offset));
|
AddrInfo *ai = libelfin_wrap_info_from_rip(dbg->plibelfin, (uint64_t)(addr - dbg->program_load_offset));
|
||||||
if (ai != NULL) {
|
if (ai != NULL) {
|
||||||
LOG_INF("%s:%zu in function %s()\n", ai->file, (size_t)ai->line, dbg->symbols.items[i].name);
|
LOG_INF("%s:%zu in function %s()\n", ai->file, (size_t)ai->line, dbg->symbols.items[i].name);
|
||||||
|
AddrInfo *ai2 = libelfin_wrap_info_from_rip(dbg->plibelfin, (uint64_t)(rip - dbg->program_load_offset));
|
||||||
|
if (ai2 != NULL) {
|
||||||
|
print_source(ai2->file, ai2->line);
|
||||||
|
libelfin_wrap_free_info(ai2);
|
||||||
|
}
|
||||||
libelfin_wrap_free_info(ai);
|
libelfin_wrap_free_info(ai);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user