Windows/C++: Is it possible to find the line of code where exception was thrown having “Exception Offset”

Yes, that’s possible. Start debugging with the exact same binaries as ran by your user, make sure the DLL is loaded and you’ve got a matching PDB file for it. Look in Debug + Windows + Modules for the DLL base address. Add the offset. Debug + Windows + Disassembly and enter the calculated address in the Address field (prefix with 0x). That shows you the exact machine code instruction that caused the exception. Right-click + Go To Source code to see the matching source code line.

While that shows you the statement, this isn’t typically good enough to diagnose the cause. The 0xc0000005 exception is an access violation, it has many possible causes. Often you don’t even get any code, the program may have jumped into oblivion due to a corrupted stack. Or the real problem is located far away, some pointer manipulation that corrupted the heap. You also typically really need a stack trace that shows you how the program ended up at the statement that bombed.

What you need is a minidump. You can easily get one from your user if she runs Vista or Win7. Start TaskMgr.exe, Processes tab, select the bombed program while it is still displaying the crash dialog. Right-click it and Create Dump File.

To make this smooth, you really want to automate this procedure. You’ll find hints in my answer in this thread.

Leave a Comment