public async void Execute(object sender, EventArgs e) { try { if (_stackDataDumpControl == null) { await package.JoinableTaskFactory.RunAsync(async() => { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); var window = await package.FindToolWindowAsync(typeof(StackDataDump), 0, true, package.DisposalToken); var windowFrame = (IVsWindowFrame)window.Frame; if (windowFrame.IsVisible() != 0) { Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(windowFrame.Show()); } var stackDataDump = window as StackDataDump; _stackDataDumpControl = stackDataDump?.Content as StackDataDumpControl; }); } _stackDataDumpControl.MainTabControl.SelectedIndex = StackDataDumpControl.LocalsTabIndex; } catch (Exception) { } }
private async Task DumpStackToCSharpCodeAsync(IList <string> chosenLocals) { if (_stackDataDumpControl == null) { await package.JoinableTaskFactory.RunAsync(async() => { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); var window = await package.FindToolWindowAsync(typeof(StackDataDump), 0, true, package.DisposalToken); var windowFrame = (IVsWindowFrame)window.Frame; if (windowFrame.IsVisible() != 0) { Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(windowFrame.Show()); } var stackDataDump = window as StackDataDump; _stackDataDumpControl = stackDataDump?.Content as StackDataDumpControl; _currentStackWrapper.RefreshCurrentLocals(_dte); await DumpStackToCSharpCodeAsync(chosenLocals); }); return; } await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); _stackDataDumpControl.ClearControls(); await RefreshUI(); var debuggerStackToDumpedObject = new DebuggerStackToDumpedObject(); if (_currentStackWrapper.CurrentExpressionOnStacks == null) { _currentStackWrapper.RefreshCurrentLocals(_dte); } if (_currentStackWrapper.CurrentExpressionOnStacks == null) { _stackDataDumpControl.ResetControls(); return; } var locals = _currentStackWrapper.CurrentExpressionOnStacks .Where(x => chosenLocals.Count == 0 || chosenLocals.Any(y => y == x.Name)) .Select(x => x.Expression).ToList(); var readonlyObjects = GetConstructorArguments(); var dumpedObjectsToCsharpCode = debuggerStackToDumpedObject.DumpObjectOnStack(locals, int.Parse(_stackDataDumpControl.MaxDepth.Text), GeneralOptions.Instance.GenerateTypeWithNamespace, GeneralOptions.Instance.MaxObjectsToAnalyze, GeneralOptions.Instance.MaxGenerationTime, readonlyObjects, GeneralOptions.Instance.GenerateConcreteType); _stackDataDumpControl.CreateStackDumpControls(dumpedObjectsToCsharpCode.dumpedObjectToCsharpCode, dumpedObjectsToCsharpCode.errorMessage); }
public async Task OnSettingsSaveAsync() { var generalOptions = await GeneralOptions.GetLiveInstanceAsync(); if (_stackDataDumpControl == null) { var window = await package.FindToolWindowAsync(typeof(StackDataDump), 0, true, package.DisposalToken); var stackDataDump = window as StackDataDump; _stackDataDumpControl = stackDataDump?.Content as StackDataDumpControl; } _stackDataDumpControl.MaxDepth.Text = generalOptions.MaxObjectDepth.ToString(); _stackDataDumpControl.AutomaticallyRefresh.IsChecked = generalOptions.AutomaticallyRefresh; }