Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在visualstudio中通过中间语言(IL)和C进行同步调试_C#_Visual Studio 2010_Debugging_Cil - Fatal编程技术网

C# 在visualstudio中通过中间语言(IL)和C进行同步调试

C# 在visualstudio中通过中间语言(IL)和C进行同步调试,c#,visual-studio-2010,debugging,cil,C#,Visual Studio 2010,Debugging,Cil,我正在寻找VisualStudio的一个扩展,在调试模式下,可以单步通过C语言以外的中间语言 我不是在寻找调试托管和非托管代码的解决方案。您的目的是什么?您的IL是由C编译器生成的还是在运行时动态生成的?如果是前者,您可以使用通过ilasm重新编译二进制文件的技巧 像平常一样编译C代码。它是否优化并不重要,但您必须指定编译选项以生成完整的PDB符号。 使用ildasm将二进制文件转换为.il文件。它是菜单中的选项转储。 重新编译.il文件以获得新的二进制文件和新的符号 ilasm.il[/exe

我正在寻找VisualStudio的一个扩展,在调试模式下,可以单步通过C语言以外的中间语言


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

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

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

ilasm.il[/exe |/dll]/debug

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


对于动态生成的IL,我只需要使用。它可以转储IL并逐步执行,但需要一点时间才能习惯。

我认为这里不需要外部反汇编程序。当您在VS 2010(尽管不是Express)中调试时,您可以右键单击“代码”窗口并选择“转到反汇编”以逐步完成IL代码。这就是你要找的吗?阅读更多

尽管严格来说并不是OP要求的Visual Studio扩展,但现在有了一种更好的方法,可以使用一个全面、独立、开源的.NET调试工具来实现这一点。这个工具实际上不仅仅是调试;例如,它允许直接编辑.NET和本机文件程序集,消除混淆,浏览和修改原始的托管和本机标题、内容、资源、BAML和元数据,以及我可能没有发现的更多内容


出于本页讨论的目的,请务必查看dnSpy项目的部分。完全按照OP的要求,这是一个实现IL解释器的库,用于模拟IL代码的假装执行,与调试器的实际本机指令单步执行并行,以显示逻辑IL执行堆栈的状态。如果需要的话,我相信调试器中也内置了一些优秀的x86/x64反汇编呈现。感谢这款tour de force应用程序的开发人员。

您将很难找到它。机器代码回IL的映射是脆弱的,并且高度依赖于抖动。如果可以的话,这样一个选项的凉爽度有不止一个+1。你能更具体地说明选项2吗。选择合适的选项是什么意思?另一种在vs2017调试器中无缝地从C步进IL并返回的方法是使用link.exe/LTCG选项。我用最新的Roslyn和ILAsm实现了这一点,不需要ILDasm往返。现在最好是一个调试器插件,它在您单步执行IL时显示CIL执行堆栈的模拟。有人知道有没有这样的事吗?