Debugging 如何使用lldb+;单声道
我有以下C#程序(test.cs),我想调试它: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
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知道的二进制文件。(您可以使用普通的图像列表
akaimli
查看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知道的二进制文件。(您可以使用普通的图像列表
akaimli
查看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知道的二进制文件。(您可以使用普通的图像列表
akaimli
查看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知道的二进制文件。(您可以使用普通的图像列表
akaimli
查看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#作为一种编写表达式的语言,因此您会发现自己在这方面受到严重限制