【问题标题】:I want to make my own c# debugger - how would one do that? What tools should I be using?我想制作自己的 c# 调试器 - 怎么做?我应该使用什么工具?
【发布时间】:2022-04-08 16:05:36
【问题描述】:

我有兴趣制作一个程序,该程序将采用 c# 代码并允许我逐行执行该代码 - 一个调试器。

我将如何在不编写整个 c# 编译器的情况下进行这个项目?我正在使用 Microsoft Visual Studio,但我希望我的软件尽可能独立于它们的调试器实现。

【问题讨论】:

  • 编写视觉工作室替代方案?

标签: c# architecture


【解决方案1】:

您正在寻找托管调试 API ICorDebug
您可以使用csc.exe 编译代码(这包含在标准的.Net Framework 安装中并由CSharpCodeProvider class 包装),然后执行程序集,附加调试器,并逐步执行代码。

请注意,您可能仍需要 C#解析器 来确定您在源代码中的位置。
PDB 文件将包含一些此类信息;不知道多少钱。

请注意,我们认为理所当然的 VS 调试器中的大多数功能(尤其是 Watch 窗口和可变工具提示)都需要痛苦地重新实现。 (Func-evals)

【讨论】:

  • 你不需要解析器只是为了四处走动。 PDB 文件包含有关什么文本跨度对应于什么“序列点”的所有信息。 (这与“sequence point”的 C 定义不同,因此使用引号。)如果您想要一个监视窗口、表达式评估器等,您确实需要一个解析器,但当然您只需要解析表达式。如果您决定不允许 lambda,那么这是一个非常小的要解析的子集。
  • @Eric:谢谢;我一直在想。 VS 真的不用解析器来显示断点吗?
  • 显然,您需要一个解析器来处理数据提示。
  • 调试器不需要解析代码做断点。断点完全取决于知道什么文本范围对应于什么 IL 指令范围。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2011-06-21
  • 1970-01-01
  • 2021-10-05
  • 1970-01-01
相关资源
最近更新 更多