mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-13 07:32:23 -07:00
generate meta tables for meta evaluations; use to table-drive ctrl msg serialization, deserialization, meta eval type info generation, and info <-> serialized eval path
This commit is contained in:
+1
-1
@@ -48,7 +48,7 @@ commands =
|
||||
//- rjf: fkey command slots (change locally but do not commit)
|
||||
.f1 = { .win = "build raddbg telemetry", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
||||
.f2 = { .win = "build rdi_from_pdb", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
||||
.f3 = { .win = "pushd build && raddbg.exe --user:local_dev.raddbg_user --project:local_dev.raddbg_project && popd", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
||||
.f3 = { .win = "pushd build && raddbg.exe --user:local_dev.raddbg_user --project:local_dev.raddbg_project --auto_step && popd",.linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
||||
|
||||
//- rjf: local target builds
|
||||
.build_raddbg = { .win = "build raddbg", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
||||
|
||||
@@ -1,6 +1,64 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Meta Evaluation Type Information
|
||||
|
||||
@table(name info_type eval_type dynamic)
|
||||
CTRL_MetaEvalMemberTable:
|
||||
{
|
||||
{enabled S32 S32 }
|
||||
{frozen S32 S32 }
|
||||
{hit_count U64 U64 }
|
||||
{id U64 U64 }
|
||||
{color U32 U32 }
|
||||
{label String8 U64 x }
|
||||
{location String8 U64 x }
|
||||
{condition String8 U64 x }
|
||||
}
|
||||
|
||||
@enum CTRL_MetaEvalDynamicKind:
|
||||
{
|
||||
Null,
|
||||
String8,
|
||||
COUNT
|
||||
}
|
||||
|
||||
@struct CTRL_MetaEvalInfo:
|
||||
{
|
||||
@expand(CTRL_MetaEvalMemberTable a) `$(a.info_type) $(a.name)`
|
||||
}
|
||||
|
||||
@struct CTRL_MetaEval:
|
||||
{
|
||||
@expand(CTRL_MetaEvalMemberTable a) `$(a.eval_type) $(a.name)`
|
||||
}
|
||||
|
||||
@data(String8) ctrl_meta_eval_member_name_table:
|
||||
{
|
||||
@expand(CTRL_MetaEvalMemberTable a) `str8_lit_comp("$(a.name)")`
|
||||
}
|
||||
|
||||
@data(Rng1U64) ctrl_meta_eval_info_member_range_table:
|
||||
{
|
||||
@expand(CTRL_MetaEvalMemberTable a) `{OffsetOf(CTRL_MetaEvalInfo, $(a.name)), OffsetOf(CTRL_MetaEvalInfo, $(a.name)) + sizeof($(a.info_type))}`
|
||||
}
|
||||
|
||||
@data(Rng1U64) ctrl_meta_eval_member_range_table:
|
||||
{
|
||||
@expand(CTRL_MetaEvalMemberTable a) `{OffsetOf(CTRL_MetaEval, $(a.name)), OffsetOf(CTRL_MetaEval, $(a.name)) + sizeof($(a.eval_type))}`
|
||||
}
|
||||
|
||||
@data(E_TypeKind) ctrl_meta_eval_member_type_kind_table:
|
||||
{
|
||||
@expand(CTRL_MetaEvalMemberTable a) `E_TypeKind_$(a.eval_type)`
|
||||
}
|
||||
|
||||
@data(CTRL_MetaEvalDynamicKind) ctrl_meta_eval_member_dynamic_kind_table:
|
||||
{
|
||||
@expand(CTRL_MetaEvalMemberTable a) `$(a.dynamic == 'x' -> 'CTRL_MetaEvalDynamicKind_'..a.info_type)$(a.dynamic == '' -> 'CTRL_MetaEvalDynamicKind_Null')`
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Entity Kinds
|
||||
|
||||
|
||||
+93
-35
@@ -193,14 +193,26 @@ ctrl_meta_eval_from_info(Arena *arena, CTRL_MetaEvalInfo *info)
|
||||
{
|
||||
CTRL_MetaEval *eval = push_array(arena, CTRL_MetaEval, 1);
|
||||
{
|
||||
String8 label_string = push_str8_copy(arena, info->label);
|
||||
String8 loc_string = push_str8_copy(arena, info->location);
|
||||
String8 cnd_string = push_str8_copy(arena, info->condition);
|
||||
eval->enabled = info->enabled;
|
||||
eval->hit_count = info->hit_count;
|
||||
eval->label_off = (U64)((U8 *)label_string.str - (U8 *)eval);
|
||||
eval->location_off = (U64)((U8 *)loc_string.str - (U8 *)eval);
|
||||
eval->condition_off= (U64)((U8 *)cnd_string.str - (U8 *)eval);
|
||||
for(U64 idx = 0; idx < ArrayCount(ctrl_meta_eval_info_member_range_table); idx += 1)
|
||||
{
|
||||
switch(ctrl_meta_eval_member_dynamic_kind_table[idx])
|
||||
{
|
||||
default:
|
||||
case CTRL_MetaEvalDynamicKind_Null:
|
||||
{
|
||||
MemoryCopy((U8 *)eval + ctrl_meta_eval_member_range_table[idx].min,
|
||||
(U8 *)info + ctrl_meta_eval_info_member_range_table[idx].min,
|
||||
dim_1u64(ctrl_meta_eval_member_range_table[idx]));
|
||||
}break;
|
||||
case CTRL_MetaEvalDynamicKind_String8:
|
||||
{
|
||||
String8 string = *(String8 *)((U8 *)info + ctrl_meta_eval_info_member_range_table[idx].min);
|
||||
String8 string_copy = push_str8_copy(arena, string);
|
||||
U64 off = (string_copy.str - (U8 *)eval);
|
||||
MemoryCopy((U8 *)eval + ctrl_meta_eval_member_range_table[idx].min, &off, sizeof(U64));
|
||||
}break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return eval;
|
||||
}
|
||||
@@ -214,9 +226,19 @@ ctrl_meta_eval_info_array_copy(Arena *arena, CTRL_MetaEvalInfoArray *src)
|
||||
MemoryCopy(dst.v, src->v, sizeof(dst.v[0])*dst.count);
|
||||
for(U64 idx = 0; idx < dst.count; idx += 1)
|
||||
{
|
||||
dst.v[idx].label = push_str8_copy(arena, dst.v[idx].label);
|
||||
dst.v[idx].location = push_str8_copy(arena, dst.v[idx].location);
|
||||
dst.v[idx].condition= push_str8_copy(arena, dst.v[idx].condition);
|
||||
for(U64 member_idx = 0; member_idx < ArrayCount(ctrl_meta_eval_info_member_range_table); member_idx += 1)
|
||||
{
|
||||
switch(ctrl_meta_eval_member_dynamic_kind_table[member_idx])
|
||||
{
|
||||
default:{}break;
|
||||
case CTRL_MetaEvalDynamicKind_String8:
|
||||
{
|
||||
String8 string = *(String8 *)((U8 *)(&dst.v[idx]) + ctrl_meta_eval_info_member_range_table[member_idx].min);
|
||||
String8 string_copy = push_str8_copy(arena, string);
|
||||
MemoryCopy((U8 *)(&dst.v[idx]) + ctrl_meta_eval_info_member_range_table[member_idx].min, &string_copy, sizeof(String8));
|
||||
}break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return dst;
|
||||
}
|
||||
@@ -364,14 +386,23 @@ ctrl_serialized_string_from_msg_list(Arena *arena, CTRL_MsgList *msgs)
|
||||
for(U64 idx = 0; idx < msg->meta_eval_infos.count; idx += 1)
|
||||
{
|
||||
CTRL_MetaEvalInfo *mei = &msg->meta_eval_infos.v[idx];
|
||||
str8_serial_push_struct(scratch.arena, &msgs_srlzed, &mei->enabled);
|
||||
str8_serial_push_struct(scratch.arena, &msgs_srlzed, &mei->hit_count);
|
||||
str8_serial_push_struct(scratch.arena, &msgs_srlzed, &mei->label.size);
|
||||
str8_serial_push_string(scratch.arena, &msgs_srlzed, mei->label);
|
||||
str8_serial_push_struct(scratch.arena, &msgs_srlzed, &mei->location.size);
|
||||
str8_serial_push_string(scratch.arena, &msgs_srlzed, mei->location);
|
||||
str8_serial_push_struct(scratch.arena, &msgs_srlzed, &mei->condition.size);
|
||||
str8_serial_push_string(scratch.arena, &msgs_srlzed, mei->condition);
|
||||
for(U64 member_idx = 0; member_idx < ArrayCount(ctrl_meta_eval_info_member_range_table); member_idx += 1)
|
||||
{
|
||||
switch(ctrl_meta_eval_member_dynamic_kind_table[member_idx])
|
||||
{
|
||||
default:
|
||||
case CTRL_MetaEvalDynamicKind_Null:
|
||||
{
|
||||
str8_serial_push_string(scratch.arena, &msgs_srlzed, str8((U8 *)mei + ctrl_meta_eval_info_member_range_table[member_idx].min, dim_1u64(ctrl_meta_eval_info_member_range_table[member_idx])));
|
||||
}break;
|
||||
case CTRL_MetaEvalDynamicKind_String8:
|
||||
{
|
||||
String8 string = *(String8 *)((U8 *)mei + ctrl_meta_eval_info_member_range_table[member_idx].min);
|
||||
str8_serial_push_struct(scratch.arena, &msgs_srlzed, &string.size);
|
||||
str8_serial_push_string(scratch.arena, &msgs_srlzed, string);
|
||||
}break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -491,17 +522,26 @@ ctrl_msg_list_from_serialized_string(Arena *arena, String8 string)
|
||||
for(U64 idx = 0; idx < msg->meta_eval_infos.count; idx += 1)
|
||||
{
|
||||
CTRL_MetaEvalInfo *mei = &msg->meta_eval_infos.v[idx];
|
||||
read_off += str8_deserial_read_struct(string, read_off, &mei->enabled);
|
||||
read_off += str8_deserial_read_struct(string, read_off, &mei->hit_count);
|
||||
read_off += str8_deserial_read_struct(string, read_off, &mei->label.size);
|
||||
mei->label.str = push_array_no_zero(arena, U8, mei->label.size);
|
||||
read_off += str8_deserial_read(string, read_off, mei->label.str, mei->label.size, 1);
|
||||
read_off += str8_deserial_read_struct(string, read_off, &mei->location.size);
|
||||
mei->location.str = push_array_no_zero(arena, U8, mei->location.size);
|
||||
read_off += str8_deserial_read(string, read_off, mei->location.str, mei->location.size, 1);
|
||||
read_off += str8_deserial_read_struct(string, read_off, &mei->condition.size);
|
||||
mei->condition.str = push_array_no_zero(arena, U8, mei->condition.size);
|
||||
read_off += str8_deserial_read(string, read_off, mei->condition.str, mei->condition.size, 1);
|
||||
for(U64 member_idx = 0; member_idx < ArrayCount(ctrl_meta_eval_info_member_range_table); member_idx += 1)
|
||||
{
|
||||
switch(ctrl_meta_eval_member_dynamic_kind_table[member_idx])
|
||||
{
|
||||
default:
|
||||
case CTRL_MetaEvalDynamicKind_Null:
|
||||
{
|
||||
U64 size = dim_1u64(ctrl_meta_eval_info_member_range_table[member_idx]);
|
||||
read_off += str8_deserial_read(string, read_off, (U8 *)mei + ctrl_meta_eval_info_member_range_table[member_idx].min, size, size);
|
||||
}break;
|
||||
case CTRL_MetaEvalDynamicKind_String8:
|
||||
{
|
||||
String8 str = {0};
|
||||
read_off += str8_deserial_read_struct(string, read_off, &str.size);
|
||||
str.str = push_array_no_zero(arena, U8, str.size);
|
||||
read_off += str8_deserial_read(string, read_off, str.str, str.size, 1);
|
||||
MemoryCopy((U8 *)mei + ctrl_meta_eval_info_member_range_table[member_idx].min, &str, sizeof(str));
|
||||
}break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1145,6 +1185,11 @@ ctrl_entity_store_apply_events(CTRL_EntityStore *store, CTRL_EventList *list)
|
||||
{
|
||||
CTRL_Entity *process = ctrl_entity_from_handle(store, event->parent);
|
||||
CTRL_Entity *thread = ctrl_entity_alloc(store, process, CTRL_EntityKind_Thread, event->arch, event->entity, (U64)event->entity_id);
|
||||
CTRL_Entity *first_thread = ctrl_entity_child_from_kind(process, CTRL_EntityKind_Thread);
|
||||
if(first_thread == thread)
|
||||
{
|
||||
ctrl_entity_equip_string(store, thread, str8_lit("main_thread"));
|
||||
}
|
||||
thread->stack_base = event->stack_base;
|
||||
ctrl_query_cached_rip_from_thread(store, event->entity);
|
||||
}break;
|
||||
@@ -1183,6 +1228,11 @@ ctrl_entity_store_apply_events(CTRL_EntityStore *store, CTRL_EventList *list)
|
||||
ctrl_entity_equip_string(store, module, event->string);
|
||||
module->timestamp = event->timestamp;
|
||||
module->vaddr_range = event->vaddr_rng;
|
||||
CTRL_Entity *first_module = ctrl_entity_child_from_kind(process, CTRL_EntityKind_Module);
|
||||
if(first_module == module)
|
||||
{
|
||||
ctrl_entity_equip_string(store, process, str8_skip_last_slash(event->string));
|
||||
}
|
||||
scratch_end(scratch);
|
||||
}break;
|
||||
case CTRL_EventKind_EndModule:
|
||||
@@ -1214,11 +1264,19 @@ 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)));
|
||||
for(U64 idx = 0; idx < ArrayCount(ctrl_meta_eval_member_range_table); idx += 1)
|
||||
{
|
||||
E_TypeKey member_type_key = e_type_key_basic(ctrl_meta_eval_member_type_kind_table[idx]);
|
||||
switch(ctrl_meta_eval_member_dynamic_kind_table[idx])
|
||||
{
|
||||
default:{}break;
|
||||
case CTRL_MetaEvalDynamicKind_String8:
|
||||
{
|
||||
member_type_key = e_type_key_cons_ptr(arch_from_context(), e_type_key_basic(E_TypeKind_Char8));
|
||||
}break;
|
||||
}
|
||||
e_member_list_push_new(scratch.arena, &members, .name = ctrl_meta_eval_member_name_table[idx], .off = ctrl_meta_eval_member_range_table[idx].min, .type_key = member_type_key);
|
||||
}
|
||||
}
|
||||
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(),
|
||||
|
||||
@@ -256,16 +256,6 @@ struct CTRL_UserBreakpointList
|
||||
////////////////////////////////
|
||||
//~ 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
|
||||
{
|
||||
@@ -273,16 +263,6 @@ struct CTRL_MetaEvalInfoArray
|
||||
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
|
||||
{
|
||||
|
||||
@@ -4,6 +4,66 @@
|
||||
//- GENERATED CODE
|
||||
|
||||
C_LINKAGE_BEGIN
|
||||
String8 ctrl_meta_eval_member_name_table[8] =
|
||||
{
|
||||
str8_lit_comp("enabled"),
|
||||
str8_lit_comp("frozen"),
|
||||
str8_lit_comp("hit_count"),
|
||||
str8_lit_comp("id"),
|
||||
str8_lit_comp("color"),
|
||||
str8_lit_comp("label"),
|
||||
str8_lit_comp("location"),
|
||||
str8_lit_comp("condition"),
|
||||
};
|
||||
|
||||
Rng1U64 ctrl_meta_eval_info_member_range_table[8] =
|
||||
{
|
||||
{OffsetOf(CTRL_MetaEvalInfo, enabled), OffsetOf(CTRL_MetaEvalInfo, enabled) + sizeof(S32)},
|
||||
{OffsetOf(CTRL_MetaEvalInfo, frozen), OffsetOf(CTRL_MetaEvalInfo, frozen) + sizeof(S32)},
|
||||
{OffsetOf(CTRL_MetaEvalInfo, hit_count), OffsetOf(CTRL_MetaEvalInfo, hit_count) + sizeof(U64)},
|
||||
{OffsetOf(CTRL_MetaEvalInfo, id), OffsetOf(CTRL_MetaEvalInfo, id) + sizeof(U64)},
|
||||
{OffsetOf(CTRL_MetaEvalInfo, color), OffsetOf(CTRL_MetaEvalInfo, color) + sizeof(U32)},
|
||||
{OffsetOf(CTRL_MetaEvalInfo, label), OffsetOf(CTRL_MetaEvalInfo, label) + sizeof(String8)},
|
||||
{OffsetOf(CTRL_MetaEvalInfo, location), OffsetOf(CTRL_MetaEvalInfo, location) + sizeof(String8)},
|
||||
{OffsetOf(CTRL_MetaEvalInfo, condition), OffsetOf(CTRL_MetaEvalInfo, condition) + sizeof(String8)},
|
||||
};
|
||||
|
||||
Rng1U64 ctrl_meta_eval_member_range_table[8] =
|
||||
{
|
||||
{OffsetOf(CTRL_MetaEval, enabled), OffsetOf(CTRL_MetaEval, enabled) + sizeof(S32)},
|
||||
{OffsetOf(CTRL_MetaEval, frozen), OffsetOf(CTRL_MetaEval, frozen) + sizeof(S32)},
|
||||
{OffsetOf(CTRL_MetaEval, hit_count), OffsetOf(CTRL_MetaEval, hit_count) + sizeof(U64)},
|
||||
{OffsetOf(CTRL_MetaEval, id), OffsetOf(CTRL_MetaEval, id) + sizeof(U64)},
|
||||
{OffsetOf(CTRL_MetaEval, color), OffsetOf(CTRL_MetaEval, color) + sizeof(U32)},
|
||||
{OffsetOf(CTRL_MetaEval, label), OffsetOf(CTRL_MetaEval, label) + sizeof(U64)},
|
||||
{OffsetOf(CTRL_MetaEval, location), OffsetOf(CTRL_MetaEval, location) + sizeof(U64)},
|
||||
{OffsetOf(CTRL_MetaEval, condition), OffsetOf(CTRL_MetaEval, condition) + sizeof(U64)},
|
||||
};
|
||||
|
||||
E_TypeKind ctrl_meta_eval_member_type_kind_table[8] =
|
||||
{
|
||||
E_TypeKind_S32,
|
||||
E_TypeKind_S32,
|
||||
E_TypeKind_U64,
|
||||
E_TypeKind_U64,
|
||||
E_TypeKind_U32,
|
||||
E_TypeKind_U64,
|
||||
E_TypeKind_U64,
|
||||
E_TypeKind_U64,
|
||||
};
|
||||
|
||||
CTRL_MetaEvalDynamicKind ctrl_meta_eval_member_dynamic_kind_table[8] =
|
||||
{
|
||||
CTRL_MetaEvalDynamicKind_Null,
|
||||
CTRL_MetaEvalDynamicKind_Null,
|
||||
CTRL_MetaEvalDynamicKind_Null,
|
||||
CTRL_MetaEvalDynamicKind_Null,
|
||||
CTRL_MetaEvalDynamicKind_Null,
|
||||
CTRL_MetaEvalDynamicKind_String8,
|
||||
CTRL_MetaEvalDynamicKind_String8,
|
||||
CTRL_MetaEvalDynamicKind_String8,
|
||||
};
|
||||
|
||||
String8 ctrl_entity_kind_display_string_table[8] =
|
||||
{
|
||||
{0},
|
||||
|
||||
@@ -6,6 +6,13 @@
|
||||
#ifndef CTRL_META_H
|
||||
#define CTRL_META_H
|
||||
|
||||
typedef enum CTRL_MetaEvalDynamicKind
|
||||
{
|
||||
CTRL_MetaEvalDynamicKind_Null,
|
||||
CTRL_MetaEvalDynamicKind_String8,
|
||||
CTRL_MetaEvalDynamicKind_COUNT,
|
||||
} CTRL_MetaEvalDynamicKind;
|
||||
|
||||
typedef enum CTRL_EntityKind
|
||||
{
|
||||
CTRL_EntityKind_Null,
|
||||
@@ -62,7 +69,38 @@ CTRL_ExceptionCodeKind_Win32DirectXDebugLayer,
|
||||
CTRL_ExceptionCodeKind_COUNT,
|
||||
} CTRL_ExceptionCodeKind;
|
||||
|
||||
typedef struct CTRL_MetaEvalInfo CTRL_MetaEvalInfo;
|
||||
struct CTRL_MetaEvalInfo
|
||||
{
|
||||
S32 enabled;
|
||||
S32 frozen;
|
||||
U64 hit_count;
|
||||
U64 id;
|
||||
U32 color;
|
||||
String8 label;
|
||||
String8 location;
|
||||
String8 condition;
|
||||
};
|
||||
|
||||
typedef struct CTRL_MetaEval CTRL_MetaEval;
|
||||
struct CTRL_MetaEval
|
||||
{
|
||||
S32 enabled;
|
||||
S32 frozen;
|
||||
U64 hit_count;
|
||||
U64 id;
|
||||
U32 color;
|
||||
U64 label;
|
||||
U64 location;
|
||||
U64 condition;
|
||||
};
|
||||
|
||||
C_LINKAGE_BEGIN
|
||||
extern String8 ctrl_meta_eval_member_name_table[8];
|
||||
extern Rng1U64 ctrl_meta_eval_info_member_range_table[8];
|
||||
extern Rng1U64 ctrl_meta_eval_member_range_table[8];
|
||||
extern E_TypeKind ctrl_meta_eval_member_type_kind_table[8];
|
||||
extern CTRL_MetaEvalDynamicKind ctrl_meta_eval_member_dynamic_kind_table[8];
|
||||
extern String8 ctrl_entity_kind_display_string_table[8];
|
||||
extern U32 ctrl_exception_code_kind_code_table[38];
|
||||
extern String8 ctrl_exception_code_kind_display_string_table[38];
|
||||
|
||||
@@ -47,6 +47,7 @@ D_CmdTable: // | | | |
|
||||
|
||||
//- rjf: entity decoration
|
||||
{SetEntityColor 0 0 Null null Nil 0 0 0 0 0 0 Null "set_thread_color" "Set Thread Color" "Sets the passed entity's color." "" }
|
||||
{SetEntityName 0 0 Null null Nil 0 0 0 0 0 0 Null "set_thread_color" "Set Thread Color" "Sets the passed entity's name." "" }
|
||||
|
||||
//- rjf: attaching
|
||||
{Attach 1 1 PID null Nil 0 0 0 0 0 1 Null "attach" "Attach" "Attaches to a process that is already running on the local machine." "" }
|
||||
|
||||
@@ -2453,6 +2453,11 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P
|
||||
CTRL_Entity *entity = ctrl_entity_from_handle(d_state->ctrl_entity_store, params->entity);
|
||||
entity->rgba = params->rgba;
|
||||
}break;
|
||||
case D_CmdKind_SetEntityName:
|
||||
{
|
||||
CTRL_Entity *entity = ctrl_entity_from_handle(d_state->ctrl_entity_store, params->entity);
|
||||
ctrl_entity_equip_string(d_state->ctrl_entity_store, entity, params->string);
|
||||
}break;
|
||||
|
||||
//- rjf: attaching
|
||||
case D_CmdKind_Attach:
|
||||
|
||||
@@ -233,6 +233,7 @@ struct D_CmdParams
|
||||
CTRL_Handle thread;
|
||||
CTRL_Handle entity;
|
||||
CTRL_HandleList processes;
|
||||
String8 string;
|
||||
String8 file_path;
|
||||
TxtPt cursor;
|
||||
U64 vaddr;
|
||||
|
||||
@@ -40,6 +40,7 @@ D_CmdKind_ThawLocalMachine,
|
||||
D_CmdKind_FreezeEntity,
|
||||
D_CmdKind_ThawEntity,
|
||||
D_CmdKind_SetEntityColor,
|
||||
D_CmdKind_SetEntityName,
|
||||
D_CmdKind_Attach,
|
||||
D_CmdKind_COUNT,
|
||||
} D_CmdKind;
|
||||
|
||||
@@ -242,7 +242,7 @@ Rng1U64 rd_reg_slot_range_table[32] =
|
||||
{OffsetOf(RD_Regs, os_event), OffsetOf(RD_Regs, os_event) + sizeof(OS_Event *)},
|
||||
};
|
||||
|
||||
RD_CmdKindInfo rd_cmd_kind_info_table[218] =
|
||||
RD_CmdKindInfo rd_cmd_kind_info_table[219] =
|
||||
{
|
||||
{0},
|
||||
{ str8_lit_comp("launch_and_run"), str8_lit_comp("Starts debugging a new instance of a target, then runs."), str8_lit_comp("launch,start,run,target"), str8_lit_comp("Launch and Run"), RD_IconKind_Play, (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*1), RD_RegSlot_EntityList, str8_lit_comp(""), RD_EntityKind_Target}},
|
||||
@@ -276,6 +276,7 @@ RD_CmdKindInfo rd_cmd_kind_info_table[218] =
|
||||
{ str8_lit_comp("freeze_entity"), str8_lit_comp("Freezes an entity."), str8_lit_comp(""), str8_lit_comp("Freeze Entity"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}},
|
||||
{ str8_lit_comp("thaw_entity"), str8_lit_comp("Thaws an entity."), str8_lit_comp(""), str8_lit_comp("Thaw Entity"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}},
|
||||
{ str8_lit_comp("set_thread_color"), str8_lit_comp("Sets the passed entity's color."), str8_lit_comp(""), str8_lit_comp("Set Thread Color"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}},
|
||||
{ str8_lit_comp("set_thread_color"), str8_lit_comp("Sets the passed entity's name."), str8_lit_comp(""), str8_lit_comp("Set Thread Color"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}},
|
||||
{ str8_lit_comp("attach"), str8_lit_comp("Attaches to a process that is already running on the local machine."), str8_lit_comp(""), str8_lit_comp("Attach"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*1), RD_RegSlot_PID, str8_lit_comp(""), RD_EntityKind_Nil}},
|
||||
{ str8_lit_comp("exit"), str8_lit_comp("Exits the debugger."), str8_lit_comp("quit,close,abort"), str8_lit_comp("Exit"), RD_IconKind_X, (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}},
|
||||
{ str8_lit_comp("run_command"), str8_lit_comp("Runs a command from the command palette."), str8_lit_comp("help,cmd"), str8_lit_comp("Run Command"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*1), RD_RegSlot_String, str8_lit_comp("commands"), RD_EntityKind_Nil}},
|
||||
|
||||
@@ -121,6 +121,7 @@ RD_CmdKind_ThawLocalMachine,
|
||||
RD_CmdKind_FreezeEntity,
|
||||
RD_CmdKind_ThawEntity,
|
||||
RD_CmdKind_SetEntityColor,
|
||||
RD_CmdKind_SetEntityName,
|
||||
RD_CmdKind_Attach,
|
||||
RD_CmdKind_Exit,
|
||||
RD_CmdKind_RunCommand,
|
||||
|
||||
@@ -10348,6 +10348,7 @@ rd_frame(void)
|
||||
CTRL_MetaEvalInfo *mei = &rd_state->meta_eval_infos.v[meta_eval_info_idx];
|
||||
mei->enabled = !entity->disabled;
|
||||
mei->hit_count = entity->u64;
|
||||
mei->color = u32_from_rgba(rd_rgba_from_entity(entity));
|
||||
mei->label = label_string;
|
||||
mei->location = loc_string;
|
||||
mei->condition = cnd_string;
|
||||
@@ -10366,6 +10367,10 @@ rd_frame(void)
|
||||
for(CTRL_EntityNode *n = list.first; n != 0; n = n->next)
|
||||
{
|
||||
CTRL_Entity *entity = n->v;
|
||||
CTRL_MetaEvalInfo *mei = &rd_state->meta_eval_infos.v[meta_eval_info_idx];
|
||||
mei->label = entity->string;
|
||||
mei->id = entity->id;
|
||||
mei->color = entity->rgba;
|
||||
// TODO(rjf): @msgs
|
||||
meta_eval_info_idx += 1;
|
||||
}
|
||||
@@ -10557,6 +10562,7 @@ rd_frame(void)
|
||||
params.thread = rd_regs()->thread;
|
||||
// TODO(rjf): @msgs params.entity = ???;
|
||||
// TODO(rjf): @msgs params.processes = ???;
|
||||
params.string = rd_regs()->string;
|
||||
params.file_path = rd_regs()->file_path;
|
||||
params.cursor = rd_regs()->cursor;
|
||||
params.vaddr = rd_regs()->vaddr;
|
||||
|
||||
Reference in New Issue
Block a user