more debug functions

This commit is contained in:
2025-12-06 12:02:19 -06:00
parent 5ac58dfbb0
commit 33ebd8f45d
4 changed files with 48 additions and 6 deletions

View File

@@ -9,6 +9,11 @@ JSC_CCALL(debug_build_backtrace, return js_debugger_build_backtrace(js,NULL))
// Return the closure variables for a given function.
JSC_CCALL(debug_closure_vars, return js_debugger_closure_variables(js,argv[0]))
JSC_CCALL(debug_set_closure_var,
js_debugger_set_closure_variable(js,argv[0],argv[1],argv[2]);
return JS_NULL;
)
// Return the local variables for a specific stack frame.
JSC_CCALL(debug_local_vars, return js_debugger_local_variables(js, js2number(js,argv[0])))
@@ -22,6 +27,7 @@ static const JSCFunctionListEntry js_debug_funcs[] = {
MIST_FUNC_DEF(debug, stack_depth, 0),
MIST_FUNC_DEF(debug, build_backtrace, 0),
MIST_FUNC_DEF(debug, closure_vars, 1),
MIST_FUNC_DEF(debug, set_closure_var, 3),
MIST_FUNC_DEF(debug, local_vars, 1),
MIST_FUNC_DEF(debug, fn_info, 1),
MIST_FUNC_DEF(debug, backtrace_fns,0),

View File

@@ -880,8 +880,6 @@ function get_module_cache_key(path, package_context) {
Shop.is_loaded = function(path, package_context) {
var cache_key = get_module_cache_key(path, package_context)
log.console(cache_key)
if (!cache_key) return false
return use_cache[cache_key] != null
}
@@ -1319,21 +1317,24 @@ Shop.compile_module = function(alias) {
return true
}
var debug = use('debug')
Shop.module_reload = function(path, package) {
if (!Shop.is_loaded(path,package)) return
var info = resolve_module_info(path, package)
if (!info) return
var cache_key = info.cache_key
log.console(`reloading ${cache_key}`)
var old = use_cache[cache_key]
var newmod = get_module(path, package)
log.console(typeof old)
log.console(typeof newmod)
for (var i in newmod)
old[i] = newmod[i]
for (var i in old) {
if (!(i in newmod))
old[i] = null
}
}
Shop.build_package = function(package)

View File

@@ -37457,6 +37457,40 @@ done:
return ret;
}
void js_debugger_set_closure_variable(JSContext *ctx, JSValue fn, JSValue var_name, JSValue val)
{
JSObject *f = JS_VALUE_GET_OBJ(fn);
if (!f || !js_class_has_bytecode(f->class_id))
return;
JSFunctionBytecode *b = f->u.func.function_bytecode;
const char *name_str = JS_ToCString(ctx, var_name);
if (!name_str)
return;
for (uint32_t i = 0; i < b->closure_var_count; i++) {
JSClosureVar *cvar = b->closure_var + i;
const char *cvar_name = JS_AtomToCString(ctx, cvar->var_name);
if (!cvar_name)
continue;
if (strcmp(name_str, cvar_name) == 0) {
JS_FreeCString(ctx, cvar_name);
JSVarRef *var_ref = NULL;
if (f->u.func.var_refs)
var_ref = f->u.func.var_refs[i];
if (var_ref && var_ref->pvalue) {
JS_FreeValue(ctx, *var_ref->pvalue);
*var_ref->pvalue = JS_DupValue(ctx, val);
}
break;
}
JS_FreeCString(ctx, cvar_name);
}
JS_FreeCString(ctx, name_str);
}
JSValue js_debugger_closure_variables(JSContext *ctx, JSValue fn) {
JSValue ret = JS_NewObject(ctx);
JSObject *f = JS_VALUE_GET_OBJ(fn);

View File

@@ -988,6 +988,7 @@ uint32_t js_debugger_stack_depth(JSContext *ctx);
JSValue js_debugger_backtrace_fns(JSContext *ctx, const uint8_t *cur_pc);
JSValue js_debugger_closure_variables(JSContext *ctx, JSValue fn);
JSValue js_debugger_local_variables(JSContext *ctx, int stack_index);
void js_debugger_set_closure_variable(JSContext *js, JSValue fn, JSValue var_name, JSValue val);
JSValue js_debugger_build_backtrace(JSContext *ctx, const uint8_t *cur_pc);
JSValue js_debugger_fn_info(JSContext *ctx, JSValue fn);
JSValue js_debugger_fn_bytecode(JSContext *js, JSValue fn);