.net - 检测字符串

标签 .net cil instrumentation

在 C++ 时代的某个地方,我制作了一个库,它启用了计算历史的字符串表示。
具有如下数学表达式:

TScalar Compute(TScalar a, TScalar b, TScalar c)
{
 return ( a + b ) * c;
}

我可以渲染它的字符串表示:
r = Compute(VerbalScalar("a", 1), VerbalScalar("b", 2), VerbalScalar("c", 3));
Assert.AreEqual(9, r.Value);
Assert.AreEqual("(a+b)*c==(1+2)*3", r.History );

C++ 运算符重载允许用复杂的自跟踪实体替换简单类型,该实体具有对象发生的一切的内部树表示。

现在我希望对 NET 字符串有同样的可能性,只是我希望看到影响字符串的代码中所有位置的堆栈跟踪,而不是变量名。

我希望它可以与现有代码和现有编译程序集一起使用。

此外,我希望所有这些都连接到 Visual Studio 调试器中,这样我就可以设置一个断点,并查看字符串发生的所有事情。

哪种技术会允许这种事情发生?

我知道这听起来像是一个乌托邦,但我认为 Visual Studio 代码覆盖工具在检测程序集时实际上做了同样的工作。

最佳答案

好吧,有多种技术可以在这里受益。

一种是建立你自己的日志系统来跟踪你寻找的信息。该信息列表可以通过每个计算函数传递,或者“类范围”变量可以包含该信息。这是一种更多的自己动手的方法。它的水平不低。

如果你想深入挖掘字符串类,有一种方法可以反射字符串函数。这个反射器系统声称它可以与调试系统连接(尽管我没有尝试过)。您可以尝试使用 TestDriven.NET.NET Reflector .此外,如果您使用 Visual Studio 2008+ Professional 或更高版本,您应该能够直接调试到 .NET 框架本身。这将允许您查看字符串发生的情况。

如果我误解了您正在寻找的问题或信息,请告诉我。我会尽我所能提供帮助。

关于.net - 检测字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2836186/

相关文章:

java - 拦截来自特定命名空间的所有方法/构造函数/getters/setters

.net - 使用 Entity Framework 4.0,是否有代码优先数据注释可以为数据库列定义默认值?

c# - 为什么 Urlmon.dll 的 FindMimeFromData 函数会为许多文件类型返回 MIME 类型 “application/octet-stream”?

.net - VB.NET 中带有 = 的奇怪案例语句

.net - 为什么 PEVerify 说 CLR 期待静态大小数组的单维数组?

f# - F# 代码发布版本中的 NOP

c# - .net 3.5 中是否有元组之类的东西

assembly - CIL nop 操作码的用途是什么?

java - 使用 Attach Api 时出错

java - 如何使用没有进一步调用的 JVMTI 代理重新转换执行方法?