c# - 在 Visual Studio 中通过中间语言 (IL) 和 C# 同时进行调试

标签 c# visual-studio-2010 debugging cil

我正在寻找 Visual Studio 的扩展,在 Debug模式下可以单步执行除 C# 之外的中间语言。

我不是在寻找调试托管和非托管代码的解决方案。

最佳答案

你的目的是什么?您的 IL 是由 C# 编译器生成的还是在运行时动态生成的?如果是前者,您可以使用一个技巧,通过 ilasm 重新编译您的二进制文件。

  1. 像往常一样编译 C# 代码。优化与否无关紧要,但您必须指定编译选项以生成完整的 PDB 符号。
  2. 使用 ildasm 将您的二进制文件转换为 .il 文件。它是菜单中的转储选项。
  3. 重新编译 .il 文件以获得新的二进制文件(和新的符号)

    ilasm .il [/exe|/dll]/调试

  4. 现在,在调试该特定程序集时,您将看到 IL 代码而不是 C# 代码。如果您在第 2 步中选择了适当的选项,您还将看到来自原始 C# 文件的匹配行。

对于动态生成的 IL,我会简单地使用 WinDbg with SOS extension .它可以转储 IL 并单步执行它,但需要一点时间才能习惯。

关于c# - 在 Visual Studio 中通过中间语言 (IL) 和 C# 同时进行调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5292606/

相关文章:

visual-studio-2010 - Visual Studio 2010 调试器 - 尽管条件为 false,但仍会进入 "if"语句

c# - 如何配置 c# Web 浏览器搜索对话框行为?

c# - 使用不同的参数重新加载表单 c#

javascript - 从发布的 JavaScript 中删除 console.log 和其他调试代码的最佳实践?

c# - LINQ 返回数组,而不是列表对象的集合

c# - 隐藏基类中的成员在代码中是否是一种不好的味道?

c# - 非托管 C++ Win32 API 或 C#?

c - 什么?在 gdb backtrace 中意味着以及如何获得实际的堆栈帧?

python - 无法附加到调试器中的进程

c# - UITextField.text 的双向绑定(bind)不更新