[Mono-list] Re: Seeing Values of Unwound Stack variables
at Exception Handler
Jonathan Gilbert
2a5gjx302@sneakemail.com
Fri, 24 Dec 2004 00:53:13 -0500
I'm not sure about "custom stack unwinder notification", but it seems to
me, the pattern you've written there, that is:
bool finished = false;
try
{
...
finished = true;
}
finally
{
if (!finished)
{
...
}
}
..is equivalent to this:
try
{
...
}
catch
{
...
throw;
}
Don't know if this helps at all, but it is the behaviour you described with
the try/finally. The 'finally' clause always runs when code flow exits the
scope; this is why the flag is required. The flag ensures that the code
runs only when code flow did not leave the 'try' block "normally" -- that
is, when an exception occurred. This is the situation that the 'catch'
block runs under. Also note, rethrowing the exception will not interfere
with the stack trace; that is generated when the exception is constructed
("new Exception(...)"), and not when it is 'throw'n.
Jonathan Gilbert
At 01:05 PM 20/12/2004 -0500, TB wrote:
>I forgot to mention -- please reply directly to me.
>I'm not subscribed.
>
>On Mon, Dec 20, 2004 at 01:03:22PM -0500, TB wrote:
>> With the Microsoft CLR one can use WinDBG !clrstack to view the CLR
>> stack when an UHHANDLED exception is thrown. But when you have an
>> try..catch exception block active, the stack will be unwound. The
>> Exception.StackTrace property gives you the *names* of the methods
>> that were unwound, but not the locals or function parameters -- the
>> stack variables.
>>
>> Does Mono allow you to register a "custom stack unwinder notification"
>> function? I could do it myself by adding the following code to every
>> single method body:
>>
>> function MayThrowException (int arg1, int arg2, intarg3) {
>> bool completed = false;
>> try {
>> // real method body
>> completed = true;
>> } finally {
>> if (!completed) {
>> //stash arg1, args2, arg3 on heap for later perusal
>> //possibly serialize them
>> //you can use reflection to enumerate all method
>> //arguments, can you use serialization to enumerate
>> //the locals?
>> }
>> }
>> }
>>
>> The compiler could output this prolog/epilogue code
>> for each method.
>>
>> But if the Runtime called back some code before it
>> unwinds the stack that would be best. It would help
>> to debug.
>_______________________________________________
>Mono-list maillist - Mono-list@lists.ximian.com
>http://lists.ximian.com/mailman/listinfo/mono-list
>
>