Shovel.Vm.Vm.WriteStackTrace C# (CSharp) Метод

WriteStackTrace() статический приватный Метод

static private WriteStackTrace ( StringBuilder sb ) : void
sb StringBuilder
Результат void
        void WriteStackTrace(StringBuilder sb)
        {
            int? startPos, endPos;
            this.FindStartEndPos (out startPos, out endPos);
            this.PrintLineFor (sb, this.programCounter, startPos, endPos);
            for (var i = this.stack.Count - 1; i >= 0; i--) {
                if (this.stack.Storage [i].Kind == Value.Kinds.ReturnAddress) {
                    var ra = this.stack.Storage [i].ReturnAddressValue;
                    var pc = ra.ProgramCounter;
                    var callSite = this.bytecode [pc - 1];
                    this.PrintLineFor (sb, pc, callSite.StartPos, callSite.EndPos);
                }
            }
        }

Usage Example

Пример #1
0
 static void HandleContext(Vm vm)
 {
     var stackTraceSb = new StringBuilder ();
     vm.WriteStackTrace (stackTraceSb);
     var stackTrace = stackTraceSb.ToString ();
     var currentEnvironmentSb = new StringBuilder ();
     vm.WriteCurrentEnvironment (currentEnvironmentSb);
     var currentEnvironment = currentEnvironmentSb.ToString ();
     var result = new HashInstance ();
     result.Add (Value.Make ("stack"), Value.Make (stackTrace));
     result.Add (Value.Make ("environment"), Value.Make (currentEnvironment));
     vm.IncrementCells (6 + stackTrace.Length + currentEnvironment.Length);
     vm.stack.Push (Value.Make (result));
     vm.programCounter ++;
     return;
 }
Vm