diff --git a/VisualPascalABCNETLinux/DockContent/DebugWatchListWindowForm.cs b/VisualPascalABCNETLinux/DockContent/DebugWatchListWindowForm.cs index 39990fdd9..7eb266505 100644 --- a/VisualPascalABCNETLinux/DockContent/DebugWatchListWindowForm.cs +++ b/VisualPascalABCNETLinux/DockContent/DebugWatchListWindowForm.cs @@ -108,6 +108,7 @@ namespace VisualPascalABC if ((this.watchList.Rows[i] as AdvancedDataGridView.TreeGridNode).UserRow) { string s = this.watchList.Rows[i].Cells[0].Value as string; + RetValue rv = WorkbenchServiceFactory.DebuggerManager.Evaluate(s); if (rv.syn_err) { @@ -128,8 +129,8 @@ namespace VisualPascalABC ValueItem vi = new ValueItem(rv.monoValue, s, WorkbenchServiceFactory.DebuggerManager.evaluator.declaringType); (this.watchList.Rows[i] as AdvancedDataGridView.TreeGridNode)._grid = this.watchList; (this.watchList.Rows[i] as AdvancedDataGridView.TreeGridNode).Content = vi; - this.watchList.Rows[i].Cells[1].Value = WorkbenchServiceFactory.DebuggerManager.MakeValueView(rv.obj_val);//rv.obj_val.AsString; - this.watchList.Rows[i].Cells[2].Value = DebugUtils.WrapTypeName(rv.obj_val.Type); + this.watchList.Rows[i].Cells[1].Value = rv.monoValue.Value;//rv.obj_val.AsString; + this.watchList.Rows[i].Cells[2].Value = rv.monoValue.TypeName; this.watchList.InvalidateCell(0, i); } catch (System.Exception e) diff --git a/VisualPascalABCNETLinux/IB/Debugger/Debugger.cs b/VisualPascalABCNETLinux/IB/Debugger/Debugger.cs index 17fbeb550..4122f718c 100644 --- a/VisualPascalABCNETLinux/IB/Debugger/Debugger.cs +++ b/VisualPascalABCNETLinux/IB/Debugger/Debugger.cs @@ -870,9 +870,10 @@ namespace VisualPascalABC /// public RetValue Evaluate(string expr) { - if (evaluator != null) - return evaluator.Evaluate(expr, false); - else return new RetValue(); + if (evaluator == null) + evaluator = new ExpressionEvaluator(workbench.VisualEnvironmentCompiler, FileName); + evaluator.SetCurrentMonoFrame(monoDebuggerSession, stackFrame); + return evaluator.Evaluate(expr, false); } private NamedValue GetNullBasedArray(Value val) @@ -994,6 +995,7 @@ namespace VisualPascalABC private delegate void JumpToLineDelegate(int line); private delegate void JumpToLinePreActionsDelegate(); + private delegate void SetDebugTabsVisibleInvokeDelegate(bool value); private delegate void SetCurrentLineBookmarkDelegate(string fileName, IDocument document, int makerStartLine, int makerStartColumn, int makerEndLine, int makerEndColumn); void JumpToLineInvoke(int line) @@ -1012,6 +1014,12 @@ namespace VisualPascalABC CurrentLineBookmark.SetPosition(fileName, document, makerStartLine, makerStartColumn, makerEndLine, makerEndColumn); } + void SetDebugTabsVisibleInvoke(bool value) + { + workbench.WidgetController.SetDebugTabsVisible(true); + workbench.WidgetController.SetAddExprMenuVisible(true); + } + /// /// Перейти к следующей строке при отладке /// @@ -1031,8 +1039,7 @@ namespace VisualPascalABC if (!ShowDebugTabs)//esli eshe ne pokazany watch i lokal, pokazyvaem { ShowDebugTabs = true; - workbench.WidgetController.SetDebugTabsVisible(true); - workbench.WidgetController.SetAddExprMenuVisible(true); + workbench.MainForm.Invoke(new SetDebugTabsVisibleInvokeDelegate(SetDebugTabsVisibleInvoke), true); } if (stackFrame.SourceLocation.Line == 0xFFFFFF) { @@ -1090,6 +1097,8 @@ namespace VisualPascalABC bool in_comm = false; bool beg = false; bool in_str = false; + Console.WriteLine("2 jump to " + stackFrame.SourceLocation.FileName + ":" + stackFrame.SourceLocation.Line); + for (int i = 0; i < lseg.Words.Count; i++) { if (lseg.Words[i].Type == TextWordType.Word) diff --git a/VisualPascalABCNETLinux/IB/Debugger/ExpressionEvaluation.cs b/VisualPascalABCNETLinux/IB/Debugger/ExpressionEvaluation.cs index c25c300c4..0b59cd192 100644 --- a/VisualPascalABCNETLinux/IB/Debugger/ExpressionEvaluation.cs +++ b/VisualPascalABCNETLinux/IB/Debugger/ExpressionEvaluation.cs @@ -280,8 +280,10 @@ namespace VisualPascalABC else e = vec.StandartCompiler.ParsersController.GetExpression(fileName, expr, Errors, Warnings); RetValue res = new RetValue(); res.syn_err = false; + try { + if (e != null && Errors.Count == 0) { e.visit(this); diff --git a/VisualPascalABCNETLinux/Workbench/WindowOperations.cs b/VisualPascalABCNETLinux/Workbench/WindowOperations.cs index 29ec77b50..13b090329 100644 --- a/VisualPascalABCNETLinux/Workbench/WindowOperations.cs +++ b/VisualPascalABCNETLinux/Workbench/WindowOperations.cs @@ -343,9 +343,11 @@ namespace VisualPascalABC HideContent(DisassemblyWindow); AddDebugVariablesListWindow(); HideContent(DebugVariablesListWindow); + AddDebugWatchListWindow(); + HideContent(DebugWatchListWindow); /*AddImmediateWindow(); - //AddDebugWatchListWindow(); + if (!Tools.IsUnix()) { AddProjectExplorerWindow();