具有Mono的Linux上C#代码的CIL级别调试器

时间:2018-09-01 14:49:53

标签: c# linux debugging mono cil

我有在Linux上使用mono编译的以下C#代码, 我想单步执行其CIL命令。特别, 我希望能够检查堆栈, 并查看推入和弹出的值。

using System;
namespace ARITH
{
    class MUL
    {
        static void Main() 
        {
            int i = 742;
            int j = 999;

            if (i*j == 15242)
            {
                Console.WriteLine("MMMM");
            }
        }
    }
}

如何在main内部单步生成的CIL代码? 这是主要函数的生成的CIL:

$ mcs main.cs
$ monodis main.exe > main.cil
$ sed -n '37,60p;61q' main.cil
    .method private static hidebysig 
           default void Main ()  cil managed 
    {
        // Method begins at RVA 0x2058
        .entrypoint
        // Code size 36 (0x24)
        .maxstack 2
        .locals init (
            int32   V_0,
            int32   V_1)
        IL_0000:  ldc.i4 742
        IL_0005:  stloc.0 
        IL_0006:  ldc.i4 999
        IL_000b:  stloc.1 
        IL_000c:  ldloc.0 
        IL_000d:  ldloc.1 
        IL_000e:  mul 
        IL_000f:  ldc.i4 15242
        IL_0014:  bne.un IL_0023

        IL_0019:  ldstr "MMMM"
        IL_001e:  call void class [mscorlib]System.Console::WriteLine(string)
        IL_0023:  ret 
    } // end of method MUL::Main

编辑:

sudo apt install sdb之后,我准备了一个简单的脚本来确保 我正确使用了命令,实际上以下脚本为局部变量ij打印了正确的值:

$ cat sdbCommands.txt
bp add func ARITH.MUL.Main
r main.exe
step
step
step
step
print i
print j
$ sdb -f sdbCommands.txt

但是,我仍然找不到gdb的stepi。也就是说,进入CIL级别...

0 个答案:

没有答案