Memory Dumps
I’ve been looking at memory dumps often lately. Since I usually (always) debug with ‘printf’, I needed a better visual for my memory dumps. I decided to do a simple memory dumper:
And added some features:
- Colored output
 - Different data types (hex, decimal, …)
 - You can specify different regions with different colors and sub-regions
 - Print actual data values
 - Array elements alternate between bold and normal styles
 - Display cache alignment
 
Here is a example:
// Example struct
struct S {
  vec3 v;
  point2 p;
};
// Array of S elements
S v[3] = {{{1, 2, 3}, {4, 5}},
          {{10, 20, 30}, {40, 50}},
          {{100, 200, 300}, {400, 500}}};
// Here we can define a different region for each struct field:
auto layout = MemoryDumper::RegionLayout().withSizeOf<S>(3)
    .withSubRegion(vec3::memoryDumpLayout().withColor(ConsoleColors::blue))
    .withSubRegion(point2::memoryDumpLayout().withColor(ConsoleColors::yellow));
// Dump to console with colors and data values
MemoryDumper::dump(v, 3, 8, layout,
                   memory_dumper_options::type_values | 
                   memory_dumper_options::colored_output);
The example above produces the following result:
  
Here are some other examples:
- ascii
 
- matrices
 
- just too much…