I completely agree with that. I think we should add a method GetStackTrace() 
that returns an instance of some StackTrace class, which is an array of 
StackFrames, where StackFrame is some struct/class that contains method name, 
file name and line number.

Tomas

From: ironruby-core-boun...@rubyforge.org 
[mailto:ironruby-core-boun...@rubyforge.org] On Behalf Of Meinrad Recheis
Sent: Thursday, February 19, 2009 1:06 AM
To: ironruby-core@rubyforge.org
Subject: Re: [Ironruby-core] hosting: howto get the nice ruby backtrace on 
exception thrown from ruby?

Thanks Thomas, thats very good. As for a suggestion about ExceptionService 
features: It would be quite useful to retrieve the exception backtrace as 
string[] in order to be able format it to one's needs. For instance, I like 
using the VisualStudio error parser to be able to jump from the backtrace in 
the output right into the right line in the source file (see my blog post: 
http://www.eqqon.com/index.php/Navigating_in_Exception_Stack_Traces_in_Visual_C-Sharp).
 To do that, currently, I would need to parse the formatted backtrace and 
re-format it. No big deal. Just would be nice to have.

Cheers,
-- henon

On Thu, Feb 19, 2009 at 3:30 AM, Tomas Matousek 
<tomas.matou...@microsoft.com<mailto:tomas.matou...@microsoft.com>> wrote:

You can use ExceptionService:



        var engine = Ruby.CreateEngine();

        try {

            engine.Execute(@"

def foo

  goo

end



def goo

  raise 'hello'

end



foo

");

        } catch (Exception e) {

            var exceptionService = engine.GetService<ExceptionOperations>();

            string message, typeName;

            exceptionService.GetExceptionMessage(e, out message, out typeName);

            Console.WriteLine(message);

            Console.WriteLine(typeName);

            Console.WriteLine(exceptionService.FormatException(e));

        }



The current implementation is not ideal. If you're missing some features on the 
service let us know. We might consider adding them.



Tomas



From: 
ironruby-core-boun...@rubyforge.org<mailto:ironruby-core-boun...@rubyforge.org> 
[mailto:ironruby-core-boun...@rubyforge.org<mailto:ironruby-core-boun...@rubyforge.org>]
 On Behalf Of Meinrad Recheis
Sent: Wednesday, February 18, 2009 1:25 AM
To: ironruby-core
Subject: Re: [Ironruby-core] hosting: howto get the nice ruby backtrace on 
exception thrown from ruby?



I've given it some thought. I would like to avoid wrapping the code in "begin - 
rescue" and instead catch the exception in c#. Then just send the ruby methods 
"message" and "backtrace" to the Ruby-exception-object from C#. How would that 
be done?
Any other hints?

-- Henon

On Tue, Feb 17, 2009 at 11:36 PM, Meinrad Recheis 
<meinrad.rech...@gmail.com<mailto:meinrad.rech...@gmail.com>> wrote:

hello,

I am now currently using this ugly hack to get a reasonable (let's say user 
friendly) exception backtrace from an error in executed code:

        public object Execute(string code, ScriptScope scope)

        {

            code = @"begin

_=(

"+code+@"

)

rescue Exception

self.__message__=$!.message.to_clr_string

self.__backtrace__ = $!.backtrace

throw

end";

            object result = null;

            try

            {

                LogManager.GetLogger("Ruby").Debug("\r\n" + code);

                result = m_engine.Execute(code, scope);



            }

            catch (Exception e)

            {

                var backtrace = scope.GetVariable<RubyArray>("__backtrace__");

                string msg = scope.GetVariable<string>("__message__") +"\r\n" + 
string.Join("\r\n", backtrace.Select(s => s.ToString()).ToArray());



                LogManager.GetLogger("Ruby").Error(msg);

            }

            return result;

        }



Even though it seems to work well I am absolutely not satisfied with it. Is 
there a better way to do this?
-- henon



_______________________________________________
Ironruby-core mailing list
Ironruby-core@rubyforge.org<mailto:Ironruby-core@rubyforge.org>
http://rubyforge.org/mailman/listinfo/ironruby-core

_______________________________________________
Ironruby-core mailing list
Ironruby-core@rubyforge.org
http://rubyforge.org/mailman/listinfo/ironruby-core

Reply via email to