The Old New Thing

Using the "gu" debugger command to find the infinite loop

Somebody says, "Your program is consuming 100% CPU" and hands you a debug session. Usually, this happens because one thread has gotten stuck in an infinite loop. And if you're lucky it's the type of infinite loop that's easy to diagnose because it's just one function that isn't returning. (The more complicated types are where a function does ...

Identifying an object whose underlying DLL has been unloaded

Okay, so I gave it away in the title, but follow along anyway. Your program chugs along and then suddenly it crashes like this: Instantly you recognize the following: This is a virtual method call. (Call indirect through register plus offset.) — Very high confidence. The vtable is in . (That is the base register of ...

How much time does it take for a pedestrian to cross the street?

It sounds like the set-up to an old joke, but it's not. It's just one of the random bits of trivia that I wondered about. For intersections with both high pedestrian and high vehicle volumes, I was able to find the Federal Highway Administration recommendation, which is to give pedestrians a head start to allow them to cross one lane of ...

What is the underlying object behind a COM interface pointer?

When you're debugging, you might have a pointer to a COM interface and want to know what the underlying object is. Now, sometimes this trick won't work because the interface pointer actually points to a stub or proxy, but in the case where no marshalling is involved, it works great. (This technique also works for many C++ compilers for any ...

Given a choice between two options, you influence the result by adding a third, inferior, alternative

Shankar Vedantam wrote a Washington Post article and also appeared on NPR to discuss The Decoy Effect: Given a choice between two options, introducing a third, clearly inferior, option can influence your original decision. You won't pick the third option, but a clever choice of the bad third option can sway the decision toward either of ...

Psychic debugging: When reading unfamiliar code, assume it's mostly correct

You may be called in to study a problem in code you've never seen before or be asked to look over a proposed change to some code you've never seen before. When this happens, you have to take shortcuts in your analysis because following every function call to the bottom would not only take far too much time, but also take you so far away from ...

The format of bitmap resources

The next entry in the continuing sporadic series on resource formats is the bitmap. You thought accelerator tables were simple; bitmaps are even simpler. A bitmap resource takes the same form as a file, except that there is no . That's all...