public void Serialize(string path, IEnumerable <MDbgValue> valuesList) { var values = valuesList.ToList(); CorEval eval = debugger.Processes.Active.Threads.Active.CorThread.CreateEval(); var functionName = "BigBrother.Serialization.JsonSerializer.Serialize" + (values.Count + 1); CorAppDomain appDomain = debugger.Processes.Active.Threads.Active.CorThread.AppDomain; if (serializers.Count == 0) { //Load BigBrother into the AppDomain. Then we can call BigBrother.Serialization.JsonSerializer's methods. if (useLoadFrom) { eval.NewString("BigBrother.dll"); debugger.Processes.Active.Go().WaitOne(); var evalAssemblyName = eval.Result; var fnLoad = debugger.Processes.Active.ResolveFunctionNameFromScope("System.Reflection.Assembly.LoadFrom", appDomain); eval.CallParameterizedFunction(fnLoad.CorFunction, null, new CorValue[] { evalAssemblyName }); debugger.Processes.Active.Go().WaitOne(); } else { eval.NewString("BigBrother"); debugger.Processes.Active.Go().WaitOne(); var evalAssemblyName = eval.Result; var fnLoad = debugger.Processes.Active.ResolveFunctionNameFromScope("System.Reflection.Assembly.Load", appDomain); eval.CallParameterizedFunction(fnLoad.CorFunction, null, new CorValue[] { evalAssemblyName }); debugger.Processes.Active.Go().WaitOne(); } } if (!serializers.ContainsKey(functionName)) { serializers[functionName] = debugger.Processes.Active.ResolveFunctionNameFromScope(functionName, appDomain); } eval.NewString(path); debugger.Processes.Active.Go().WaitOne(); CorValue fileName = (debugger.Processes.Active.StopReason as EvalCompleteStopReason).Eval.Result; var corValues = new List <CorValue>(); corValues.Add(fileName); corValues.AddRange(values.Select(v => v.CorValue)); eval.CallParameterizedFunction(serializers[functionName].CorFunction, corValues.Select(v => v.ExactType).ToArray(), corValues.ToArray()); debugger.Processes.Active.Go().WaitOne(); if (debugger.Processes.Active.StopReason is EvalExceptionStopReason) { var stopReason = (EvalExceptionStopReason)debugger.Processes.Active.StopReason; string message = new MDbgValue(debugger.Processes.Active, stopReason.Eval.Result).GetStringValue(true); shell.WriteLine(message); } }
public static CorValue CreateCorValue(this MDbgProcess process, string value) { CorEval eval = process.Threads.Active.CorThread.CreateEval(); eval.NewString(value); process.Go().WaitOne(); return((process.StopReason as EvalCompleteStopReason).Eval.Result); }
public CorValue CreateString(string value) { CorEval eval = process.Threads.Active.CorThread.CreateEval(); eval.NewString(value); return(GetResult()); //return ParseValue("\"" + value + "\""); }
public static CorValue create_String(this MDbgEngine engine, string stringValue) { CorEval eval = engine.corEval(); eval.NewString(stringValue); engine.goAndWait(); CorValue corValue = (engine.activeProcess().StopReason as EvalCompleteStopReason).Eval.Result; return(corValue); }