bl()/rmbl() commands for setting/removing breakpoints at source line

This commit is contained in:
kamkow1
2025-03-13 16:02:15 +01:00
parent 07c4b9283b
commit 46c8a1e26b
4 changed files with 61 additions and 2 deletions

View File

@@ -188,7 +188,6 @@ static RegisterDescriptor reg_descriptors[MAX_REGISTERS] = {
typedef struct {
pid_t pid;
pid_t proc_pid;
uintptr_t addr;
bool enabled;
uint8_t data;
@@ -712,6 +711,42 @@ done:
js_pushundefined(js);
}
void dbg_js_bl(js_State *js)
{
Dbg *dbg = getdbg();
const char *filepath = js_tostring(js, 1);
size_t line = (size_t)js_tonumber(js, 2);
AddrInfo *ai = libelfin_wrap_info_from_line(dbg->plibelfin, filepath, line);
if (ai != NULL) {
char addr_str[20];
snprintf(addr_str, sizeof(addr_str), "0x%"PRIxPTR, ai->addr);
Brk brk = { .pid = dbg->pid, .addr = ai->addr };
brk_enable(&brk);
hashtable_set(&dbg->brks, addr_str, &brk, sizeof(brk));
libelfin_wrap_free_info(ai);
}
js_pushundefined(js);
}
void dbg_js_rmbl(js_State *js)
{
Dbg *dbg = getdbg();
const char *filepath = js_tostring(js, 1);
size_t line = (size_t)js_tonumber(js, 2);
AddrInfo *ai = libelfin_wrap_info_from_line(dbg->plibelfin, filepath, line);
if (ai != NULL) {
char addr_str[20];
snprintf(addr_str, sizeof(addr_str), "0x%"PRIxPTR, ai->addr);
Brk *brk = (Brk *)hashtable_get(&dbg->brks, addr_str);
if (brk != NULL) {
brk_disable(brk);
hashtable_delete(&dbg->brks, addr_str);
}
libelfin_wrap_free_info(ai);
}
js_pushundefined(js);
}
void dbg_init_js(Dbg *dbg)
{
dbg->js = js_newstate(NULL, NULL, JS_STRICT);
@@ -746,6 +781,8 @@ void dbg_init_js(Dbg *dbg)
make_js_func(dbaddr, 1, "Disable breakpoint at address, ARGS=Address:hex string");
make_js_func(ebfn, 1, "Enable breakpoint at function, ARGS=Function name:string");
make_js_func(dbfn, 1, "Disable breakpoint at function, ARGS=Function name:string");
make_js_func(bl, 2, "Set breakpoint at line in file, ARGS=File:string,Line:int");
make_js_func(rmbl, 2, "Remove breakpoint at line in file, ARGS=File:string,Line:int");
#undef make_js_func
}