Debugging 如何使用lldb+;单声道

Debugging 如何使用lldb+;单声道,debugging,mono,lldb,Debugging,Mono,Lldb,我有以下C#程序(test.cs),我想调试它: using System; using System.Collections.Generic; class Program { static void Main(string[] args) { Console.WriteLine( "Hello, World!" ); List<int> list = new List<int>(); list.Add(1

我有以下C#程序(test.cs),我想调试它:

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine( "Hello, World!" );
        List<int> list = new List<int>();
        list.Add(123);
        list.Add(234);
        list.Add(345);
        list.Add(456);
        int number = 4;
        ++number;
        Console.WriteLine(" number " + number); // <--- L:16 I want to set a breakpoint here :)
        Console.WriteLine("Number of elements" + list.Count);
        foreach (Object obj in list)
        {
            Console.WriteLine(" " + obj);
        }
        Console.WriteLine("Bye");
    }
}
我尝试过使用GBD as,但更糟糕的是,显然存在这样的情况,除非使用软调试器,否则无法进行调试(这正是我想要避免的。MonoDevelop调试器非常不稳定/不可靠/缓慢)。这是。一点运气都没有


谢谢你的帮助

mono不是你的语言的解释器吗,
test.exe不是二进制文件吗?lldb只知道
mono
——您尝试设置的任何断点都将位于
mono
解释器中。e、 g.如果您正在调试与
mono
本身有关的问题

这是一个足够独特的环境,您需要进行一些分析,以了解lldb看到了什么。你买什么

(lldb) image list test.exe
??当然,如果你愿意的话

(lldb) im li mono
您将看到mono列表——因为这是lldb知道的二进制文件。(您可以使用普通的
图像列表
aka
imli
查看lldb知道的所有二进制文件)

您可以使用命令行要求lldb根据源文件名列出所有行表条目

(lldb) target modules dump line-table test.cs
如果lldb有
test.cs
的任何调试信息,您将看到一个行表。如果没有行表,文件和行断点(
b test.cs:16
)将无法工作


无论如何,我认为尝试使用lldb(或gdb)调试C#程序是行不通的。您可能需要使用mono运行时本身的一些功能来设置断点和检查程序状态。

mono不是您语言的解释器吗?
test.exe是二进制文件吗?lldb只知道
mono
——您尝试设置的任何断点都将位于
mono
解释器中。e、 g.如果您正在调试与
mono
本身有关的问题

这是一个足够独特的环境,您需要进行一些分析,以了解lldb看到了什么。你买什么

(lldb) image list test.exe
??当然,如果你愿意的话

(lldb) im li mono
您将看到mono列表——因为这是lldb知道的二进制文件。(您可以使用普通的
图像列表
aka
imli
查看lldb知道的所有二进制文件)

您可以使用命令行要求lldb根据源文件名列出所有行表条目

(lldb) target modules dump line-table test.cs
如果lldb有
test.cs
的任何调试信息,您将看到一个行表。如果没有行表,文件和行断点(
b test.cs:16
)将无法工作


无论如何,我认为尝试使用lldb(或gdb)调试C#程序是行不通的。您可能需要使用mono运行时本身的一些功能来设置断点和检查程序状态。

mono不是您语言的解释器吗?
test.exe是二进制文件吗?lldb只知道
mono
——您尝试设置的任何断点都将位于
mono
解释器中。e、 g.如果您正在调试与
mono
本身有关的问题

这是一个足够独特的环境,您需要进行一些分析,以了解lldb看到了什么。你买什么

(lldb) image list test.exe
??当然,如果你愿意的话

(lldb) im li mono
您将看到mono列表——因为这是lldb知道的二进制文件。(您可以使用普通的
图像列表
aka
imli
查看lldb知道的所有二进制文件)

您可以使用命令行要求lldb根据源文件名列出所有行表条目

(lldb) target modules dump line-table test.cs
如果lldb有
test.cs
的任何调试信息,您将看到一个行表。如果没有行表,文件和行断点(
b test.cs:16
)将无法工作


无论如何,我认为尝试使用lldb(或gdb)调试C#程序是行不通的。您可能需要使用mono运行时本身的一些功能来设置断点和检查程序状态。

mono不是您语言的解释器吗?
test.exe是二进制文件吗?lldb只知道
mono
——您尝试设置的任何断点都将位于
mono
解释器中。e、 g.如果您正在调试与
mono
本身有关的问题

这是一个足够独特的环境,您需要进行一些分析,以了解lldb看到了什么。你买什么

(lldb) image list test.exe
??当然,如果你愿意的话

(lldb) im li mono
您将看到mono列表——因为这是lldb知道的二进制文件。(您可以使用普通的
图像列表
aka
imli
查看lldb知道的所有二进制文件)

您可以使用命令行要求lldb根据源文件名列出所有行表条目

(lldb) target modules dump line-table test.cs
如果lldb有
test.cs
的任何调试信息,您将看到一个行表。如果没有行表,文件和行断点(
b test.cs:16
)将无法工作


无论如何,我认为尝试使用lldb(或gdb)调试C#程序是行不通的。您可能需要使用mono运行时本身的一些功能来设置断点和检查程序状态。

这似乎会受到mono执行环境工作方式的严重影响。你的进程在mono中作为动态库加载吗?mono正在进行.net字节码的JIT编译吗?假设是前者,test.exe是否有DWARF格式的调试信息?我想是后者。JIT是默认值。当我执行mcs-debug test.cs时,除了test.exe之外,还创建了test.exe.mdb。这意味着要在调试会话中使用。我想知道如何在LLDBA中使用这样的文件,这取决于MDB格式。。如果它是微软专有的格式,那么LLDB很可能没有解码器。如果OTOH是一种开源格式,有人有足够的动力可以为它编写一个解码器。但这仍然不能给你完整的体验。。例如,LLDB不理解C#作为一种编写表达式的语言,因此您会发现自己在这方面受到严重限制