我正在为Mono开发调试器。因此我使用的是具有VirtualMachineManager和VirtualMachine的Mono.Debugger.Soft.dll。
问题是:如果我想在一个简单的程序中创建断点,我该怎么做? (例如Sourceodefile:Program.cs和Line:17)
VirtualMachine的实例具有SetBreakpoint-Method,但此方法需要MethodMirror。我不清楚如何只知道sourcecode-File中的位置?
招呼 基督教
答案 0 :(得分:0)
您需要做的是侦听TypeLoad事件。获取TypeLoad事件时,迭代TypeMirror中的所有MethodMirrors,查找匹配的文件名和行号。
如果找到匹配项,则可以在ILOffset上的MethodMirror上设置断点。
但是,如果程序已经开始运行,则可能会遇到问题,因为您可能错过了该方法所存在的Type的TypeLoad事件。解决方法是保留所有已加载的TypeMirrors的缓存调试程序的开始,以便您也可以迭代在用户尝试添加所述断点之前已加载的类型。
您可能有兴趣知道命令行调试器已在开发中:https://github.com/mono/sdb