Entrian Inline Watch 0.8.6: More object formatting power!
Friday, August 14th, 2015 by Richie HindleI’ve just published Inline Watch 0.8.6, which includes this new feature:
- You can now control the maximum length of the displayed values
and a bunch of features related to custom formatting of object instances:
- Integer arithmetic in object formats, eg.
{right-left}
to display the width of a rectangle - Pointer arithmetic, eg.
{m_str+4}
where your string actually starts at an offset - Array indexing, eg.
{m_arr[N]}
where you want to display the N’th member of an array, whereN
can be a literal,{m_arr[4]}
or another member,{m_arr[m_index]}
- Specifying the length of a string (when your string is long, or not null-terminated), again with a literal,
{m_str,8}
, or another member{m_str,{m_len}}
- Displaying braces now requires them to be backslash escaped – see the next example:
- Force hex or decimal display in object formats, so if you always want your
Point
instances to be displayed in decimal like this: {50, 100} even if the Visual Studio debugger is set to hex display, you can say\{{m_x,d}, {m_y,d}\}
. Use anx
to get hex display.
Here’s an example that demonstrates some of these features. (It’s based on a customer example – they have a C++ string class whose string buffer includes a leading reference count, and is not NUL-terminated but instead has a length member.)
struct Formatting { const char *s; // 4-byte refcount then an unterminated string. int len; // Number of chars in the string, counting from s+4. const char *a[3]; // An array of three C-style strings. int current; // Which of the three strings is the 'current' one? Formatting() { s = "\x1\x2\x3\x4TextGARBAGEGARBAGE..."; len = 4; a[0] = "Zero"; a[1] = "One"; a[2] = "Two"; current = 1; // "One" is the string to display. } };
With an object formatting rule like this:
\{{s + 4,{len}}, {a[current]}\}
a Formatting
instance displays like this: {“Text”, “One”}
You can download the new release from the download page or the gallery.