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: [email protected]
[mailto:[email protected]] 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
<[email protected]<mailto:[email protected]>> 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
[email protected]
http://rubyforge.org/mailman/listinfo/ironruby-core