{"id":106689,"date":"2022-05-27T07:00:00","date_gmt":"2022-05-27T14:00:00","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/oldnewthing\/?p=106689"},"modified":"2022-05-27T06:45:50","modified_gmt":"2022-05-27T13:45:50","slug":"20220527-00","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/oldnewthing\/20220527-00\/?p=106689","title":{"rendered":"Why do rescued stack traces often have instability at the start?"},"content":{"rendered":"<p>When you try to recover a lost stack trace, and you make a guess as to where things should resume, sometimes you get a few stack frames of garbage before things finally settle down into a proper stack trace. Why does that happen?<\/p>\n<p>Recall that the stack frame chain is a linked list of stack frames. If you draw the stack left-to-right and growing to the right, it might look like this:<\/p>\n<div id=\"p20220527_defs\" style=\"height: 0;\">\u00a0<\/div>\n<div id=\"p20220527_svg1\">\u00a0<\/div>\n<p>Each stack frame consists of the return address (R) and a pointer to the previous stack frame. The current stack frame is marked with a star. The space between stack frames contains other stack things, like saved registers, stack-based function parameters, and local variables.<\/p>\n<p>When a function is called, a new stack frame is added to the linked list, and when a function returns, its frame is popped off the linked list.<\/p>\n<p>But even though the frame has been popped off the linked list, it still remains in memory until overwritten.<\/p>\n<p>Sometimes, the memory for an expired frame is reused right away, but sometimes it lingers. For example, the next function might decide to use that memory for a variable which hasn&#8217;t yet been written to. And maybe through the course of the function, it <i>never<\/i> gets written to: Maybe the variable is used in a branch that was not taken, or the variable is a large buffer, and only part of the buffer was needed.<\/p>\n<p>If you dump the stack, you may see these ghosts of long-ago stack frames still haunting the stack memory. What happens if you ask the debugger to dump the stack starting at one of these ghost stack frames?<\/p>\n<p>The debugger doesn&#8217;t know it&#8217;s a ghost. The debugger just follows the linked list. If the list is badly corrupted, the resulting stack trace is complete nonsense. But if the list is only slightly corrupted, you could see a few frames of garbage, and then a good stack trace emerges.<\/p>\n<p>Why does a good stack trace emerge?<\/p>\n<p>The thing about the ghost frames is that they are not total fabrications. They were at one time valid frames, and that means that their pointer did point to the previous function on the stack.<\/p>\n<p>Here&#8217;s a time-lapse of what happens to the stack frame chain as functions are called and return. At the start of our story, we have a call stack with three frames.<\/p>\n<div id=\"p20220527_svg2\">\u00a0<\/div>\n<p>Now, suppose that the current function calls a new function. This pushes a new frame onto the stack:<\/p>\n<div id=\"p20220527_svg3\">\u00a0<\/div>\n<p>That function now returns, popping it off the stack but leaving a ghost behind, which I will draw in gray.<\/p>\n<div id=\"p20220527_svg4\">\u00a0<\/div>\n<p>And the we call another function:<\/p>\n<div id=\"p20220527_svg5\">\u00a0<\/div>\n<p>Eventually that function returns:<\/p>\n<div id=\"p20220527_svg6\">\u00a0<\/div>\n<p>And say the returned-to function also returns.<\/p>\n<div id=\"p20220527_svg7\">\u00a0<\/div>\n<p>And then the first function in our diagram calls some new function.<\/p>\n<div id=\"p20220527_svg8\">\u00a0<\/div>\n<p>Now suppose you didn&#8217;t know that the stack frame chain began with the starred element F. What happens if you try each of the different possible starting points?<\/p>\n<p>For example, if we started at the element labeled C, then we would get C, then follow the arrow to B (which is a dotted arrow but we don&#8217;t know that), and then follow the arrow again to A, yielding a stack trace of C-B-A.<\/p>\n<p>Here&#8217;s what you get for all of the possible starting points.<\/p>\n<table class=\"cp3\" style=\"border-collapse: collapse;\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\n<tbody>\n<tr>\n<th>Starting point<\/th>\n<th>Result<\/th>\n<\/tr>\n<tr>\n<td>A<\/td>\n<td>A\u2013\u2026<\/td>\n<\/tr>\n<tr>\n<td>B<\/td>\n<td>B\u2013A\u2013\u2026<\/td>\n<\/tr>\n<tr>\n<td>C<\/td>\n<td>C\u2013B\u2013A\u2013\u2026<\/td>\n<\/tr>\n<tr>\n<td>D<\/td>\n<td>D\u2013C\u2013B\u2013A\u2013\u2026<\/td>\n<\/tr>\n<tr>\n<td>E<\/td>\n<td>E\u2013C\u2013B\u2013A\u2013\u2026<\/td>\n<\/tr>\n<tr>\n<td>F<\/td>\n<td>F\u2013B\u2013A\u2013\u2026<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Notice that each one gives you a stack trace for what was the stack at the point the frame was last alive. And once you get to a live frame (A or B), the stack backtrace is all good.<\/p>\n<p>Some of the labels or arrows for ghost stack frames become corrupted because the memory was reused for some other purpose. Depending on how severe the corruption is, the stack trace could turn into complete nonsense, or it could still produce a trace but with a little bit of corruption. The corruption is possible up until the ghost stack trace reaches far back enough to hit a live stack frame, at which point everything from that point onward is still good.<\/p>\n<p>In practice, most ghost frames get overwritten relatively quickly, so if you find a ghost frame, there&#8217;s a good chance that it&#8217;s only a few frames away from a live frame, and a reasonable chance that none of the ghost frames leading to the live frame have been corrupted too badly.<\/p>\n<p>That&#8217;s why, if you ask for a stack trace starting from the wrong place, and you are sufficiently lucky, you get a few frames of garbage followed by a good stack trace.<\/p>\n<p>\n<script>\n(function() {\n  var svg = {\n    defs: `<svg width=\"0\" height=\"0\">\n<defs>\n    <marker id=\"arrowheadb\" markerWidth=\"7\" markerHeight=\"7\" refX=\"-2\" refY=\"0\"\n        viewBox=\"-6 -6 12 12\" orient=\"auto\">\n        <polygon points=\"-2,0 -5,5 5,0 -5,-5\" fill=\"black\" stroke=\"black\" \/>\n    <\/marker>\n    <marker id=\"arrowheadg\" markerWidth=\"7\" markerHeight=\"7\" refX=\"-2\" refY=\"0\"\n        viewBox=\"-6 -6 12 12\" orient=\"auto\">\n        <polygon points=\"-2,0 -5,5 5,0 -5,-5\" fill=\"gray\" stroke=\"gray\" \/>\n    <\/marker>\n    <g id=\"linkb\">\n        <circle cx=\"12\" cy=\"12\" r=\"3\" fill=\"black\" \/>\n    <\/g>\n    <g id=\"linkg\">\n        <circle cx=\"12\" cy=\"12\" r=\"3\" fill=\"gray\" \/>\n    <\/g>\n    <g id=\"star\">\n        <text x=\"12\" y=\"12\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">&#x2605;<\/text>\n    <\/g>\n    <g id=\"grid\">\n        <line x1=\"0\" y1=\"24.5\" x2=\"480\" y2=\"24.5\" stroke=\"black\" \/>\n        <line x1=\"0\" y1=\"48.5\" x2=\"480\" y2=\"48.5\" stroke=\"black\" \/>\n        <line x1=\"0.5\" y1=\"24\" x2=\"0.5\" y2=\"48\" stroke=\"black\" \/>\n        <line x1=\"24.5\" y1=\"24\" x2=\"24.5\" y2=\"48\" stroke=\"black\" \/>\n        <line x1=\"48.5\" y1=\"24\" x2=\"48.5\" y2=\"48\" stroke=\"black\" \/>\n        <line x1=\"72.5\" y1=\"24\" x2=\"72.5\" y2=\"48\" stroke=\"black\" \/>\n        <line x1=\"96.5\" y1=\"24\" x2=\"96.5\" y2=\"48\" stroke=\"black\" \/>\n        <line x1=\"120.5\" y1=\"24\" x2=\"120.5\" y2=\"48\" stroke=\"black\" \/>\n        <line x1=\"144.5\" y1=\"24\" x2=\"144.5\" y2=\"48\" stroke=\"black\" \/>\n        <line x1=\"168.5\" y1=\"24\" x2=\"168.5\" y2=\"48\" stroke=\"black\" \/>\n        <line x1=\"192.5\" y1=\"24\" x2=\"192.5\" y2=\"48\" stroke=\"black\" \/>\n        <line x1=\"216.5\" y1=\"24\" x2=\"216.5\" y2=\"48\" stroke=\"black\" \/>\n        <line x1=\"240.5\" y1=\"24\" x2=\"240.5\" y2=\"48\" stroke=\"black\" \/>\n        <line x1=\"264.5\" y1=\"24\" x2=\"264.5\" y2=\"48\" stroke=\"black\" \/>\n        <line x1=\"288.5\" y1=\"24\" x2=\"288.5\" y2=\"48\" stroke=\"black\" \/>\n        <line x1=\"312.5\" y1=\"24\" x2=\"312.5\" y2=\"48\" stroke=\"black\" \/>\n        <line x1=\"336.5\" y1=\"24\" x2=\"336.5\" y2=\"48\" stroke=\"black\" \/>\n        <line x1=\"360.5\" y1=\"24\" x2=\"360.5\" y2=\"48\" stroke=\"black\" \/>\n        <line x1=\"384.5\" y1=\"24\" x2=\"384.5\" y2=\"48\" stroke=\"black\" \/>\n        <line x1=\"408.5\" y1=\"24\" x2=\"408.5\" y2=\"48\" stroke=\"black\" \/>\n        <line x1=\"432.5\" y1=\"24\" x2=\"432.5\" y2=\"48\" stroke=\"black\" \/>\n        <line x1=\"456.5\" y1=\"24\" x2=\"456.5\" y2=\"48\" stroke=\"black\" \/>\n    <\/g>\n<\/defs>\n<\/svg>`,\n    svg1: `<svg width=\"485\" height=\"50\" xstyle=\"border: solid black 1px\">\n    <use href=\"#grid\" \/>\n    <use href=\"#linkb\" x=\"0\" y=\"24\" \/>\n    <text x=\"36\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">R<\/text>\n    <use href=\"#linkb\" x=\"72\" y=\"24\" \/>\n    <text x=\"108\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">R<\/text>\n    <path d=\"M80,20 C80,0 20,0 16,20\" stroke=\"black\" fill=\"none\" marker-end=\"url(#arrowheadb)\" \/>\n    <use href=\"#linkb\" x=\"240\" y=\"24\" \/>\n    <text x=\"278\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">R<\/text>\n    <path d=\"M248,20 C248,0 92,0 88,20\" stroke=\"black\" fill=\"none\" marker-end=\"url(#arrowheadb)\" \/>\n    <use href=\"#star\" x=\"408\" y=\"24\" \/>\n    <text x=\"444\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">R<\/text>\n    <path d=\"M416,20 C416,0 260,0 256,20\" stroke=\"black\" fill=\"none\" marker-end=\"url(#arrowheadb)\" \/>\n<\/svg>`,\n    svg2: `<svg width=\"485\" height=\"50\" xstyle=\"border: solid black 1px\">\n    <use href=\"#grid\" \/>\n    <use href=\"#linkb\" x=\"0\" y=\"24\" \/>\n    <text x=\"36\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">A<\/text>\n    <use href=\"#linkb\" x=\"72\" y=\"24\" \/>\n    <text x=\"108\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">B<\/text>\n    <path d=\"M80,20 C80,0 20,0 16,20\" stroke=\"black\" fill=\"none\" marker-end=\"url(#arrowheadb)\" \/>\n    <use href=\"#star\" x=\"240\" y=\"24\" \/>\n    <text x=\"276\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">C<\/text>\n    <path d=\"M248,20 C248,0 92,0 88,20\" stroke=\"black\" fill=\"none\" marker-end=\"url(#arrowheadb)\" \/>\n<\/svg>`,\n    svg3: `<svg width=\"485\" height=\"50\" xstyle=\"border: solid black 1px\">\n    <use href=\"#grid\" \/>\n    <use href=\"#linkb\" x=\"0\" y=\"24\" \/>\n    <text x=\"36\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">A<\/text>\n    <use href=\"#linkb\" x=\"72\" y=\"24\" \/>\n    <text x=\"108\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">B<\/text>\n    <path d=\"M80,20 C80,0 20,0 16,20\" stroke=\"black\" fill=\"none\" marker-end=\"url(#arrowheadb)\" \/>\n    <use href=\"#linkb\" x=\"240\" y=\"24\" \/>\n    <text x=\"276\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">C<\/text>\n    <path d=\"M248,20 C248,0 92,0 88,20\" stroke=\"black\" fill=\"none\" marker-end=\"url(#arrowheadb)\" \/>\n    <use href=\"#star\" x=\"408\" y=\"24\" \/>\n    <text x=\"444\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">D<\/text>\n    <path d=\"M416,20 C416,0 260,0 256,20\" stroke=\"black\" fill=\"none\" marker-end=\"url(#arrowheadb)\" \/>\n<\/svg>`,\n    svg4: `<svg width=\"485\" height=\"50\" xstyle=\"border: solid black 1px\">\n    <use href=\"#grid\" \/>\n    <use href=\"#linkb\" x=\"0\" y=\"24\" \/>\n    <text x=\"36\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">A<\/text>\n    <use href=\"#linkb\" x=\"72\" y=\"24\" \/>\n    <text x=\"108\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">B<\/text>\n    <path d=\"M80,20 C80,0 20,0 16,20\" stroke=\"black\" fill=\"none\" marker-end=\"url(#arrowheadb)\" \/>\n    <use href=\"#star\" x=\"240\" y=\"24\" \/>\n    <text x=\"276\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">C<\/text>\n    <path d=\"M248,20 C248,0 92,0 88,20\" stroke=\"black\" fill=\"none\" marker-end=\"url(#arrowheadb)\" \/>\n    <use href=\"#linkg\" x=\"408\" y=\"24\" \/>\n    <text x=\"444\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"gray\">D<\/text>\n    <path d=\"M416,20 C416,0 260,0 256,20\" stroke=\"gray\" fill=\"none\" stroke-dasharray=\"4 4\" marker-end=\"url(#arrowheadg)\" \/>\n<\/svg>`,\n    svg5: `<svg width=\"485\" height=\"50\" xstyle=\"border: solid black 1px\">\n    <use href=\"#grid\" \/>\n    <use href=\"#linkb\" x=\"0\" y=\"24\" \/>\n    <text x=\"36\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">A<\/text>\n    <use href=\"#linkb\" x=\"72\" y=\"24\" \/>\n    <text x=\"108\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">B<\/text>\n    <path d=\"M80,20 C80,0 20,0 16,20\" stroke=\"black\" fill=\"none\" marker-end=\"url(#arrowheadb)\" \/>\n    <use href=\"#linkb\" x=\"240\" y=\"24\" \/>\n    <text x=\"276\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">C<\/text>\n    <path d=\"M248,20 C248,0 92,0 88,20\" stroke=\"black\" fill=\"none\" marker-end=\"url(#arrowheadb)\" \/>\n    <use href=\"#star\" x=\"336\" y=\"24\" \/>\n    <text x=\"372\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">E<\/text>\n    <path d=\"M344,20 C344,0 260,0 256,20\" stroke=\"black\" fill=\"none\" marker-end=\"url(#arrowheadb)\" \/>\n    <use href=\"#linkg\" x=\"408\" y=\"24\" \/>\n    <text x=\"444\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"gray\">D<\/text>\n    <path d=\"M416,20 C416,0 260,0 256,20\" stroke=\"gray\" fill=\"none\" stroke-dasharray=\"4 4\" marker-end=\"url(#arrowheadg)\" \/>\n<\/svg>`,\n    svg6: `<svg width=\"485\" height=\"50\" xstyle=\"border: solid black 1px\">\n    <use href=\"#grid\" \/>\n    <use href=\"#linkb\" x=\"0\" y=\"24\" \/>\n    <text x=\"36\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">A<\/text>\n    <use href=\"#linkb\" x=\"72\" y=\"24\" \/>\n    <text x=\"108\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">B<\/text>\n    <path d=\"M80,20 C80,0 20,0 16,20\" stroke=\"black\" fill=\"none\" marker-end=\"url(#arrowheadb)\" \/>\n    <use href=\"#star\" x=\"240\" y=\"24\" \/>\n    <text x=\"276\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">C<\/text>\n    <path d=\"M248,20 C248,0 92,0 88,20\" stroke=\"black\" fill=\"none\" marker-end=\"url(#arrowheadb)\" \/>\n    <use href=\"#linkg\" x=\"336\" y=\"24\" \/>\n    <text x=\"372\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"gray\">E<\/text>\n    <path d=\"M344,20 C344,0 260,0 256,20\" stroke=\"gray\" fill=\"none\" stroke-dasharray=\"4 4\" marker-end=\"url(#arrowheadg)\" \/>\n    <use href=\"#linkg\" x=\"408\" y=\"24\" \/>\n    <text x=\"444\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"gray\">D<\/text>\n    <path d=\"M416,20 C416,0 260,0 256,20\" stroke=\"gray\" fill=\"none\" stroke-dasharray=\"4 4\" marker-end=\"url(#arrowheadg)\" \/>\n<\/svg>`,\n    svg7: `<svg width=\"485\" height=\"50\" xstyle=\"border: solid black 1px\">\n    <use href=\"#grid\" \/>\n    <use href=\"#linkb\" x=\"0\" y=\"24\" \/>\n    <text x=\"36\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">A<\/text>\n    <use href=\"#star\" x=\"72\" y=\"24\" \/>\n    <text x=\"108\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">B<\/text>\n    <path d=\"M80,20 C80,0 20,0 16,20\" stroke=\"black\" fill=\"none\" marker-end=\"url(#arrowheadb)\" \/>\n    <use href=\"#linkg\" x=\"240\" y=\"24\" \/>\n    <text x=\"276\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"gray\">C<\/text>\n    <path d=\"M248,20 C248,0 92,0 88,20\" stroke=\"gray\" fill=\"none\" stroke-dasharray=\"4 4\" marker-end=\"url(#arrowheadg)\" \/>\n    <use href=\"#linkg\" x=\"336\" y=\"24\" \/>\n    <text x=\"372\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"gray\">E<\/text>\n    <path d=\"M344,20 C344,0 260,0 256,20\" stroke=\"gray\" fill=\"none\" stroke-dasharray=\"4 4\" marker-end=\"url(#arrowheadg)\" \/>\n    <use href=\"#linkg\" x=\"408\" y=\"24\" \/>\n    <text x=\"444\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"gray\">D<\/text>\n    <path d=\"M416,20 C416,0 260,0 256,20\" stroke=\"gray\" fill=\"none\" stroke-dasharray=\"4 4\" marker-end=\"url(#arrowheadg)\" \/>\n<\/svg>`,\n    svg8: `<svg width=\"485\" height=\"50\" xstyle=\"border: solid black 1px\">\n    <use href=\"#grid\" \/>\n    <use href=\"#linkb\" x=\"0\" y=\"24\" \/>\n    <text x=\"36\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">A<\/text>\n    <use href=\"#linkb\" x=\"72\" y=\"24\" \/>\n    <text x=\"108\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">B<\/text>\n    <path d=\"M80,20 C80,0 20,0 16,20\" stroke=\"black\" fill=\"none\" marker-end=\"url(#arrowheadb)\" \/>\n    <use href=\"#star\" x=\"168\" y=\"24\" \/>\n    <text x=\"204\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"black\">F<\/text>\n    <path d=\"M176,20 C176,0 92,0 88,20\" stroke=\"black\" fill=\"none\" marker-end=\"url(#arrowheadb)\" \/>\n    <use href=\"#linkg\" x=\"240\" y=\"24\" \/>\n    <text x=\"276\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"gray\">C<\/text>\n    <path d=\"M248,20 C248,0 92,0 88,20\" stroke=\"gray\" fill=\"none\" stroke-dasharray=\"4 4\" marker-end=\"url(#arrowheadg)\" \/>\n    <use href=\"#linkg\" x=\"336\" y=\"24\" \/>\n    <text x=\"372\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"gray\">E<\/text>\n    <path d=\"M344,20 C344,0 260,0 256,20\" stroke=\"gray\" fill=\"none\" stroke-dasharray=\"4 4\" marker-end=\"url(#arrowheadg)\" \/>\n    <use href=\"#linkg\" x=\"408\" y=\"24\" \/>\n    <text x=\"444\" y=\"36\" text-anchor=\"middle\" dominant-baseline=\"central\" fill=\"gray\">D<\/text>\n    <path d=\"M416,20 C416,0 260,0 256,20\" stroke=\"gray\" fill=\"none\" stroke-dasharray=\"4 4\" marker-end=\"url(#arrowheadg)\" \/>\n<\/svg>`\n  };\n  Object.keys(svg).forEach(function (key) {\n    Array.prototype.forEach.call(document.querySelectorAll(\"#p20220527_\" + key),\n      function (e) {\n        e.innerHTML = svg[key];\n      });\n  });\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Trying to pick up the scent.<\/p>\n","protected":false},"author":1069,"featured_media":111744,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[25],"class_list":["post-106689","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oldnewthing","tag-code"],"acf":[],"blog_post_summary":"<p>Trying to pick up the scent.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts\/106689","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/users\/1069"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/comments?post=106689"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts\/106689\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/media\/111744"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/media?parent=106689"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/categories?post=106689"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/tags?post=106689"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}