Print source on SIGSEGV

This commit is contained in:
kamkow1
2025-03-12 20:52:02 +01:00
parent 0742db18d8
commit a9f555d916

View File

@@ -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;