public bool OnVirtualBreakpointReached(Types.Breakpoint Breakpoint) { Debug.Log("OnVirtualBreakpointReached"); bool addedRequest = false; RequestData prevRequest = null; foreach (var virtualBP in Breakpoint.Virtual) { if (!virtualBP.IsVirtual) { continue; } var tokenInfos = Core.Compiling.ParserASM.ParseTokenInfo(virtualBP.Expression, 0, virtualBP.Expression.Length, Core.Compiling.ParserASM.m_TextCodeMappingRaw); if (Core.Compiling.ParserASM.HasError()) { Core.AddToOutput("Failed to ParseTokenInfo" + System.Environment.NewLine); continue; } int result = -1; if (!Core.Compiling.ParserASM.EvaluateTokens(-1, tokenInfos, Core.Compiling.ParserASM.m_TextCodeMappingRaw, out SymbolInfo resultSymbol)) { Core.AddToOutput("Failed to evaluate " + virtualBP.Expression + System.Environment.NewLine); continue; } result = resultSymbol.ToInt32(); if ((result < 0) || (result >= 65536)) { Core.AddToOutput("Evaluated address out of range " + result + System.Environment.NewLine); continue; } if (prevRequest != null) { prevRequest.LastInGroup = false; } int traceSize = 1; var requData = Debugger.RefreshTraceMemory(result, traceSize, virtualBP.Expression, virtualBP, Breakpoint); if (requData.Parameter2 >= 0x10000) { requData.Parameter2 = 0xffff; } prevRequest = requData; addedRequest = true; } if (!addedRequest) { // and auto-go on with debugging Debugger.Run(); return(false); } return(true); }