使用mono的Linux上C#代码的CIL级调试器
我用mono在Linux上编译了以下C#代码, 我想单步执行它的CIL命令。明确地 我希望能够检查堆栈, 并查看从中推送和弹出的值使用mono的Linux上C#代码的CIL级调试器,c#,linux,debugging,mono,cil,C#,Linux,Debugging,Mono,Cil,我用mono在Linux上编译了以下C#代码, 我想单步执行它的CIL命令。明确地 我希望能够检查堆栈, 并查看从中推送和弹出的值 using System; namespace ARITH { class MUL { static void Main() { int i = 742; int j = 999; if (i*j == 15242) {
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
之后,我准备了一个简单的脚本来确保
我得到了正确的命令,实际上下面的脚本为局部变量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
然而,我仍然找不到gdb的
stepi
的等价物。也就是说,要进入CIL级别…在Windows上有很多选项(deblector、Reflector Pro、WindG/Sos等),但在Linux上最接近的选项是Mono的软调试器,否则通过GDB/LLDB进行本机调试。@sushingover您能为使用Mono的软调试器写一个简短的回答吗?还是gdb?&这里-mono--debug program.exe
还有SDB客户端-。