2014-04-18 24 views
0

我目前正在爲Mono開發一個調試器。因此我使用的是具有VirtualMachineManager和VirtualMachine的Mono.Debugger.Soft.dll。單聲道軟調試器 - 添加斷點

問題是:如果我想在一個簡單的程序中創建一個斷點,我該怎麼做? (例如Sourceodefile:Program.cs和Line:17)

VirtualMachine的實例有一個SetBreakpoint-Method,但此方法需要一個MethodMirror。對於我來說,我不清楚如何知道只有源代碼文件中的位置?

迎接 基督教

回答

0

你所要做的是傾聽TypeLoad事件。獲取TypeLoad事件時,遍歷TypeMirror中的所有MethodMirrors,以查找匹配的文件名和行號。

如果找到匹配項,則可以在ILOffset的MethodMirror上設置斷點。

但是,如果程序已經開始運行,您可能會遇到問題,因爲您可能錯過了該方法存在的Type的TypeLoad事件。解決方案是保留所有加載的TypeMirror的緩存從調試程序的一開始,您可以在用戶試圖添加所述斷點之前迭代已加載的類型。

您可能有興趣知道命令行調試器已在開發中:https://github.com/mono/sdb