private void InitDebugger() { var debugPayload = File.ReadAllBytes(DebugInfoPath); var loader = new DebugInfoLoader(); DebugInfo = loader.Load(debugPayload); if (DebugInfo.Version != StoryDebugInfo.CurrentVersion) { throw new InvalidDataException($"Story debug info too old (found version {DebugInfo.Version}, we only support {StoryDebugInfo.CurrentVersion}). Please recompile the story."); } Formatter = new ValueFormatter(DebugInfo); TracePrinter = new StackTracePrinter(DebugInfo, Formatter); TracePrinter.ModUuid = ModUuid; if (Config != null) { TracePrinter.MergeFrames = !Config.rawFrames; } EvalResults = new EvaluationResultManager(Formatter); Evaluator = new ExpressionEvaluator(DebugInfo, Stream, DbgCli, Formatter, EvalResults); Stack = null; Stopped = false; // We're not in debug mode yet. We'll enable debugging when the story is fully synced DebuggingStory = false; }
public List <Breakpoint> DebugInfoLoaded(StoryDebugInfo debugInfo) { LocationTranslator = new CodeLocationTranslator(debugInfo); var changes = RevalidateBreakpoints(); // Sync breakpoint list to backend as the current debugger instance doesn't have // any of our breakpoints yet UpdateBreakpointsOnBackend(); return(changes); }
public DatabaseEnumerator(DebuggerClient dbgClient, DAPStream dap, StoryDebugInfo debugInfo, ValueFormatter formatter, EvaluationResultManager resultManager) { DebugInfo = debugInfo; DAP = dap; DbgClient = dbgClient; Formatter = formatter; ResultManager = resultManager; DbgClient.OnBeginDatabaseContents = this.OnBeginDatabaseContents; DbgClient.OnDatabaseRow = this.OnDatabaseRow; DbgClient.OnEndDatabaseContents = this.OnEndDatabaseContents; }
public ExpressionEvaluator(StoryDebugInfo debugInfo, DAPStream dap, DebuggerClient dbgClient, ValueFormatter formatter, EvaluationResultManager results) { DebugInfo = debugInfo; DbgClient = dbgClient; DAP = dap; DatabaseDumper = new DatabaseEnumerator(dbgClient, dap, debugInfo, formatter, results); EvalResults = results; DbgClient.OnEvaluateRow = this.OnEvaluateRow; DbgClient.OnEvaluateFinished = this.OnEvaluateFinished; MakeFunctionNameMap(); }
private void OnDebugSessionEnded() { if (DebuggingStory) { SendOutput("console", "Story unloaded - debug session terminated\r\n"); } DebuggingStory = false; Stopped = false; DebugInfo = null; Evaluator = null; EvalResults = null; TracePrinter = null; Formatter = null; var changedBps = Breakpoints.DebugInfoUnloaded(); // Notify the debugger that the status of breakpoints changed changedBps.ForEach(bp => SendBreakpoint("changed", bp)); }
public void Save(Stream stream, StoryDebugInfo debugInfo) { var msg = ToProtobuf(debugInfo); using (var ms = new MemoryStream()) using (var codedStream = new CodedOutputStream(ms)) { msg.WriteTo(codedStream); codedStream.Flush(); byte[] proto = ms.ToArray(); byte flags = BinUtils.MakeCompressionFlags(LSLib.LS.Enums.CompressionMethod.LZ4, LSLib.LS.Enums.CompressionLevel.FastCompression); byte[] compressed = BinUtils.Compress(proto, flags); stream.Write(compressed, 0, compressed.Length); using (var writer = new BinaryWriter(stream, Encoding.UTF8, true)) { writer.Write((UInt32)proto.Length); } } }
private StoryDebugInfo FromProtobuf(StoryDebugInfoMsg msg) { var debugInfo = new StoryDebugInfo(); debugInfo.Version = msg.Version; foreach (var dbMsg in msg.Databases) { var db = FromProtobuf(dbMsg); debugInfo.Databases.Add(db.Id, db); } foreach (var goalMsg in msg.Goals) { var goal = FromProtobuf(goalMsg); debugInfo.Goals.Add(goal.Id, goal); } foreach (var ruleMsg in msg.Rules) { var rule = FromProtobuf(ruleMsg); debugInfo.Rules.Add(rule.Id, rule); } foreach (var nodeMsg in msg.Nodes) { var node = FromProtobuf(nodeMsg); debugInfo.Nodes.Add(node.Id, node); } foreach (var funcMsg in msg.Functions) { var func = FromProtobuf(funcMsg); debugInfo.Functions.Add(new FunctionNameAndArity(func.Name, func.Params.Count), func); } return(debugInfo); }
private StoryDebugInfoMsg ToProtobuf(StoryDebugInfo debugInfo) { var msg = new StoryDebugInfoMsg(); msg.Version = debugInfo.Version; foreach (var db in debugInfo.Databases) { var dbMsg = ToProtobuf(db.Value); msg.Databases.Add(dbMsg); } foreach (var goal in debugInfo.Goals) { var goalMsg = ToProtobuf(goal.Value); msg.Goals.Add(goalMsg); } foreach (var rule in debugInfo.Rules) { var ruleMsg = ToProtobuf(rule.Value); msg.Rules.Add(ruleMsg); } foreach (var node in debugInfo.Nodes) { var nodeMsg = ToProtobuf(node.Value); msg.Nodes.Add(nodeMsg); } foreach (var func in debugInfo.Functions) { var funcMsg = ToProtobuf(func.Value); msg.Functions.Add(funcMsg); } return(msg); }
public DebuggerClient(AsyncProtobufClient client, StoryDebugInfo debugInfo) { Client = client; Client.MessageReceived = this.MessageReceived; DebugInfo = debugInfo; }
public StackTracePrinter(StoryDebugInfo debugInfo, ValueFormatter formatter) { DebugInfo = debugInfo; Formatter = formatter; }
public ValueFormatter(StoryDebugInfo debugInfo) { DebugInfo = debugInfo; }
public CodeLocationTranslator(StoryDebugInfo debugInfo) { DebugInfo = debugInfo; GoalMap = new Dictionary <string, GoalLineMap>(); BuildLineMap(); }
public DebugInfoSync(StoryDebugInfo debugInfo) { DebugInfo = debugInfo; }