Skip to content

Commit 38173a7

Browse files
committed
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
1 parent 74ee3b9 commit 38173a7

File tree

3 files changed

+58
-28
lines changed

3 files changed

+58
-28
lines changed

project.4coder

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ load_paths =
4646
commands =
4747
{
4848
//- rjf: fkey command slots (change locally but do not commit)
49-
.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, },
49+
.f1 = { .win = "build raddbg telemetry", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
5050
.f2 = { .win = "build rdi_from_pdb", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
5151
.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, },
5252

src/raddbg/raddbg_core.c

Lines changed: 53 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -9488,11 +9488,29 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
94889488
CTRL_Entity *process = ctrl_entity_ancestor_from_kind(thread, CTRL_EntityKind_Process);
94899489
String8 symbol_name = d_symbol_name_from_process_vaddr(arena, process, value_eval.value.u64, 1);
94909490

9491+
// rjf: push pointer value
9492+
B32 did_ptr_value = 0;
9493+
if(!no_addr || value_eval.value.u64 == 0)
9494+
{
9495+
did_ptr_value = 1;
9496+
String8 string = ev_string_from_simple_typed_eval(arena, flags, radix, min_digits, value_eval);
9497+
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, string).x;
9498+
str8_list_push(arena, out, string);
9499+
}
9500+
94919501
// rjf: special case: push strings for textual string content
9502+
B32 did_arrow = 0;
94929503
B32 did_content = 0;
94939504
B32 did_string = 0;
94949505
if(!did_content && ptee_has_string && !has_array)
94959506
{
9507+
if(did_ptr_value && !did_arrow)
9508+
{
9509+
did_arrow = 1;
9510+
String8 arrow = str8_lit(" -> ");
9511+
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, arrow).x;
9512+
str8_list_push(arena, out, arrow);
9513+
}
94969514
did_content = 1;
94979515
did_string = 1;
94989516
U64 string_memory_addr = value_eval.value.u64;
@@ -9524,33 +9542,55 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
95249542
}
95259543

95269544
// rjf: special case: push strings for symbols
9527-
if(!did_content && symbol_name.size != 0 &&
9545+
if(value_eval.value.u64 != 0 &&
9546+
!did_content && symbol_name.size != 0 &&
95289547
flags & EV_StringFlag_ReadOnlyDisplayRules &&
95299548
((type_kind == E_TypeKind_Ptr && direct_type_kind == E_TypeKind_Void) ||
95309549
(type_kind == E_TypeKind_Ptr && direct_type_kind == E_TypeKind_Function) ||
95319550
(type_kind == E_TypeKind_Function)))
95329551
{
9552+
if(did_ptr_value && !did_arrow)
9553+
{
9554+
did_arrow = 1;
9555+
String8 arrow = str8_lit(" -> ");
9556+
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, arrow).x;
9557+
str8_list_push(arena, out, arrow);
9558+
}
95339559
did_content = 1;
95349560
str8_list_push(arena, out, symbol_name);
95359561
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, symbol_name).x;
95369562
}
95379563

95389564
// rjf: special case: need symbol name, don't have one
9539-
if(!did_content && symbol_name.size == 0 &&
9565+
if(value_eval.value.u64 != 0 &&
9566+
!did_content && symbol_name.size == 0 &&
95409567
flags & EV_StringFlag_ReadOnlyDisplayRules &&
95419568
((type_kind == E_TypeKind_Ptr && direct_type_kind == E_TypeKind_Function) ||
95429569
(type_kind == E_TypeKind_Function)) &&
95439570
(flags & EV_StringFlag_ReadOnlyDisplayRules))
95449571
{
9572+
if(did_ptr_value)
9573+
{
9574+
String8 arrow = str8_lit(" -> ");
9575+
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, arrow).x;
9576+
str8_list_push(arena, out, arrow);
9577+
}
95459578
did_content = 1;
95469579
String8 string = str8_lit("???");
95479580
str8_list_push(arena, out, string);
95489581
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, string).x;
95499582
}
95509583

95519584
// rjf: descend for all other cases
9552-
if(!did_content && ptee_has_content && (flags & EV_StringFlag_ReadOnlyDisplayRules))
9585+
if(value_eval.value.u64 != 0 && !did_content && ptee_has_content && (flags & EV_StringFlag_ReadOnlyDisplayRules))
95539586
{
9587+
if(did_ptr_value && !did_arrow)
9588+
{
9589+
did_arrow = 1;
9590+
String8 arrow = str8_lit(" -> ");
9591+
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, arrow).x;
9592+
str8_list_push(arena, out, arrow);
9593+
}
95549594
did_content = 1;
95559595
if(depth < 4)
95569596
{
@@ -9565,28 +9605,6 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
95659605
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, ellipses).x;
95669606
}
95679607
}
9568-
9569-
// rjf: push pointer value
9570-
B32 did_ptr_value = 0;
9571-
if((!no_addr || !did_content) && ((flags & EV_StringFlag_ReadOnlyDisplayRules) || !did_string))
9572-
{
9573-
did_ptr_value = 1;
9574-
if(did_content)
9575-
{
9576-
String8 ptr_prefix = str8_lit(" (");
9577-
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, ptr_prefix).x;
9578-
str8_list_push(arena, out, ptr_prefix);
9579-
}
9580-
String8 string = ev_string_from_simple_typed_eval(arena, flags, radix, min_digits, value_eval);
9581-
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, string).x;
9582-
str8_list_push(arena, out, string);
9583-
if(did_content)
9584-
{
9585-
String8 close = str8_lit(")");
9586-
space_taken += fnt_dim_from_tag_size_string(font, font_size, 0, 0, close).x;
9587-
str8_list_push(arena, out, close);
9588-
}
9589-
}
95909608
}break;
95919609

95929610
//- rjf: arrays
@@ -14752,12 +14770,17 @@ rd_frame(void)
1475214770
CTRL_Entity *thread = &ctrl_entity_nil;
1475314771
CTRL_Entity *process = &ctrl_entity_nil;
1475414772
U64 vaddr = 0;
14773+
B32 require_disasm_snap = 0;
1475514774
{
1475614775
file_path = rd_mapped_from_file_path(scratch.arena, rd_regs()->file_path);
1475714776
point = rd_regs()->cursor;
1475814777
thread = ctrl_entity_from_handle(d_state->ctrl_entity_store, rd_regs()->thread);
1475914778
process = ctrl_entity_from_handle(d_state->ctrl_entity_store, rd_regs()->process);
1476014779
vaddr = rd_regs()->vaddr;
14780+
if(file_path.size == 0)
14781+
{
14782+
require_disasm_snap = 1;
14783+
}
1476114784
}
1476214785

1476314786
// rjf: given a src code location, if no vaddr is specified,
@@ -14844,16 +14867,19 @@ rd_frame(void)
1484414867
Rng2F32 panel_rect = rd_target_rect_from_panel(root_rect, ws->root_panel, panel);
1484514868
Vec2F32 panel_rect_dim = dim_2f32(panel_rect);
1484614869
F32 panel_area = panel_rect_dim.x*panel_rect_dim.y;
14870+
RD_View *panel_selected_tab = rd_selected_tab_from_panel(panel);
1484714871
for(RD_View *view = panel->first_tab_view; !rd_view_is_nil(view); view = view->order_next)
1484814872
{
1484914873
if(rd_view_is_project_filtered(view)) { continue; }
1485014874
RD_ViewRuleKind view_kind = rd_view_rule_kind_from_string(view->spec->string);
14851-
if(view_kind == RD_ViewRuleKind_Disasm && view->query_string_size == 0 && panel_area > best_panel_area)
14875+
B32 view_is_selected = (view == panel_selected_tab);
14876+
if(view_kind == RD_ViewRuleKind_Disasm && view->query_string_size == 0 && panel_area > best_panel_area &&
14877+
(view_is_selected || require_disasm_snap))
1485214878
{
1485314879
panel_w_disasm = panel;
1485414880
view_w_disasm = view;
1485514881
best_panel_area = panel_area;
14856-
if(view == rd_selected_tab_from_panel(panel))
14882+
if(view_is_selected)
1485714883
{
1485814884
break;
1485914885
}

src/scratch/ryan_scratch.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
#include "codeview/codeview.h"
2626
#include "codeview/codeview_stringize.h"
2727
#include "msf/msf.h"
28+
#include "msf/msf_parse.h"
2829
#include "pdb/pdb.h"
30+
#include "pdb/pdb_parse.h"
2931
#include "pdb/pdb_stringize.h"
3032

3133
//- rjf: [c]
@@ -37,7 +39,9 @@
3739
#include "codeview/codeview.c"
3840
#include "codeview/codeview_stringize.c"
3941
#include "msf/msf.c"
42+
#include "msf/msf_parse.c"
4043
#include "pdb/pdb.c"
44+
#include "pdb/pdb_parse.c"
4145
#include "pdb/pdb_stringize.c"
4246

4347
////////////////////////////////

0 commit comments

Comments
 (0)