Esempio n. 1
0
        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);
        }
Esempio n. 3
0
        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();
        }
Esempio n. 5
0
        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);
                    }
                }
        }
Esempio n. 7
0
        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);
        }
Esempio n. 9
0
 public DebuggerClient(AsyncProtobufClient client, StoryDebugInfo debugInfo)
 {
     Client = client;
     Client.MessageReceived = this.MessageReceived;
     DebugInfo = debugInfo;
 }
Esempio n. 10
0
 public StackTracePrinter(StoryDebugInfo debugInfo, ValueFormatter formatter)
 {
     DebugInfo = debugInfo;
     Formatter = formatter;
 }
 public ValueFormatter(StoryDebugInfo debugInfo)
 {
     DebugInfo = debugInfo;
 }
Esempio n. 12
0
 public CodeLocationTranslator(StoryDebugInfo debugInfo)
 {
     DebugInfo = debugInfo;
     GoalMap   = new Dictionary <string, GoalLineMap>();
     BuildLineMap();
 }
 public DebugInfoSync(StoryDebugInfo debugInfo)
 {
     DebugInfo = debugInfo;
 }