相关疑难解决方法(0)

在调试器中正确地使.NET语言步进

首先,我为这个问题的长度道歉.

我是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)

.net debugging clr visual-studio-2010 visual-studio

134
推荐指数
1
解决办法
3703
查看次数

使CLR/.NET语言可调试

有什么资源可以使CLR/.NET语言可调试?我正在开发一个ActionScript 3到IL编译器,它使用DLR CallSites和CallSiteBinders来处理静态编程语言的动态方面.我正在寻找有关将发出的IL映射返回源代码的任何信息,我也想知道如何使动态调用站点也能映射回来.

所以这最终有两个问题:

  • 如何使IL可调试?
  • 如何使DLR呼叫站点可调试?

任何帮助将不胜感激!

我正在寻找的"debuggabilty"

在附加的Visual Studio实例中:

  • 单步执行代码
  • 查看当地人
  • 查看堆栈跟踪

compiler-construction debugging cil dynamic-language-runtime dynamic

19
推荐指数
1
解决办法
1147
查看次数