Пример #1
0
        private void Callback(object state)
        {
            var result = DebuggerService.TryGetElementUnderCursor();

            if (!result.HasValue)
            {
                return;
            }

            var value        = result.Value;
            var selectedItem = SelectionManager.GetSelectedItem();

            if (selectedItem == null || selectedItem.Id.Equals(value))
            {
                return;
            }

            selectedItem = ElementCache.Get(value);
            if (selectedItem == null)
            {
                return;
            }

            SelectionManager.Replace(selectedItem);
        }
Пример #2
0
        public void Execute(int line)
        {
            if (DebugInformation.CodeMappings != null && DebugInformation.CodeMappings.Count > 0)
            {
                // check if the codemappings exists for this line
                var storage = DebugInformation.CodeMappings;
                int token   = 0;
                foreach (var key in storage.Keys)
                {
                    var instruction = storage[key].GetInstructionByLineNumber(line, out token);

                    if (instruction == null)
                    {
                        continue;
                    }

                    // no bookmark on the line: create a new breakpoint
                    DebuggerService.ToggleBreakpointAt(
                        instruction.MemberMapping.MemberReference,
                        line,
                        token,
                        instruction.ILInstructionOffset,
                        DebugInformation.Language);
                    break;
                }

                if (token == 0)
                {
                    MessageBox.Show(string.Format("Missing code mappings at line {0}.", line),
                                    "Code mappings", MessageBoxButton.OK, MessageBoxImage.Information);
                    return;
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Open the source code at the current location.
        /// </summary>
        public void JumpToCurrentLine()
        {
            DebuggerService.RemoveCurrentLineMarker();
            var process = CurrentProcess;

            if (process == null)
            {
                return;
            }

            // Activate the main window
            WorkbenchSingleton.MainWindow.Activate();

            // Get the current frame
            var frame = CurrentStackFrame;

            if (frame == null)
            {
                return;
            }

            // Get the document location
            var location = frame.GetDocumentLocationAsync().Await(DalvikProcess.VmTimeout);

            if (location != null && location.SourceCode != null)
            {
                DebuggerService.RemoveCurrentLineMarker();
                var p = location.SourceCode.Position;
                                #if DEBUG
                Debug.WriteLine(string.Format("Current location: ({0},{1})-({2},{3})  {4:X4}", p.Start.Line, p.Start.Column, p.End.Line, p.End.Column, frame.Location.Index));
                                #endif
                DebuggerService.JumpToCurrentLine(location.SourceCode.Document.Path, p.Start.Line, p.Start.Column, p.End.Line, p.End.Column);
            }
        }
Пример #4
0
        public GlobalsViewModel(
            StoryService storyService,
            DebuggerService debuggerService,
            VariableViewService variableViewService)
            : base("GlobalsView")
        {
            this.storyService = storyService;

            this.debuggerService = debuggerService;
            this.debuggerService.MachineCreated   += DebuggerService_MachineCreated;
            this.debuggerService.MachineDestroyed += DebuggerService_MachineDestroyed;
            this.debuggerService.StateChanged     += DebuggerService_StateChanged;
            this.debuggerService.Stepped          += DebuggerService_ProcessorStepped;

            this.variableViewService = variableViewService;
            variableViewService.GlobalViewChanged += VariableViewService_GlobalViewChanged;

            this.globals = new IndexedVariableViewModel[240];

            for (int i = 0; i < 240; i++)
            {
                var newGlobal = new IndexedVariableViewModel(i, 0);
                newGlobal.Visible = false;
                globals[i]        = newGlobal;
            }

            SetVariableViewCommand = RegisterCommand <KeyValuePair <VariableViewModel, VariableView> >(
                text: "Set Variable View",
                name: "SetVariableView",
                executed: SetVariableViewExecuted,
                canExecute: CanSetVariableViewExecute);
        }
Пример #5
0
        public override void Run()
        {
            var viewContent = WorkbenchSingleton.Workbench.ActiveContent;
            ITextEditorProvider provider = viewContent as ITextEditorProvider;
            ITextEditor         editor   = null;

            if (provider != null)
            {
                editor = provider.TextEditor;
                if (!string.IsNullOrEmpty(editor.FileName))
                {
                    DebuggerService.ToggleBreakpointAt(editor, editor.Caret.Line, typeof(BreakpointBookmark));
                }
            }
            else
            {
                var view = viewContent as AbstractViewContentWithoutFile;
                if (view != null)
                {
                    editor = view.GetService(typeof(ITextEditor)) as ITextEditor;
                    if (editor != null)
                    {
                        DebuggerService.ToggleBreakpointAt(editor, editor.Caret.Line, typeof(DecompiledBreakpointBookmark));
                    }
                }
            }
        }
Пример #6
0
        public App()
        {
            var cmdArgs = Environment.GetCommandLineArgs().Skip(1);

            App.CommandLineArguments = new CommandLineArguments(cmdArgs);
            if (App.CommandLineArguments.SingleInstance ?? true)
            {
                cmdArgs = cmdArgs.Select(FullyQualifyPath);
                string message = string.Join(Environment.NewLine, cmdArgs);
                if (SendToPreviousInstance("ILSpy:\r\n" + message, !App.CommandLineArguments.NoActivate))
                {
                    Environment.Exit(0);
                }
            }
            InitializeComponent();

            var catalog = new AggregateCatalog();

            catalog.Catalogs.Add(new AssemblyCatalog(typeof(App).Assembly));
            // Don't use DirectoryCatalog, that causes problems if the plugins are from the Internet zone
            // see http://stackoverflow.com/questions/8063841/mef-loading-plugins-from-a-network-shared-folder
            string appPath = Path.GetDirectoryName(typeof(App).Module.FullyQualifiedName);

            foreach (string plugin in Directory.GetFiles(appPath, "*.Plugin.dll"))
            {
                string shortName = Path.GetFileNameWithoutExtension(plugin);
                try {
                    var asm = Assembly.Load(shortName);
                    asm.GetTypes();
                    catalog.Catalogs.Add(new AssemblyCatalog(asm));
                } catch (Exception ex) {
                    // Cannot show MessageBox here, because WPF would crash with a XamlParseException
                    // Remember and show exceptions in text output, once MainWindow is properly initialized
                    StartupExceptions.Add(new ExceptionData {
                        Exception = ex, PluginName = shortName
                    });
                }
            }

            compositionContainer = new CompositionContainer(catalog);

            Languages.Initialize(compositionContainer);

            if (!System.Diagnostics.Debugger.IsAttached)
            {
                AppDomain.CurrentDomain.UnhandledException      += ShowErrorBox;
                Dispatcher.CurrentDispatcher.UnhandledException += Dispatcher_UnhandledException;
            }

            EventManager.RegisterClassHandler(typeof(Window),
                                              Hyperlink.RequestNavigateEvent,
                                              new RequestNavigateEventHandler(Window_RequestNavigate));

            try {
                DebuggerService.SetDebugger(compositionContainer.GetExport <IDebugger>());
            } catch {
                // unable to find a IDebugger
            }
        }
Пример #7
0
        public InsightService(CodeEditor editor, LanguageContext languageContext, DebuggerService debuggerService)
        {
            _editor = editor;
            _languageContext = languageContext;
            _debuggerService = debuggerService;

            AttachEvents();
        }
Пример #8
0
        public InsightService(CodeEditor editor, LanguageContext languageContext, DebuggerService debuggerService)
        {
            _editor          = editor;
            _languageContext = languageContext;
            _debuggerService = debuggerService;

            AttachEvents();
        }
Пример #9
0
        public MessageLogViewModel(DebuggerService debuggerService)
            : base("MessageLogView")
        {
            this.debuggerService = debuggerService;
            this.debuggerService.MachineCreated   += DebuggerService_MachineCreated;
            this.debuggerService.MachineDestroyed += DebuggerService_MachineDestroyed;

            this.messages = new BulkObservableCollection <MessageViewModel>();
        }
Пример #10
0
        public static bool isExceptionThrown()
        {
            DebuggerService debuggerService = new DebuggerService();
            DBGMODE         dBGMODE         = VsShellUtilities.GetDebugMode(debuggerService);

            if (DBGMODE.DBGMODE_Break == dBGMODE)
            {
                return(true);
            }
            return(false);
        }
Пример #11
0
 public ManagedHotReloadLanguageService(
     VisualStudioWorkspace workspace,
     IManagedHotReloadService hotReloadService,
     IDiagnosticAnalyzerService diagnosticService,
     EditAndContinueDiagnosticUpdateSource diagnosticUpdateSource)
 {
     _proxy                  = new RemoteEditAndContinueServiceProxy(workspace);
     _debuggerService        = new DebuggerService(hotReloadService);
     _diagnosticService      = diagnosticService;
     _diagnosticUpdateSource = diagnosticUpdateSource;
 }
Пример #12
0
        void OnMouseHover(MouseEventArgs e)
        {
            ToolTipRequestEventArgs args = new ToolTipRequestEventArgs(editor);
            var pos = editor.GetPositionFromPoint(e.GetPosition(editor));

            args.InDocument = pos.HasValue;

            if (pos.HasValue)
            {
                args.LogicalPosition = new TextLocation(pos.Value.Line, pos.Value.Column);
            }
            else
            {
                return;
            }

            DebuggerService.HandleToolTipRequest(args);

            if (args.ContentToShow != null)
            {
                var contentToShowITooltip = args.ContentToShow as ITooltip;

                if (contentToShowITooltip != null && contentToShowITooltip.ShowAsPopup)
                {
                    if (!(args.ContentToShow is UIElement))
                    {
                        throw new NotSupportedException("Content to show in Popup must be UIElement: " + args.ContentToShow);
                    }
                    if (popup == null)
                    {
                        popup = CreatePopup();
                    }
                    if (TryCloseExistingPopup(false))
                    {
                        // when popup content decides to close, close the popup
                        contentToShowITooltip.Closed += delegate { popup.IsOpen = false; };
                        popup.Child = (UIElement)args.ContentToShow;
                        //ICSharpCode.SharpDevelop.Debugging.DebuggerService.CurrentDebugger.IsProcessRunningChanged
                        SetPopupPosition(popup, e);
                        popup.IsOpen = true;
                    }
                    e.Handled = true;
                }
            }
            else
            {
                // close popup if mouse hovered over empty area
                if (popup != null)
                {
                    e.Handled = true;
                }
                TryCloseExistingPopup(false);
            }
        }
 public ManagedHotReloadLanguageService(
     Lazy <IHostWorkspaceProvider> workspaceProvider,
     Lazy <IManagedHotReloadService> hotReloadService,
     IDiagnosticAnalyzerService diagnosticService,
     EditAndContinueDiagnosticUpdateSource diagnosticUpdateSource)
 {
     _workspaceProvider      = workspaceProvider;
     _debuggerService        = new DebuggerService(hotReloadService);
     _diagnosticService      = diagnosticService;
     _diagnosticUpdateSource = diagnosticUpdateSource;
 }
Пример #14
0
        public override void Run()
        {
            IWorkbenchWindow window = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow;

            if (window == null || !(window.ViewContent is ITextEditorControlProvider))
            {
                return;
            }
            TextEditorControl textEditor = ((ITextEditorControlProvider)window.ViewContent).TextEditorControl;

            DebuggerService.ToggleBreakpointAt(textEditor.Document, textEditor.FileName, textEditor.ActiveTextAreaControl.Caret.Line);
        }
Пример #15
0
 /// <summary>
 /// Fire the IsProcessRunningChanged event.
 /// This method must be called on the main thread.
 /// </summary>
 private void OnDebugProcessIsSuspendedChangedOnMainThread(bool isProcessRunning)
 {
     this.IsProcessRunningChanged.Fire(this);
     if (isProcessRunning)
     {
         DebuggerService.RemoveCurrentLineMarker();
     }
     else
     {
         JumpToCurrentLine();
     }
 }
Пример #16
0
 public void JumpToCurrentLine()
 {
     DebuggerService.RemoveCurrentLineMarker();
     if (debuggedProcess != null)
     {
         SourcecodeSegment nextStatement = debuggedProcess.NextStatement;
         if (nextStatement != null)
         {
             DebuggerService.JumpToCurrentLine(nextStatement.Filename, nextStatement.StartLine, nextStatement.StartColumn, nextStatement.EndLine, nextStatement.EndColumn);
         }
     }
 }
Пример #17
0
        protected override void OnMouseUp(MouseButtonEventArgs e)
        {
            base.OnMouseUp(e);
            int line = GetLineFromMousePosition(e);

            if (!e.Handled && dragDropBookmark != null)
            {
                if (dragStarted)
                {
                    if (line != 0)
                    {
                        dragDropBookmark.Drop(line);
                    }
                    e.Handled = true;
                }
                CancelDragDrop();
            }
            if (!e.Handled && line != 0)
            {
                IBookmark bm = GetBookmarkFromLine(line);
                if (bm != null)
                {
                    bm.MouseUp(e);
                    if (e.Handled)
                    {
                        return;
                    }
                }
                if (e.ChangedButton == MouseButton.Left && TextView != null)
                {
                    // no bookmark on the line: create a new breakpoint
                    ITextEditor textEditor = TextView.Services.GetService(typeof(ITextEditor)) as ITextEditor;
                    if (textEditor != null)
                    {
                        DebuggerService.ToggleBreakpointAt(textEditor, line, typeof(BreakpointBookmark));
                        return;
                    }

                    // create breakpoint for the other posible active contents
                    var viewContent = WorkbenchSingleton.Workbench.ActiveContent as AbstractViewContentWithoutFile;
                    if (viewContent != null)
                    {
                        textEditor = viewContent.Services.GetService(typeof(ITextEditor)) as ITextEditor;
                        if (textEditor != null)
                        {
                            DebuggerService.ToggleBreakpointAt(textEditor, line, typeof(DecompiledBreakpointBookmark));
                            return;
                        }
                    }
                }
            }
        }
Пример #18
0
        public KeystrokeService(ICodeViewModel codeViewModel, TextArea textArea, ICompletionProvider completionProvider, LanguageContext languageContext, DebuggerService debuggerService, BookmarkManager bookmarkManager)
        {
            _completionProvider = completionProvider;
            _completionProvider.OnCompletionCompleted += OnCompletionResultRetrieved;
            _languageContext = languageContext;
            _debuggerService = debuggerService;
            _bookmarkManager = bookmarkManager;
            _codeViewModel = codeViewModel;

            _textArea = textArea;
            _textArea.KeyUp += OnKeyReleased;
            _textArea.TextEntered += OnTextEntered;
        }
Пример #19
0
        public OutputViewModel(StoryService storyService,
                               DebuggerService debuggerService,
                               GameScriptService gameScriptService)
            : base("OutputView")
        {
            this.storyService = storyService;
            this.storyService.StoryClosing += StoryService_StoryClosing;

            this.debuggerService = debuggerService;
            this.debuggerService.MachineCreated += DebuggerService_MachineCreated;

            this.gameScriptService = gameScriptService;
        }
Пример #20
0
        public override void Run()
        {
            ITextEditorControlProvider provider = WorkbenchSingleton.Workbench.ActiveContent as ITextEditorControlProvider;

            if (provider != null)
            {
                TextEditorControl textEditor = provider.TextEditorControl;
                if (!string.IsNullOrEmpty(textEditor.FileName))
                {
                    DebuggerService.ToggleBreakpointAt(textEditor.Document, textEditor.FileName, textEditor.ActiveTextAreaControl.Caret.Line);
                }
            }
        }
Пример #21
0
        public KeystrokeService(ICodeViewModel codeViewModel, TextArea textArea, ICompletionProvider completionProvider, LanguageContext languageContext, DebuggerService debuggerService, BookmarkManager bookmarkManager)
        {
            _completionProvider = completionProvider;
            _completionProvider.OnCompletionCompleted += OnCompletionResultRetrieved;
            _languageContext = languageContext;
            _debuggerService = debuggerService;
            _bookmarkManager = bookmarkManager;
            _codeViewModel   = codeViewModel;

            _textArea              = textArea;
            _textArea.KeyUp       += OnKeyReleased;
            _textArea.TextEntered += OnTextEntered;
        }
Пример #22
0
        public override void Run()
        {
            ITextEditorProvider provider = WorkbenchSingleton.Workbench.ActiveContent as ITextEditorProvider;

            if (provider != null)
            {
                ITextEditor editor = provider.TextEditor;
                if (!string.IsNullOrEmpty(editor.FileName))
                {
                    DebuggerService.ToggleBreakpointAt(editor, editor.Caret.Line);
                }
            }
        }
Пример #23
0
        public VisualTracking(WorkflowDesigner workflowDesigner)
        {
            _workflowDesigner = workflowDesigner;
            _debuggerService  = _workflowDesigner.DebugManagerView as DebuggerService;
            var trakcingProfile = new TrackingProfile();

            trakcingProfile.Queries.Add(new ActivityStateQuery {
                ActivityName = "*", States = { ActivityStates.Executing }, Variables = { "*" }, Arguments = { "*" }
            });
            TrackingProfile     = trakcingProfile;
            _sourceLocationMaps = GetSourceLocationMap();
            _idActivityMaps     = GetIdActivityMaps();
        }
Пример #24
0
 public void JumpToCurrentLine()
 {
     WorkbenchSingleton.MainForm.Activate();
     DebuggerService.RemoveCurrentLineMarker();
     if (debuggedProcess != null)
     {
         SourcecodeSegment nextStatement = debuggedProcess.NextStatement;
         if (nextStatement != null)
         {
             string fileName = GetFileName(nextStatement);
             DebuggerService.JumpToCurrentLine(fileName, nextStatement.StartLine, nextStatement.StartColumn, nextStatement.EndLine, nextStatement.EndColumn);
         }
     }
 }
Пример #25
0
        public MemoryViewModel(
            StoryService storyService,
            DebuggerService debuggerService)
            : base("MemoryView")
        {
            this.storyService               = storyService;
            this.storyService.StoryOpened  += StoryService_StoryOpened;
            this.storyService.StoryClosing += StoryService_StoryClosing;

            this.debuggerService = debuggerService;
            this.debuggerService.StateChanged += DebuggerService_StateChanged;

            this.lines = new BulkObservableCollection <MemoryLineViewModel>();
        }
Пример #26
0
 /// <summary>
 /// Recreates breakpoints after change of source code.
 /// </summary>
 private void updateBreakpoints()
 {
     BreakpointBookmark[] markers = new BreakpointBookmark[DebuggerService.Breakpoints.Count];
     DebuggerService.Breakpoints.CopyTo(markers, 0);
     foreach (BreakpointBookmark item in markers)
     {
         ITextEditor editor = findEditor(item);
         if (editor != null)
         {
             DebuggerService.ToggleBreakpointAt(editor, item.LineNumber, typeof(BreakpointBookmark));
             DebuggerService.ToggleBreakpointAt(editor, item.LineNumber, typeof(BreakpointBookmark));
         }
     }
 }
Пример #27
0
        void JumpToDecompiledCode(Debugger.StackFrame frame)
        {
            if (frame == null)
            {
                LoggingService.Error("No stack frame!");
                return;
            }

            if (debuggerDecompilerService == null)
            {
                LoggingService.Warn("No IDebuggerDecompilerService found!");
                return;
            }

            // check for options - if these options are enabled, debugging decompiled code should not continue
            if (!debuggedProcess.Options.DecompileCodeWithoutSymbols)
            {
                LoggingService.Info("Decompiled code debugging is disabled!");
                return;
            }
            DebuggerService.RemoveCurrentLineMarker();
            // get external data
            int typeToken   = frame.MethodInfo.DeclaringType.MetadataToken;
            int methodToken = frame.MethodInfo.MetadataToken;
            int ilOffset    = frame.IP;

            int[] ilRanges  = null;
            int   line      = -1;
            bool  isMatch   = false;
            var   debugType = (DebugType)frame.MethodInfo.DeclaringType;

            debuggerDecompilerService.DebugStepInformation = Tuple.Create(methodToken, ilOffset);

            if (debuggerDecompilerService.GetILAndLineNumber(typeToken, methodToken, ilOffset, out ilRanges, out line, out isMatch))
            {
                // update marker & navigate to line
                NavigationService.NavigateTo(debugType.DebugModule.FullPath,
                                             debugType.FullNameWithoutGenericArguments,
                                             IDStringProvider.GetIDString(frame.MethodInfo),
                                             line);
            }
            else
            {
                // no line => do decompilation
                NavigationService.NavigateTo(debugType.DebugModule.FullPath,
                                             debugType.FullNameWithoutGenericArguments,
                                             IDStringProvider.GetIDString(frame.MethodInfo));
            }
        }
Пример #28
0
        public CallStackViewModel(
            DebuggerService debuggerService,
            RoutineService routineService)
            : base("CallStackView")
        {
            this.debuggerService = debuggerService;
            this.debuggerService.MachineCreated   += DebuggerService_MachineCreated;
            this.debuggerService.MachineDestroyed += new System.EventHandler <MachineDestroyedEventArgs>(DebuggerService_MachineDestroyed);
            this.debuggerService.StateChanged     += DebuggerService_StateChanged;
            this.debuggerService.Stepped          += DebuggerService_ProcessorStepped;

            this.routineService = routineService;

            this.stackFrames = new BulkObservableCollection <StackFrameViewModel>();
        }
Пример #29
0
        void JumpToSourceCode()
        {
            if (debuggedProcess == null || debuggedProcess.SelectedThread == null)
            {
                return;
            }

            SourcecodeSegment nextStatement = debuggedProcess.NextStatement;

            if (nextStatement != null)
            {
                DebuggerService.RemoveCurrentLineMarker();
                DebuggerService.JumpToCurrentLine(nextStatement.Filename, nextStatement.StartLine, nextStatement.StartColumn, nextStatement.EndLine, nextStatement.EndColumn);
            }
        }
Пример #30
0
        void UpdateDebugUI(bool isDecompilationOk)
        {
            // sync bookmarks
            iconMargin.SyncBookmarks();

            if (isDecompilationOk)
            {
                if (DebugInformation.DebugStepInformation != null && DebuggerService.CurrentDebugger != null)
                {
                    // repaint bookmarks
                    iconMargin.InvalidateVisual();

                    // show the currentline marker
                    int             token    = DebugInformation.DebugStepInformation.Item1;
                    int             ilOffset = DebugInformation.DebugStepInformation.Item2;
                    int             line;
                    MemberReference member;
                    if (DebugInformation.CodeMappings == null || !DebugInformation.CodeMappings.ContainsKey(token))
                    {
                        return;
                    }

                    if (!DebugInformation.CodeMappings[token].GetInstructionByTokenAndOffset(ilOffset, out member, out line))
                    {
                        return;
                    }

                    // update marker
                    DebuggerService.JumpToCurrentLine(member, line, 0, line, 0, ilOffset);

                    var          bm      = CurrentLineBookmark.Instance;
                    DocumentLine docline = textEditor.Document.GetLineByNumber(line);
                    bm.Marker = bm.CreateMarker(textMarkerService, docline.Offset + 1, docline.Length);

                    UnfoldAndScroll(line);
                }
            }
            else
            {
                // remove currentline marker
                CurrentLineBookmark.Remove();
            }
        }
Пример #31
0
        public DisassemblyViewModel(
            StoryService storyService,
            DebuggerService debuggerService,
            BreakpointService breakpointService,
            // TODO: I haven't found a better way of enforcing this to be filled in time yet
            LabelService labelService,
            RoutineService routineService,
            NavigationService navigationService,
            EditRoutineNameDialogViewModel editRoutineNameDialogViewModel)
            : base("DisassemblyView")
        {
            this.storyService = storyService;

            this.debuggerService = debuggerService;
            this.debuggerService.MachineCreated   += DebuggerService_MachineCreated;
            this.debuggerService.MachineDestroyed += DebuggerService_MachineDestroyed;
            this.debuggerService.StateChanged     += DebuggerService_StateChanged;
            this.debuggerService.Stepped          += DebuggerService_Stepped;

            this.breakpointService          = breakpointService;
            this.breakpointService.Added   += BreakpointService_Added;
            this.breakpointService.Removed += BreakpointService_Removed;

            this.routineService = routineService;
            this.routineService.RoutineNameChanged += RoutineService_RoutineNameChanged;

            this.navigationService = navigationService;
            this.navigationService.NavigationRequested += NavigationService_NavigationRequested;

            this.editRoutineNameDialogViewModel = editRoutineNameDialogViewModel;

            lines                      = new BulkObservableCollection <DisassemblyLineViewModel>();
            addressToLineMap           = new IntegerMap <DisassemblyLineViewModel>();
            routineAddressAndIndexList = new List <AddressAndIndex>();
            stackLines                 = new List <DisassemblyLineViewModel>();

            this.EditNameCommand = RegisterCommand <int>(
                text: "EditName",
                name: "Edit Name",
                executed: EditNameExecuted,
                canExecute: CanEditNameExecute);
        }
Пример #32
0
        public App()
        {
            var cmdArgs = Environment.GetCommandLineArgs().Skip(1);

            App.CommandLineArguments = new CommandLineArguments(cmdArgs);
            if (App.CommandLineArguments.SingleInstance ?? true)
            {
                cmdArgs = cmdArgs.Select(FullyQualifyPath);
                string message = string.Join(Environment.NewLine, cmdArgs);
                if (SendToPreviousInstance("ILSpy:\r\n" + message, !App.CommandLineArguments.NoActivate))
                {
                    Environment.Exit(0);
                }
            }
            InitializeComponent();

            var catalog = new AggregateCatalog();

            catalog.Catalogs.Add(new AssemblyCatalog(typeof(App).Assembly));
            catalog.Catalogs.Add(new DirectoryCatalog(".", "*.Plugin.dll"));

            compositionContainer = new CompositionContainer(catalog);

            Languages.Initialize(compositionContainer);

            if (!System.Diagnostics.Debugger.IsAttached)
            {
                AppDomain.CurrentDomain.UnhandledException      += ShowErrorBox;
                Dispatcher.CurrentDispatcher.UnhandledException += Dispatcher_UnhandledException;
            }

            EventManager.RegisterClassHandler(typeof(Window),
                                              Hyperlink.RequestNavigateEvent,
                                              new RequestNavigateEventHandler(Window_RequestNavigate));

            try {
                DebuggerService.SetDebugger(compositionContainer.GetExport <IDebugger>());
            } catch {
                // unable to find a IDebugger
            }
        }