0

我目前正在为 Mono 开发调试器。因此,我正在使用具有 VirtualMachineManager 和 VirtualMachine 的 Mono.Debugger.Soft.dll。

问题是:如果我想在一个简单的程序中创建一个断点,我该怎么做?(例如 Sourceodefile:Program.cs 和 Line:17)

VirtualMachine的Instance有一个SetBreakpoint-Method,但是这个Method需要一个MethodMirror。我不清楚如何通过只知道源代码文件中的位置来获得它?

迎接克里斯蒂安

4

1 回答 1

0

你需要做的是监听 TypeLoad 事件。当您收到 TypeLoad 事件时,遍历 TypeMirror 中的所有 MethodMirror 以查找匹配的文件名和行号。

如果找到匹配项,则可以在该 MethodMirror 的 ILOffset 处设置断点。

但是,如果程序已经开始运行,您可能会遇到一个问题,即您可能错过了该方法所在的 Type 的 TypeLoad 事件。解决方案是从一开始就保留所有加载的 TypeMirror 的缓存调试程序,以便您还可以在用户尝试添加断点之前迭代已加载的类型。

您可能有兴趣知道命令行调试器已经在开发中:https ://github.com/mono/sdb

于 2014-04-19T04:04:19.313 回答