public void SyncEval(enum_EVALFLAGS dwFlags = 0, DAPEvalFlags dwDAPFlags = 0) { Task eval = Task.Run(async() => { await Eval(dwFlags, dwDAPFlags); }); eval.Wait(); }
private int EvaluateSyncInternal(enum_EVALFLAGS dwFlags, DAPEvalFlags dapFlags, uint dwTimeout, IDebugEventCallback2 pExprCallback, out IDebugProperty2 ppResult) { ppResult = null; if ((dwFlags & enum_EVALFLAGS.EVAL_NOSIDEEFFECTS) != 0 && _var.IsVisualized) { IVariableInformation variable = _engine.DebuggedProcess.Natvis.Cache.Lookup(_var); if (variable == null) { ppResult = new AD7ErrorProperty(_var.Name, ResourceStrings.NoSideEffectsVisualizerMessage); } else { _var = variable; ppResult = new AD7Property(_engine, _var); } return(Constants.S_OK); } _var.SyncEval(dwFlags, dapFlags); ppResult = new AD7Property(_engine, _var); return(Constants.S_OK); }
internal async Task Eval(enum_EVALFLAGS dwFlags = 0, DAPEvalFlags dwDAPFlags = 0) { this.VerifyNotDisposed(); await _engine.UpdateRadixAsync(_engine.CurrentRadix()); // ensure the radix value is up-to-date try { string consoleCommand; if (IsConsoleExecCmd(_strippedName, out consoleCommand)) { // special case for executing raw mi commands. string consoleResults = null; consoleResults = await MIDebugCommandDispatcher.ExecuteCommand(consoleCommand, _debuggedProcess, ignoreFailures : true); Value = String.Empty; this.TypeName = null; if (!String.IsNullOrEmpty(consoleResults)) { _debuggedProcess.WriteOutput(consoleResults); } } else { bool canRunClipboardContextCommands = this._debuggedProcess.MICommandFactory.Mode == MIMode.Gdb && dwDAPFlags.HasFlag(DAPEvalFlags.CLIPBOARD_CONTEXT); int numElements = 200; if (canRunClipboardContextCommands) { string showPrintElementsResult = await MIDebugCommandDispatcher.ExecuteCommand("show print elements", _debuggedProcess, ignoreFailures : true); // Possible values for 'numElementsStr' // "Limit on string chars or array elements to print is <number>." // "Limit on string chars or array elements to print is unlimited." string numElementsStr = Regex.Match(showPrintElementsResult, @"\d+").Value; if (!string.IsNullOrEmpty(numElementsStr) && int.TryParse(numElementsStr, out numElements) && numElements != 0) { await MIDebugCommandDispatcher.ExecuteCommand("set print elements 0", _debuggedProcess, ignoreFailures : true); } } int threadId = Client.GetDebuggedThread().Id; uint frameLevel = _ctx.Level; Results results = await _engine.DebuggedProcess.MICommandFactory.VarCreate(_strippedName, threadId, frameLevel, dwFlags, ResultClass.None); if (results.ResultClass == ResultClass.done) { _internalName = results.FindString("name"); TypeName = results.TryFindString("type"); if (results.Contains("dynamic")) { IsPreformatted = true; } if (results.Contains("dynamic") && results.Contains("has_more")) { CountChildren = results.FindUint("has_more"); } else { CountChildren = results.FindUint("numchild"); } if (results.Contains("displayhint")) { DisplayHint = results.FindString("displayhint"); } if (results.Contains("attributes")) { if (results.FindString("attributes") == "noneditable") { _isReadonly = true; } _attribsFetched = true; } Value = results.TryFindString("value"); if ((Value == String.Empty || _format != null) && !string.IsNullOrEmpty(_internalName)) { if (_format != null) { await Format(); } else { results = await _engine.DebuggedProcess.MICommandFactory.VarEvaluateExpression(_internalName, ResultClass.None); if (results.ResultClass == ResultClass.done) { Value = results.FindString("value"); } else if (results.ResultClass == ResultClass.error) { SetAsError(results.FindString("msg")); } else { Debug.Fail("Unexpected format of msg from -var-evaluate-expression"); } } } } else if (results.ResultClass == ResultClass.error) { SetAsError(results.FindString("msg")); } else { Debug.Fail("Unexpected format of msg from -var-create"); } if (canRunClipboardContextCommands && numElements != 0) { await MIDebugCommandDispatcher.ExecuteCommand(string.Format(CultureInfo.InvariantCulture, "set print elements {0}", numElements), _debuggedProcess, ignoreFailures : true); } } } catch (Exception e) { if (e.InnerException != null) { e = e.InnerException; } UnexpectedMIResultException miException = e as UnexpectedMIResultException; string message; if (miException != null && miException.MIError != null) { message = miException.MIError; } else { message = e.Message; } SetAsError(string.Format(ResourceStrings.Failed_ExecCommandError, message)); } }
public void SyncEval(enum_EVALFLAGS dwFlags, DAPEvalFlags dwDAPFlags) => Parent.SyncEval(dwFlags, dwDAPFlags);
int IDebugExpressionDAP.EvaluateSync(enum_EVALFLAGS dwFlags, DAPEvalFlags dapFlags, uint dwTimeout, IDebugEventCallback2 pExprCallback, out IDebugProperty2 ppResult) { return(EvaluateSyncInternal(dwFlags, dapFlags, dwTimeout, pExprCallback, out ppResult)); }