mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-07-19 23:16:48 +00:00
begin sketching out meta eval info, to allow for debugger meta evaluations on both ctrl thread & on ui thread - e.g. breakpoint hit count evaluation in conditional bps
This commit is contained in:
@@ -1127,6 +1127,31 @@ ctrl_entity_store_apply_events(CTRL_EntityStore *store, CTRL_EventList *list)
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Meta-Eval Functions
|
||||
|
||||
internal E_TypeKey
|
||||
ctrl_meta_eval_type_key(void)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
E_MemberList members = {0};
|
||||
{
|
||||
e_member_list_push_new(scratch.arena, &members, .name = str8_lit("enabled"), .off = 0, .type_key = e_type_key_basic(E_TypeKind_S64));
|
||||
e_member_list_push_new(scratch.arena, &members, .name = str8_lit("hit_count"),.off = 0+8, .type_key = e_type_key_basic(E_TypeKind_U64));
|
||||
e_member_list_push_new(scratch.arena, &members, .name = str8_lit("label"), .off = 0+8+8, .type_key = e_type_key_cons_ptr(arch_from_context(), e_type_key_basic(E_TypeKind_Char8)));
|
||||
e_member_list_push_new(scratch.arena, &members, .name = str8_lit("location"), .off = 0+8+8+8, .type_key = e_type_key_cons_ptr(arch_from_context(), e_type_key_basic(E_TypeKind_Char8)));
|
||||
e_member_list_push_new(scratch.arena, &members, .name = str8_lit("condition"),.off = 0+8+8+8+8,.type_key = e_type_key_cons_ptr(arch_from_context(), e_type_key_basic(E_TypeKind_Char8)));
|
||||
}
|
||||
E_MemberArray members_array = e_member_array_from_list(scratch.arena, &members);
|
||||
E_TypeKey meta_eval_type_key = e_type_key_cons(.arch = arch_from_context(),
|
||||
.kind = E_TypeKind_Struct,
|
||||
.name = str8_lit("Meta"),
|
||||
.members = members_array.v,
|
||||
.count = members_array.count);
|
||||
scratch_end(scratch);
|
||||
return meta_eval_type_key;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Main Layer Initialization
|
||||
|
||||
|
||||
@@ -263,6 +263,43 @@ struct CTRL_UserBreakpointList
|
||||
U64 count;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Meta Evaluation Types
|
||||
|
||||
typedef struct CTRL_MetaEvalInfo CTRL_MetaEvalInfo;
|
||||
struct CTRL_MetaEvalInfo
|
||||
{
|
||||
B64 enabled;
|
||||
U64 hit_count;
|
||||
String8 label;
|
||||
String8 location;
|
||||
String8 condition;
|
||||
};
|
||||
|
||||
typedef struct CTRL_MetaEvalInfoArray CTRL_MetaEvalInfoArray;
|
||||
struct CTRL_MetaEvalInfoArray
|
||||
{
|
||||
CTRL_MetaEvalInfo *v;
|
||||
U64 count;
|
||||
};
|
||||
|
||||
typedef struct CTRL_MetaEval CTRL_MetaEval;
|
||||
struct CTRL_MetaEval
|
||||
{
|
||||
B64 enabled;
|
||||
U64 hit_count;
|
||||
U64 label_off;
|
||||
U64 location_off;
|
||||
U64 condition_off;
|
||||
};
|
||||
|
||||
typedef struct CTRL_MetaEvalArray CTRL_MetaEvalArray;
|
||||
struct CTRL_MetaEvalArray
|
||||
{
|
||||
CTRL_MetaEval *v;
|
||||
U64 count;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Evaluation Spaces
|
||||
|
||||
@@ -270,6 +307,7 @@ typedef U64 CTRL_EvalSpaceKind;
|
||||
enum
|
||||
{
|
||||
CTRL_EvalSpaceKind_Entity = E_SpaceKind_FirstUserDefined,
|
||||
CTRL_EvalSpaceKind_Meta,
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
@@ -321,6 +359,7 @@ struct CTRL_Msg
|
||||
String8List env_string_list;
|
||||
CTRL_TrapList traps;
|
||||
CTRL_UserBreakpointList user_bps;
|
||||
CTRL_MetaEvalInfoArray meta_eval_infos;
|
||||
};
|
||||
|
||||
typedef struct CTRL_MsgNode CTRL_MsgNode;
|
||||
@@ -637,6 +676,8 @@ struct CTRL_State
|
||||
DMN_EventNode *free_dmn_event_node;
|
||||
Arena *user_entry_point_arena;
|
||||
String8List user_entry_points;
|
||||
Arena *user_meta_eval_arena;
|
||||
CTRL_MetaEvalArray *user_meta_evals;
|
||||
U64 exception_code_filters[(CTRL_ExceptionCodeKind_COUNT+63)/64];
|
||||
U64 process_counter;
|
||||
|
||||
@@ -774,6 +815,11 @@ internal CTRL_EntityRec ctrl_entity_rec_depth_first(CTRL_Entity *entity, CTRL_En
|
||||
//- rjf: applying events to entity caches
|
||||
internal void ctrl_entity_store_apply_events(CTRL_EntityStore *store, CTRL_EventList *list);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Meta-Eval Functions
|
||||
|
||||
internal E_TypeKey ctrl_meta_eval_type_key(void);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Main Layer Initialization
|
||||
|
||||
|
||||
@@ -1570,7 +1570,7 @@ d_init(void)
|
||||
}
|
||||
|
||||
internal D_EventList
|
||||
d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_PathMapArray *path_maps, U64 exception_code_filters[(CTRL_ExceptionCodeKind_COUNT+63)/64])
|
||||
d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_PathMapArray *path_maps, U64 exception_code_filters[(CTRL_ExceptionCodeKind_COUNT+63)/64], CTRL_MetaEvalInfoArray *meta_eval_infos)
|
||||
{
|
||||
ProfBeginFunction();
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
@@ -2124,6 +2124,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P
|
||||
msg->cmd_line_string_list = cmdln_strings;
|
||||
msg->env_inherit = 1;
|
||||
MemoryCopyArray(msg->exception_code_filters, exception_code_filters);
|
||||
MemoryCopyStruct(&msg->meta_eval_infos, meta_eval_infos);
|
||||
str8_list_push(scratch.arena, &msg->entry_points, custom_entry_point_name);
|
||||
msg->env_string_list = env;
|
||||
}
|
||||
@@ -2163,6 +2164,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P
|
||||
msg->exit_code = 1;
|
||||
msg->entity = process->handle;
|
||||
MemoryCopyArray(msg->exception_code_filters, exception_code_filters);
|
||||
MemoryCopyStruct(&msg->meta_eval_infos, meta_eval_infos);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2189,6 +2191,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P
|
||||
msg->kind = CTRL_MsgKind_Detach;
|
||||
msg->entity = n->v->handle;
|
||||
MemoryCopyArray(msg->exception_code_filters, exception_code_filters);
|
||||
MemoryCopyStruct(&msg->meta_eval_infos, meta_eval_infos);
|
||||
}
|
||||
}break;
|
||||
case D_CmdKind_Continue:
|
||||
@@ -2453,6 +2456,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P
|
||||
msg->kind = CTRL_MsgKind_Attach;
|
||||
msg->entity_id = pid;
|
||||
MemoryCopyArray(msg->exception_code_filters, exception_code_filters);
|
||||
MemoryCopyStruct(&msg->meta_eval_infos, meta_eval_infos);
|
||||
}
|
||||
}break;
|
||||
}
|
||||
@@ -2474,6 +2478,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P
|
||||
msg->entity = run_thread->handle;
|
||||
msg->parent = process->handle;
|
||||
MemoryCopyArray(msg->exception_code_filters, exception_code_filters);
|
||||
MemoryCopyStruct(&msg->meta_eval_infos, meta_eval_infos);
|
||||
MemoryCopyStruct(&msg->traps, &run_traps);
|
||||
D_BreakpointArray *bp_batches[] =
|
||||
{
|
||||
|
||||
@@ -520,6 +520,6 @@ internal B32 d_next_cmd(D_Cmd **cmd);
|
||||
//~ rjf: Main Layer Top-Level Calls
|
||||
|
||||
internal void d_init(void);
|
||||
internal D_EventList d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_PathMapArray *path_maps, U64 exception_code_filters[(CTRL_ExceptionCodeKind_COUNT+63)/64]);
|
||||
internal D_EventList d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_PathMapArray *path_maps, U64 exception_code_filters[(CTRL_ExceptionCodeKind_COUNT+63)/64], CTRL_MetaEvalInfoArray *meta_eval_infos);
|
||||
|
||||
#endif // DBG_ENGINE_CORE_H
|
||||
|
||||
@@ -568,8 +568,8 @@ RD_StringBindingPair rd_default_binding_table[110] =
|
||||
{str8_lit_comp("goto_name_at_cursor"), {OS_Key_F12, 0 }},
|
||||
{str8_lit_comp("toggle_watch_expr_at_cursor"), {OS_Key_W, 0 |OS_EventFlag_Alt}},
|
||||
{str8_lit_comp("toggle_watch_expr_at_mouse"), {OS_Key_D, 0 |OS_EventFlag_Ctrl }},
|
||||
{str8_lit_comp("toggle_watch_pin_at_cursor"), {OS_Key_F9, 0 |OS_EventFlag_Ctrl }},
|
||||
{str8_lit_comp("toggle_breakpoint_cursor"), {OS_Key_F9, 0 }},
|
||||
{str8_lit_comp("toggle_watch_pin"), {OS_Key_F9, 0 |OS_EventFlag_Ctrl }},
|
||||
{str8_lit_comp("toggle_breakpoint"), {OS_Key_F9, 0 }},
|
||||
{str8_lit_comp("add_target"), {OS_Key_T, 0 |OS_EventFlag_Ctrl }},
|
||||
{str8_lit_comp("attach"), {OS_Key_F6, 0 |OS_EventFlag_Shift }},
|
||||
{str8_lit_comp("filter"), {OS_Key_Slash, 0 |OS_EventFlag_Ctrl }},
|
||||
|
||||
@@ -680,10 +680,10 @@ RD_DefaultBindingTable:
|
||||
//- rjf: watch expressions
|
||||
{ "toggle_watch_expr_at_cursor" W 0 0 alt }
|
||||
{ "toggle_watch_expr_at_mouse" D ctrl 0 0 }
|
||||
{ "toggle_watch_pin_at_cursor" F9 ctrl 0 0 }
|
||||
{ "toggle_watch_pin" F9 ctrl 0 0 }
|
||||
|
||||
//- rjf: breakpoints
|
||||
{ "toggle_breakpoint_cursor" F9 0 0 0 }
|
||||
{ "toggle_breakpoint" F9 0 0 0 }
|
||||
|
||||
//- rjf: targets
|
||||
{ "add_target" T ctrl 0 0 }
|
||||
|
||||
@@ -1744,11 +1744,11 @@ rd_eval_space_read(void *u, E_Space space, void *out, Rng1U64 range)
|
||||
}
|
||||
hs_scope_close(scope);
|
||||
}break;
|
||||
case RD_EvalSpaceKind_CtrlEntity:
|
||||
case CTRL_EvalSpaceKind_Entity:
|
||||
{
|
||||
|
||||
}break;
|
||||
case RD_EvalSpaceKind_CfgEntity:
|
||||
case CTRL_EvalSpaceKind_Meta:
|
||||
{
|
||||
|
||||
}break;
|
||||
@@ -14100,11 +14100,19 @@ rd_frame(void)
|
||||
// TODO(rjf): @msgs
|
||||
}
|
||||
|
||||
////////////////////////////
|
||||
//- rjf: gather meta eval infos
|
||||
//
|
||||
CTRL_MetaEvalInfoArray meta_eval_infos = {0};
|
||||
{
|
||||
// TODO(rjf): @msgs
|
||||
}
|
||||
|
||||
////////////////////////////
|
||||
//- rjf: tick debug engine
|
||||
//
|
||||
U64 cmd_count_pre_tick = rd_state->cmds[0].count;
|
||||
D_EventList engine_events = d_tick(scratch.arena, &targets, &breakpoints, &path_maps, exception_code_filters);
|
||||
D_EventList engine_events = d_tick(scratch.arena, &targets, &breakpoints, &path_maps, exception_code_filters, &meta_eval_infos);
|
||||
|
||||
////////////////////////////
|
||||
//- rjf: no selected thread? -> try to snap to any existing thread
|
||||
|
||||
@@ -85,16 +85,6 @@ enum
|
||||
RD_EntityFlag_MarkedForDeletion = (1<<31),
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Evaluation Spaces
|
||||
|
||||
typedef U64 RD_EvalSpaceKind;
|
||||
enum
|
||||
{
|
||||
RD_EvalSpaceKind_CtrlEntity = E_SpaceKind_FirstUserDefined,
|
||||
RD_EvalSpaceKind_CfgEntity,
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Binding Types
|
||||
|
||||
|
||||
Reference in New Issue
Block a user