fix unmapped address visualization when reading is impossible + stop it from terminating rest of useful visualization

This commit is contained in:
Ryan Fleury
2026-05-18 20:01:15 -07:00
parent 80d68b7f95
commit 40885a3f59
6 changed files with 14 additions and 13 deletions
+1
View File
@@ -5272,6 +5272,7 @@ d_ctrl_thread__open_crash_dump(DMN_CtrlCtx *ctrl_ctx, D_Msg *msg)
String8 module_name_raw_data = str8_prefix(str8_skip(data, off), module_name_size); String8 module_name_raw_data = str8_prefix(str8_skip(data, off), module_name_size);
String16 module_name_16 = str16((U16 *)module_name_raw_data.str, module_name_raw_data.size / sizeof(U16)); String16 module_name_16 = str16((U16 *)module_name_raw_data.str, module_name_raw_data.size / sizeof(U16));
module_name = str8_from_16(scratch.arena, module_name_16); module_name = str8_from_16(scratch.arena, module_name_16);
module_name = path_normalized_from_string(scratch.arena, module_name);
} }
// rjf: open module // rjf: open module
@@ -1849,25 +1849,20 @@ ev_string_iter_next(Arena *arena, EV_StringIter *it, String8 *out_string)
//- rjf: step 0: do pre-prefix pointer value if requested //- rjf: step 0: do pre-prefix pointer value if requested
case 0: case 0:
{ {
if(!(params->flags & EV_StringFlag_DisableAddresses) && if(!(params->flags & EV_StringFlag_DisableAddresses) && params->flags & EV_StringFlag_AddressesBeforeContent)
(!ptr_data->addr_is_good || params->flags & EV_StringFlag_AddressesBeforeContent))
{ {
Temp scratch = scratch_begin(&arena, 1); Temp scratch = scratch_begin(&arena, 1);
String8 ptr_value_string = str8_from_u64(scratch.arena, ptr_data->value_eval.value.u64, String8 ptr_value_string = str8_from_u64(scratch.arena, ptr_data->value_eval.value.u64,
ptr_data->value_eval.value.u64 != 0 ? 16 : 10, 0, 0); ptr_data->value_eval.value.u64 != 0 ? 16 : 10, 0, 0);
if(ptr_data->value_eval.value.u64 != 0 && !ptr_data->addr_is_good && params->flags & EV_StringFlag_ReadOnlyDisplayRules) if(params->flags & EV_StringFlag_DisplayAddressUnmappedStatus && ptr_data->value_eval.value.u64 != 0 && !ptr_data->addr_is_good && params->flags & EV_StringFlag_ReadOnlyDisplayRules)
{ {
ptr_value_string = str8f(scratch.arena, "%S (unmapped)", ptr_value_string); ptr_value_string = str8f(scratch.arena, "%S (unmapped)", ptr_value_string);
} }
*out_string = str8_copy(arena, ptr_value_string); *out_string = str8_copy(arena, ptr_value_string);
ptr_data->did_pre_prefix_ptr = 1; ptr_data->did_pre_prefix_ptr = 1;
need_pop = !ptr_data->addr_is_good;
scratch_end(scratch); scratch_end(scratch);
} }
else
{
need_pop = 0; need_pop = 0;
}
}break; }break;
//- rjf: step 1 -> try "prefix content", which we want to print before the pointer value, //- rjf: step 1 -> try "prefix content", which we want to print before the pointer value,
@@ -2134,7 +2129,7 @@ ev_string_iter_next(Arena *arena, EV_StringIter *it, String8 *out_string)
{ {
Temp scratch = scratch_begin(&arena, 1); Temp scratch = scratch_begin(&arena, 1);
String8 ptr_value_string = str8_from_u64(scratch.arena, ptr_data->value_eval.value.u64, ptr_data->value_eval.value.u64 != 0 ? 16 : 10, 0, 0); String8 ptr_value_string = str8_from_u64(scratch.arena, ptr_data->value_eval.value.u64, ptr_data->value_eval.value.u64 != 0 ? 16 : 10, 0, 0);
if(params->flags & EV_StringFlag_ReadOnlyDisplayRules && ptr_data->value_eval.value.u64 != 0 && !ptr_data->addr_is_good) if(params->flags & EV_StringFlag_DisplayAddressUnmappedStatus && params->flags & EV_StringFlag_ReadOnlyDisplayRules && ptr_data->value_eval.value.u64 != 0 && !ptr_data->addr_is_good)
{ {
ptr_value_string = str8f(scratch.arena, "%S (unmapped)", ptr_value_string); ptr_value_string = str8f(scratch.arena, "%S (unmapped)", ptr_value_string);
} }
@@ -234,6 +234,7 @@ enum
EV_StringFlag_DisableChars = (1<<4), EV_StringFlag_DisableChars = (1<<4),
EV_StringFlag_DisableStringQuotes = (1<<5), EV_StringFlag_DisableStringQuotes = (1<<5),
EV_StringFlag_AddressesBeforeContent = (1<<6), EV_StringFlag_AddressesBeforeContent = (1<<6),
EV_StringFlag_DisplayAddressUnmappedStatus = (1<<7),
}; };
typedef struct EV_StringParams EV_StringParams; typedef struct EV_StringParams EV_StringParams;
+4
View File
@@ -12302,6 +12302,10 @@ rd_frame(void)
{ {
rd_state->eval_viz_base_string_flags |= EV_StringFlag_AddressesBeforeContent; rd_state->eval_viz_base_string_flags |= EV_StringFlag_AddressesBeforeContent;
} }
if(!d_user_state->ctrl_is_running)
{
rd_state->eval_viz_base_string_flags |= EV_StringFlag_DisplayAddressUnmappedStatus;
}
//////////////////////////// ////////////////////////////
//- rjf: autosave if needed //- rjf: autosave if needed