Отладчик уровня CIL для кода C # в Linux с моно - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть следующий код C #, который я скомпилировал в Linux с моно, и я хочу пошагово свои команды CIL. В частности, Я хочу иметь возможность проверить стек, и увидеть значения, выдвинутые и извлеченные из него.

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

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

Как я могу пошагово сгенерировать CIL-код внутри main? Вот сгенерированный 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

EDIT:

После sudo apt install sdb я подготовил простой скрипт, чтобы Я правильно понял команды, и действительно следующий скрипт выводит правильные значения для локальных переменных i и j:

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

Однако я до сих пор не могу найти эквивалент stepi GDB. То есть для перехода на уровень CIL ...

...