diff --git a/IDE/src/ui/ConditionDialog.bf b/IDE/src/ui/ConditionDialog.bf index 5d215407..f769ab05 100644 --- a/IDE/src/ui/ConditionDialog.bf +++ b/IDE/src/ui/ConditionDialog.bf @@ -197,7 +197,7 @@ namespace IDE.ui exprPre.Append("@C:"); else exprPre.Append("@Beef:"); - exprPost.AppendF(",_=({0}*)0x", addrVal); + exprPost.AppendF(",_=*({0}*)0x", addrVal); mBreakpoint.mMemoryAddress.ToString(exprPost, "X", null); exprPost.Append("L"); } diff --git a/IDE/src/ui/WatchPanel.bf b/IDE/src/ui/WatchPanel.bf index 34ac0560..a00b3bce 100644 --- a/IDE/src/ui/WatchPanel.bf +++ b/IDE/src/ui/WatchPanel.bf @@ -2705,6 +2705,21 @@ namespace IDE.ui } } }); + + let configItem = menu.AddItem("Configure Breakpoint"); + configItem.mOnMenuItemSelected.Add(new (evt) => + { + for (int breakIdx < gApp.mDebugger.mBreakpointList.Count) + { + let breakpoint = gApp.mDebugger.mBreakpointList[breakIdx]; + if (breakpoint.mMemoryAddress == watchEntry.mMemoryBreakpointAddr) + { + ConditionDialog dialog = new ConditionDialog(); + dialog.Init(breakpoint); + dialog.PopupWindow(listView.mWidgetWindow); + } + } + }); } if (watchEntry.mResultType == .Pointer) diff --git a/IDEHelper/DbgExprEvaluator.cpp b/IDEHelper/DbgExprEvaluator.cpp index e3e41498..2523d3aa 100644 --- a/IDEHelper/DbgExprEvaluator.cpp +++ b/IDEHelper/DbgExprEvaluator.cpp @@ -3628,8 +3628,17 @@ DbgTypedValue DbgExprEvaluator::LookupIdentifier(BfAstNode* identifierNode, bool return GetThis(); if (findName == "_") { - if (mSubjectValue) + if (mSubjectValue) + { + if (mSubjectValue.mSrcAddress != 0) + { + auto refreshVal = ReadTypedValue(mSubjectValue.mType, mSubjectValue.mSrcAddress, DbgAddrType_Target); + if (refreshVal) + mSubjectValue = refreshVal; + } return mSubjectValue; + } + if (!mSubjectExpr.IsEmpty()) { DwFormatInfo formatInfo; @@ -5795,7 +5804,10 @@ void DbgExprEvaluator::PerformBinaryOperation(ASTREF(BfExpression*)& leftExpress { if ((binaryOp != BfBinaryOp_Equality) && (binaryOp != BfBinaryOp_InEquality)) { - Fail("Invalid operation for objects", opToken); + if (resultType->IsPointer()) + Fail("Invalid operation for pointers", opToken); + else + Fail("Invalid operation for objects", opToken); return; }