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)
            {
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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;
        }