首先,我为这个问题的长度道歉.
我是IronScheme的作者.最近我一直在努力发出不错的调试信息,以便我可以使用'native'.NET调试器.
虽然这部分成功,但我遇到了一些问题.
第一个问题与踩踏有关.
由于Scheme是一种表达式语言,一切都倾向于用括号括起来,不像主要的.NET语言似乎是基于语句(或行).
原始代码(Scheme)看起来像:
(define (baz x)
(cond
[(null? x)
x]
[(pair? x)
(car x)]
[else
(assertion-violation #f "nooo" x)]))
Run Code Online (Sandbox Code Playgroud)
我故意在换行符上列出每个表达式.
发出的代码转换为C#(通过ILSpy),如下所示:
public static object ::baz(object x)
{
if (x == null)
{
return x;
}
if (x is Cons)
{
return Builtins.Car(x);
}
return #.ironscheme.exceptions::assertion-violation+(
RuntimeHelpers.False, "nooo", Builtins.List(x));
}
Run Code Online (Sandbox Code Playgroud)
如你所见,非常简单.
注意:如果代码在C#中转换为条件表达式(?:),那么整个过程只需要一个调试步骤,请记住这一点.
这是带有源和行号的IL输出:
.method public static object '::baz'(object x) cil managed
{
// Code size 56 (0x38)
.maxstack 6
.line 15,15 : 1,2 ''
//000014:
//000015: …Run Code Online (Sandbox Code Playgroud) 有什么资源可以使CLR/.NET语言可调试?我正在开发一个ActionScript 3到IL编译器,它使用DLR CallSites和CallSiteBinders来处理静态编程语言的动态方面.我正在寻找有关将发出的IL映射返回源代码的任何信息,我也想知道如何使动态调用站点也能映射回来.
所以这最终有两个问题:
任何帮助将不胜感激!
在附加的Visual Studio实例中:
compiler-construction debugging cil dynamic-language-runtime dynamic