mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-16 17:12:23 -07:00
further work on expanding main watch path to support various string styling/visualizing mechanisms, used ad-hoc before; more work on scheduler
This commit is contained in:
+19
-29
@@ -102,6 +102,7 @@ enum
|
||||
{
|
||||
TypeFlag_IsExternal = (1<<0),
|
||||
TypeFlag_IsCode = (1<<1),
|
||||
TypeFlag_IsPath = (1<<2),
|
||||
};
|
||||
|
||||
typedef U32 MemberFlags;
|
||||
@@ -203,42 +204,31 @@ struct_members(Rng1U64)
|
||||
struct_type(Rng1U64);
|
||||
|
||||
//- rjf: String8
|
||||
Type String8__str_ptr_type = {TypeKind_Ptr, 0, sizeof(void *), type(U8), {0}, str8_lit_comp("size")};
|
||||
Member String8__members[] =
|
||||
ptr_type(String8__str_ptr_type, type(U8), str8_lit_comp("size"));
|
||||
struct_members(String8)
|
||||
{
|
||||
{str8_lit_comp("str"), {0}, &String8__str_ptr_type, OffsetOf(String8, str)},
|
||||
{str8_lit_comp("size"), {0}, type(U64), OffsetOf(String8, size)},
|
||||
};
|
||||
Type String8__type =
|
||||
{
|
||||
TypeKind_Struct,
|
||||
0,
|
||||
sizeof(String8),
|
||||
&type_nil,
|
||||
str8_lit_comp("String8"),
|
||||
{0},
|
||||
ArrayCount(String8__members),
|
||||
String8__members,
|
||||
member_lit_comp(String8, &String8__str_ptr_type, str),
|
||||
member_lit_comp(String8, type(U64), size),
|
||||
};
|
||||
struct_type(String8);
|
||||
|
||||
//- rjf: String8 (code contents)
|
||||
Type String8__code_str_ptr_type = {TypeKind_Ptr, TypeFlag_IsCode, sizeof(void *), type(U8), {0}, str8_lit_comp("size")};
|
||||
Member String8__code_members[] =
|
||||
//- rjf: String8 (Code)
|
||||
ptr_type(String8_Code__str_ptr_type, type(U8), str8_lit_comp("size"), .flags = TypeFlag_IsCode);
|
||||
struct_members(String8_Code)
|
||||
{
|
||||
{str8_lit_comp("str"), {0}, &String8__code_str_ptr_type, OffsetOf(String8, str)},
|
||||
{str8_lit_comp("size"), {0}, type(U64), OffsetOf(String8, size)},
|
||||
member_lit_comp(String8, &String8_Code__str_ptr_type, str),
|
||||
member_lit_comp(String8, type(U64), size),
|
||||
};
|
||||
Type String8__code_type =
|
||||
named_struct_type(String8_Code, String8);
|
||||
|
||||
//- rjf: String8 (Path)
|
||||
ptr_type(String8_Path__str_ptr_type, type(U8), str8_lit_comp("size"), .flags = TypeFlag_IsPath);
|
||||
struct_members(String8_Path)
|
||||
{
|
||||
TypeKind_Struct,
|
||||
0,
|
||||
sizeof(String8),
|
||||
&type_nil,
|
||||
str8_lit_comp("String8"),
|
||||
{0},
|
||||
ArrayCount(String8__code_members),
|
||||
String8__code_members,
|
||||
member_lit_comp(String8, &String8_Path__str_ptr_type, str),
|
||||
member_lit_comp(String8, type(U64), size),
|
||||
};
|
||||
named_struct_type(String8_Path, String8);
|
||||
|
||||
//- rjf: String8Node
|
||||
extern Type String8Node__type;
|
||||
|
||||
+19
-12
@@ -17,20 +17,27 @@ typedef U64 CTRL_MachineID;
|
||||
|
||||
//- rjf: styled string types
|
||||
|
||||
ptr_type(CTRL_CodeString8__str_ptr_type, type(U8), .flags = TypeFlag_IsCode, .count_delimiter_name = str8_lit_comp("size"));
|
||||
ptr_type(CTRL_PlainString8__str_ptr_type, type(U8), .flags = 0, .count_delimiter_name = str8_lit_comp("size"));
|
||||
Member CTRL_CodeString8__members[] =
|
||||
{
|
||||
member_lit_comp(String8, &CTRL_CodeString8__str_ptr_type, str, .pretty_name = str8_lit_comp("Contents")),
|
||||
member_lit_comp(String8, type(U64), size, .pretty_name = str8_lit_comp("Size")),
|
||||
};
|
||||
ptr_type(CTRL_CodeString8__str_ptr_type, type(U8), .flags = TypeFlag_IsCode, .count_delimiter_name = str8_lit_comp("size"));
|
||||
ptr_type(CTRL_PathString8__str_ptr_type, type(U8), .flags = TypeFlag_IsPath, .count_delimiter_name = str8_lit_comp("size"));
|
||||
Member CTRL_PlainString8__members[] =
|
||||
{
|
||||
member_lit_comp(String8, &CTRL_PlainString8__str_ptr_type, str, .pretty_name = str8_lit_comp("Contents")),
|
||||
member_lit_comp(String8, type(U64), size, .pretty_name = str8_lit_comp("Size")),
|
||||
};
|
||||
named_struct_type(CTRL_CodeString8, String8, .name = str8_lit_comp("string"));
|
||||
Member CTRL_CodeString8__members[] =
|
||||
{
|
||||
member_lit_comp(String8, &CTRL_CodeString8__str_ptr_type, str, .pretty_name = str8_lit_comp("Contents")),
|
||||
member_lit_comp(String8, type(U64), size, .pretty_name = str8_lit_comp("Size")),
|
||||
};
|
||||
Member CTRL_PathString8__members[] =
|
||||
{
|
||||
member_lit_comp(String8, &CTRL_PathString8__str_ptr_type, str, .pretty_name = str8_lit_comp("Contents")),
|
||||
member_lit_comp(String8, type(U64), size, .pretty_name = str8_lit_comp("Size")),
|
||||
};
|
||||
named_struct_type(CTRL_PlainString8, String8, .name = str8_lit_comp("string"));
|
||||
named_struct_type(CTRL_CodeString8, String8, .name = str8_lit_comp("string"));
|
||||
named_struct_type(CTRL_PathString8, String8, .name = str8_lit_comp("string"));
|
||||
|
||||
//- rjf: meta evaluation callstack types
|
||||
|
||||
@@ -74,10 +81,10 @@ X(U64, id, "ID")\
|
||||
X(Rng1U64, vaddr_range, "Address Range")\
|
||||
X(U32, color, "Color")\
|
||||
Y(String8, type(CTRL_CodeString8), label, "Label")\
|
||||
Y(String8, type(CTRL_PlainString8), exe, "Executable Path")\
|
||||
Y(String8, type(CTRL_PlainString8), dbg, "Debug Info Path")\
|
||||
Y(String8, type(CTRL_PathString8), exe, "Executable Path")\
|
||||
Y(String8, type(CTRL_PathString8), dbg, "Debug Info Path")\
|
||||
Y(String8, type(CTRL_PlainString8), args, "Arguments")\
|
||||
Y(String8, type(CTRL_PlainString8), working_directory, "Working Directory")\
|
||||
Y(String8, type(CTRL_PathString8), working_directory, "Working Directory")\
|
||||
Y(String8, type(CTRL_CodeString8), entry_point, "Custom Entry Point")\
|
||||
Y(String8, type(CTRL_PlainString8), location, "Location")\
|
||||
Y(String8, type(CTRL_CodeString8), condition, "Condition")\
|
||||
@@ -112,9 +119,9 @@ struct_members(CTRL_BreakpointMetaEval)
|
||||
struct_members(CTRL_TargetMetaEval)
|
||||
{
|
||||
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), label, .pretty_name = str8_lit_comp("Label")),
|
||||
member_lit_comp(CTRL_MetaEval, type(CTRL_PlainString8),exe, .pretty_name = str8_lit_comp("Executable")),
|
||||
member_lit_comp(CTRL_MetaEval, type(CTRL_PathString8), exe, .pretty_name = str8_lit_comp("Executable")),
|
||||
member_lit_comp(CTRL_MetaEval, type(CTRL_PlainString8),args, .pretty_name = str8_lit_comp("Arguments")),
|
||||
member_lit_comp(CTRL_MetaEval, type(CTRL_PlainString8),working_directory, .pretty_name = str8_lit_comp("Working Directory")),
|
||||
member_lit_comp(CTRL_MetaEval, type(CTRL_PathString8), working_directory, .pretty_name = str8_lit_comp("Working Directory")),
|
||||
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), entry_point, .pretty_name = str8_lit_comp("Custom Entry Point")),
|
||||
};
|
||||
|
||||
|
||||
@@ -463,6 +463,10 @@ e_type_key_cons_base(Type *type)
|
||||
{
|
||||
flags |= E_TypeFlag_IsCode;
|
||||
}
|
||||
if(type->flags & TypeFlag_IsPath)
|
||||
{
|
||||
flags |= E_TypeFlag_IsPath;
|
||||
}
|
||||
result = e_type_key_cons_ptr(arch_from_context(), direct_type, flags);
|
||||
}break;
|
||||
case TypeKind_Array:
|
||||
|
||||
@@ -70,6 +70,7 @@ enum
|
||||
E_TypeFlag_Volatile = (1<<1),
|
||||
E_TypeFlag_External = (1<<2),
|
||||
E_TypeFlag_IsCode = (1<<3),
|
||||
E_TypeFlag_IsPath = (1<<4),
|
||||
};
|
||||
|
||||
typedef struct E_Member E_Member;
|
||||
|
||||
@@ -1853,6 +1853,10 @@ rd_name_from_ctrl_entity(Arena *arena, CTRL_Entity *entity)
|
||||
{
|
||||
string = str8_lit("unnamed");
|
||||
}
|
||||
if(entity->kind == CTRL_EntityKind_Module)
|
||||
{
|
||||
string = str8_skip_last_slash(string);
|
||||
}
|
||||
return string;
|
||||
}
|
||||
|
||||
|
||||
@@ -1217,6 +1217,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
{RD_EntityKind_Target, CTRL_EntityKind_Null, RD_CmdKind_LaunchAndInit },
|
||||
{RD_EntityKind_Target, CTRL_EntityKind_Null, RD_CmdKind_SelectEntity },
|
||||
{RD_EntityKind_Nil, CTRL_EntityKind_Thread, RD_CmdKind_FreezeThread },
|
||||
{RD_EntityKind_Nil, CTRL_EntityKind_Thread, RD_CmdKind_SelectThread },
|
||||
};
|
||||
RD_WatchViewRowCtrl *row_ctrls = row_ctrls_;
|
||||
U64 row_ctrls_count = ArrayCount(row_ctrls_);
|
||||
@@ -2381,7 +2382,8 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
//- rjf: peek clicks in canvas region, mark clicked
|
||||
for(UI_Event *evt = 0; ui_next_event(&evt);)
|
||||
{
|
||||
if(evt->kind == UI_EventKind_Press && evt->key == OS_Key_LeftMouseButton && contains_2f32(canvas_rect, evt->pos))
|
||||
if(evt->kind == UI_EventKind_Press && evt->key == OS_Key_LeftMouseButton && contains_2f32(canvas_rect, evt->pos) &&
|
||||
contains_2f32(rect, evt->pos))
|
||||
{
|
||||
pressed = 1;
|
||||
break;
|
||||
@@ -2468,7 +2470,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
{
|
||||
palette = rd_palette_from_code(RD_PaletteCode_NeutralPopButton);
|
||||
}
|
||||
if(ctrl_entity->kind == RD_EntityKind_Thread && ctrl_handle_match(ctrl_entity->handle, rd_regs()->thread))
|
||||
if(ctrl_entity->kind == CTRL_EntityKind_Thread && ctrl_handle_match(ctrl_entity->handle, rd_regs()->thread))
|
||||
{
|
||||
palette = rd_palette_from_code(RD_PaletteCode_NeutralPopButton);
|
||||
}
|
||||
@@ -2528,6 +2530,10 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
sig.event_flags & OS_Modifier_Ctrl && !entity->disabled ? RD_CmdKind_DisableEntity :
|
||||
RD_CmdKind_SelectEntity, .entity = rd_handle_from_entity(entity));
|
||||
}
|
||||
if(ctrl_entity->kind == CTRL_EntityKind_Thread)
|
||||
{
|
||||
rd_cmd(RD_CmdKind_SelectThread, .thread = ctrl_entity->handle);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2551,6 +2557,10 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
{
|
||||
icon_kind = entity->disabled ? RD_IconKind_CheckHollow : RD_IconKind_CheckFilled;
|
||||
}
|
||||
if(ctrl->kind == RD_CmdKind_SelectThread)
|
||||
{
|
||||
icon_kind = (ctrl_handle_match(ctrl_entity->handle, rd_base_regs()->thread) ? RD_IconKind_CheckFilled : RD_IconKind_CheckHollow);
|
||||
}
|
||||
if(ctrl->kind == RD_CmdKind_FreezeThread)
|
||||
{
|
||||
icon_kind = is_frozen ? RD_IconKind_Locked : RD_IconKind_Unlocked;
|
||||
@@ -2567,6 +2577,10 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
sig.event_flags & OS_Modifier_Ctrl && !entity->disabled ? RD_CmdKind_DisableEntity :
|
||||
RD_CmdKind_SelectEntity, .entity = rd_handle_from_entity(entity));
|
||||
}
|
||||
else if(ctrl->kind == RD_CmdKind_SelectThread)
|
||||
{
|
||||
rd_cmd(RD_CmdKind_SelectThread, .thread = ctrl_entity->handle);
|
||||
}
|
||||
else if(ctrl->kind == RD_CmdKind_FreezeThread)
|
||||
{
|
||||
rd_cmd(is_frozen ? RD_CmdKind_ThawThread : RD_CmdKind_FreezeThread,
|
||||
@@ -2811,6 +2825,10 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
{
|
||||
cell_is_code = 1;
|
||||
}
|
||||
if(col->kind == RD_WatchViewColumnKind_Value && row_type->flags & E_TypeFlag_IsPath)
|
||||
{
|
||||
cell_is_code = 0;
|
||||
}
|
||||
|
||||
//- rjf: build cell
|
||||
UI_Signal sig = {0};
|
||||
|
||||
Reference in New Issue
Block a user