【发布时间】:2012-03-25 20:13:44
【问题描述】:
我目前正在开发一种语言(外部字节码)的编译器,并且正在使用System.Reflection.Emit。
现在,当我在反射器中打开生成的程序集时,一切看起来都很好,并且它重新编译为 C# 也很好(并运行),但是当我尝试运行生成的主函数时,我得到一个 @ 987654322@:
“公共语言运行时检测到无效程序。”
可能只是一个操作码导致了问题,但是,由于该主函数使用了 100 多个操作码,我无法确定是哪个操作码导致了问题。
每个操作码都非常复杂,因此手动测试每个操作码是不行的。
有没有办法让 .NET 告诉我它在函数的哪个位置检测到无效程序?
如果没有,我可以使用其他工具来确定问题的根源吗?
【问题讨论】:
-
你试过 peverify.exe 吗?
-
这正是我想要的。事实证明,当我执行 And & Or 指令时,我并没有思考,结果是不同的分支在堆栈上留下了不同数量的对象。
标签: .net debugging compiler-construction