This is going to be a little vague I'm afraid as it's hard for me to provide
explicit details without a vast quantity of extra information.
I've recently changed compiler from .NET 2002 to .NET 2003. I have a fairly
complicated application, which is an ISAPI extension that relies on several
other rather large projects (Xalan, Xerces, ICU, boost). At some point, i'm
at the bottom of a pretty deep call stack, and I throw an exception which
travels up a lot of it.
It seems that in one particular module, a couple of the functions don't
manage to unwind the call stack properly -- it always crashes in either of
these two functions during the unwind sequence. It's 100% reproducible with
.NET 2003 and 100% not reproducible with .NET 2002, and depending on how
I've been tinkering with the code, always crashes in the same place. I've
tried sprinkling some extra try () { } catch (...) { throw; } blocks around
various parts of these functions. The result is that I can make the problem
go away, presumably by generating different unwind code. Oh, and this only
happens with a release build.
Normally I'd claim responsibility for mashing memory rather than pointing at
the compiler, but in the case, the application (and those things that it
relies on) have been proved to be very stable. I can also make this happen
with a wide variety of initial conditions (effectively doing things that
would drastically change the pattern of memory allocations up to that
point), pageheap /full doesn't spot anything, and if I _don't_ throw the
exception, then things all work as expected, even to the point of being able
to conduct stress tests that previously passed.
I realise that this is a bit of a long shot, but if anyone could offer any
advice on what to try or look for to be certain as to what is going on that
would be great. The application is open source, so if anyone has a great
deal of spare time then it should be possible to recreate it locally.
I'm out of ideas other than reading the compiler generated assembly at the
moment (which isn't an easy task as my asm is a bit rusty these days). If
it comes to it, I guess I'll have to drop back a compiler version, which
would be a pity.
Thanks,
Mark