代码之家  ›  专栏  ›  技术社区  ›  ConsultUtah

异常后C#中的局部变量值?

  •  9
  • ConsultUtah  · 技术社区  · 14 年前

    红门有一个 error reporting tool 这说明它可以

    当它崩溃时(不仅仅是堆栈 trace),包括 低效的电子邮件会话 最终用户。”

    有人有什么想法吗?

    8 回复  |  直到 14 年前
        1
  •  17
  •   ConsultUtah    14 年前

    看起来,它们所做的是重写程序集,并在每个方法中添加try/catch块(您明确排除的方法除外)。catch获取所有局部变量的值。如果我有密码:

    private int Add(int o1, int o2) {
      return o1+o2;
    }
    

    它将修改为:

    private int Add(int o1, int o2) {
      int ret = 0;
      try {
        ret = o1+o2;
      }
      catch (Exception e) {
        SpecialExceptionHandler.HandleException(e, new object[]{o1, o2});
      }
      return ret;
    }
    

    相当棘手。。。因此,它将显示异常发生时参数和局部变量的值。

        2
  •  5
  •   Jon Skeet    14 年前

    嗯,上面写着什么 地方的 变量?你引用的那篇文章里没有这么说。我怀疑它会进行堆转储,让您可以检查静态变量和实例变量。

    话虽如此,我想他们 能够

    你自己试过这个产品吗?你能链接到它吗?

        3
  •  2
  •   Henk Holterman    14 年前

    他们不是在谈论一个例外 处理程序 但是关于某件事,在这一点上进行调解是一个例外 抛出 .

        4
  •  0
  •   JSBÕ±Õ¸Õ£Õ¹    14 年前

    它们可能正在进行崩溃转储,包括整个程序内存和所有寄存器值,以及大量的元数据。这确实能让你恢复健康 一切

        5
  •  0
  •   jaltiere    14 年前

    我不确定RedGate是如何做到这一点的,但是VisualStudio2010引入了一个名为 IntelliTrace 有相似之处……也许就是基于这个?

        7
  •  0
  •   Qwertie    14 年前

    SOS 对于.NET程序。也许RedGate正在使用这种调试api来检查局部变量和其他程序“根”。理论上,当检测到异常/崩溃未被处理时,它可以使用调试api来捕获存在的所有对象的状态。

        8
  •  -2
  •   ChrisW    14 年前

    局部变量存储在堆栈上(与参数存储的方式相同)。