adjust pointer visualization; don't follow 0 pointers, go back to showing address first; adjust find-code-location snapping rule to only require a disasm snap / focus if no file location is specified

This commit is contained in:
Ryan Fleury
2024-10-16 13:23:10 -07:00
parent 74ee3b9850
commit 38173a7154
3 changed files with 58 additions and 28 deletions
+1 -1
View File
@@ -46,7 +46,7 @@ load_paths =
commands = commands =
{ {
//- rjf: fkey command slots (change locally but do not commit) //- rjf: fkey command slots (change locally but do not commit)
.f1 = { .win = "build rdi_from_pdb rdi_dump tester telemetry && pushd build && tester && popd", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, }, .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, }, .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 --xuto_run && 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 --xuto_run && popd",.linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
+53 -27
View File
@@ -9488,11 +9488,29 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
CTRL_Entity *process = ctrl_entity_ancestor_from_kind(thread, CTRL_EntityKind_Process); CTRL_Entity *process = ctrl_entity_ancestor_from_kind(thread, CTRL_EntityKind_Process);
String8 symbol_name = d_symbol_name_from_process_vaddr(arena, process, value_eval.value.u64, 1); String8 symbol_name = d_symbol_name_from_process_vaddr(arena, process, value_eval.value.u64, 1);
// rjf: push pointer value
B32 did_ptr_value = 0;
if(!no_addr || value_eval.value.u64 == 0)
{
did_ptr_value = 1;
String8 string = ev_string_from_simple_typed_eval(arena, flags, radix, min_digits, value_eval);
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, string).x;
str8_list_push(arena, out, string);
}
// rjf: special case: push strings for textual string content // rjf: special case: push strings for textual string content
B32 did_arrow = 0;
B32 did_content = 0; B32 did_content = 0;
B32 did_string = 0; B32 did_string = 0;
if(!did_content && ptee_has_string && !has_array) if(!did_content && ptee_has_string && !has_array)
{ {
if(did_ptr_value && !did_arrow)
{
did_arrow = 1;
String8 arrow = str8_lit(" -> ");
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, arrow).x;
str8_list_push(arena, out, arrow);
}
did_content = 1; did_content = 1;
did_string = 1; did_string = 1;
U64 string_memory_addr = value_eval.value.u64; U64 string_memory_addr = value_eval.value.u64;
@@ -9524,24 +9542,39 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
} }
// rjf: special case: push strings for symbols // rjf: special case: push strings for symbols
if(!did_content && symbol_name.size != 0 && if(value_eval.value.u64 != 0 &&
!did_content && symbol_name.size != 0 &&
flags & EV_StringFlag_ReadOnlyDisplayRules && flags & EV_StringFlag_ReadOnlyDisplayRules &&
((type_kind == E_TypeKind_Ptr && direct_type_kind == E_TypeKind_Void) || ((type_kind == E_TypeKind_Ptr && direct_type_kind == E_TypeKind_Void) ||
(type_kind == E_TypeKind_Ptr && direct_type_kind == E_TypeKind_Function) || (type_kind == E_TypeKind_Ptr && direct_type_kind == E_TypeKind_Function) ||
(type_kind == E_TypeKind_Function))) (type_kind == E_TypeKind_Function)))
{ {
if(did_ptr_value && !did_arrow)
{
did_arrow = 1;
String8 arrow = str8_lit(" -> ");
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, arrow).x;
str8_list_push(arena, out, arrow);
}
did_content = 1; did_content = 1;
str8_list_push(arena, out, symbol_name); str8_list_push(arena, out, symbol_name);
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, symbol_name).x; space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, symbol_name).x;
} }
// rjf: special case: need symbol name, don't have one // rjf: special case: need symbol name, don't have one
if(!did_content && symbol_name.size == 0 && if(value_eval.value.u64 != 0 &&
!did_content && symbol_name.size == 0 &&
flags & EV_StringFlag_ReadOnlyDisplayRules && flags & EV_StringFlag_ReadOnlyDisplayRules &&
((type_kind == E_TypeKind_Ptr && direct_type_kind == E_TypeKind_Function) || ((type_kind == E_TypeKind_Ptr && direct_type_kind == E_TypeKind_Function) ||
(type_kind == E_TypeKind_Function)) && (type_kind == E_TypeKind_Function)) &&
(flags & EV_StringFlag_ReadOnlyDisplayRules)) (flags & EV_StringFlag_ReadOnlyDisplayRules))
{ {
if(did_ptr_value)
{
String8 arrow = str8_lit(" -> ");
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, arrow).x;
str8_list_push(arena, out, arrow);
}
did_content = 1; did_content = 1;
String8 string = str8_lit("???"); String8 string = str8_lit("???");
str8_list_push(arena, out, string); str8_list_push(arena, out, string);
@@ -9549,8 +9582,15 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
} }
// rjf: descend for all other cases // rjf: descend for all other cases
if(!did_content && ptee_has_content && (flags & EV_StringFlag_ReadOnlyDisplayRules)) if(value_eval.value.u64 != 0 && !did_content && ptee_has_content && (flags & EV_StringFlag_ReadOnlyDisplayRules))
{ {
if(did_ptr_value && !did_arrow)
{
did_arrow = 1;
String8 arrow = str8_lit(" -> ");
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, arrow).x;
str8_list_push(arena, out, arrow);
}
did_content = 1; did_content = 1;
if(depth < 4) if(depth < 4)
{ {
@@ -9565,28 +9605,6 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, ellipses).x; space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, ellipses).x;
} }
} }
// rjf: push pointer value
B32 did_ptr_value = 0;
if((!no_addr || !did_content) && ((flags & EV_StringFlag_ReadOnlyDisplayRules) || !did_string))
{
did_ptr_value = 1;
if(did_content)
{
String8 ptr_prefix = str8_lit(" (");
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, ptr_prefix).x;
str8_list_push(arena, out, ptr_prefix);
}
String8 string = ev_string_from_simple_typed_eval(arena, flags, radix, min_digits, value_eval);
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, string).x;
str8_list_push(arena, out, string);
if(did_content)
{
String8 close = str8_lit(")");
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, close).x;
str8_list_push(arena, out, close);
}
}
}break; }break;
//- rjf: arrays //- rjf: arrays
@@ -14752,12 +14770,17 @@ rd_frame(void)
CTRL_Entity *thread = &ctrl_entity_nil; CTRL_Entity *thread = &ctrl_entity_nil;
CTRL_Entity *process = &ctrl_entity_nil; CTRL_Entity *process = &ctrl_entity_nil;
U64 vaddr = 0; U64 vaddr = 0;
B32 require_disasm_snap = 0;
{ {
file_path = rd_mapped_from_file_path(scratch.arena, rd_regs()->file_path); file_path = rd_mapped_from_file_path(scratch.arena, rd_regs()->file_path);
point = rd_regs()->cursor; point = rd_regs()->cursor;
thread = ctrl_entity_from_handle(d_state->ctrl_entity_store, rd_regs()->thread); thread = ctrl_entity_from_handle(d_state->ctrl_entity_store, rd_regs()->thread);
process = ctrl_entity_from_handle(d_state->ctrl_entity_store, rd_regs()->process); process = ctrl_entity_from_handle(d_state->ctrl_entity_store, rd_regs()->process);
vaddr = rd_regs()->vaddr; vaddr = rd_regs()->vaddr;
if(file_path.size == 0)
{
require_disasm_snap = 1;
}
} }
// rjf: given a src code location, if no vaddr is specified, // rjf: given a src code location, if no vaddr is specified,
@@ -14844,16 +14867,19 @@ rd_frame(void)
Rng2F32 panel_rect = rd_target_rect_from_panel(root_rect, ws->root_panel, panel); Rng2F32 panel_rect = rd_target_rect_from_panel(root_rect, ws->root_panel, panel);
Vec2F32 panel_rect_dim = dim_2f32(panel_rect); Vec2F32 panel_rect_dim = dim_2f32(panel_rect);
F32 panel_area = panel_rect_dim.x*panel_rect_dim.y; F32 panel_area = panel_rect_dim.x*panel_rect_dim.y;
RD_View *panel_selected_tab = rd_selected_tab_from_panel(panel);
for(RD_View *view = panel->first_tab_view; !rd_view_is_nil(view); view = view->order_next) for(RD_View *view = panel->first_tab_view; !rd_view_is_nil(view); view = view->order_next)
{ {
if(rd_view_is_project_filtered(view)) { continue; } if(rd_view_is_project_filtered(view)) { continue; }
RD_ViewRuleKind view_kind = rd_view_rule_kind_from_string(view->spec->string); RD_ViewRuleKind view_kind = rd_view_rule_kind_from_string(view->spec->string);
if(view_kind == RD_ViewRuleKind_Disasm && view->query_string_size == 0 && panel_area > best_panel_area) B32 view_is_selected = (view == panel_selected_tab);
if(view_kind == RD_ViewRuleKind_Disasm && view->query_string_size == 0 && panel_area > best_panel_area &&
(view_is_selected || require_disasm_snap))
{ {
panel_w_disasm = panel; panel_w_disasm = panel;
view_w_disasm = view; view_w_disasm = view;
best_panel_area = panel_area; best_panel_area = panel_area;
if(view == rd_selected_tab_from_panel(panel)) if(view_is_selected)
{ {
break; break;
} }
+4
View File
@@ -25,7 +25,9 @@
#include "codeview/codeview.h" #include "codeview/codeview.h"
#include "codeview/codeview_stringize.h" #include "codeview/codeview_stringize.h"
#include "msf/msf.h" #include "msf/msf.h"
#include "msf/msf_parse.h"
#include "pdb/pdb.h" #include "pdb/pdb.h"
#include "pdb/pdb_parse.h"
#include "pdb/pdb_stringize.h" #include "pdb/pdb_stringize.h"
//- rjf: [c] //- rjf: [c]
@@ -37,7 +39,9 @@
#include "codeview/codeview.c" #include "codeview/codeview.c"
#include "codeview/codeview_stringize.c" #include "codeview/codeview_stringize.c"
#include "msf/msf.c" #include "msf/msf.c"
#include "msf/msf_parse.c"
#include "pdb/pdb.c" #include "pdb/pdb.c"
#include "pdb/pdb_parse.c"
#include "pdb/pdb_stringize.c" #include "pdb/pdb_stringize.c"
//////////////////////////////// ////////////////////////////////