デバッグ中に開いたファイルは閉じてほしい

[戻る]
Air 2005/04/06(水) 01:35:18
久しぶりに書き込みさせていただきます、Air です。

最近 Vc++6.0 から .NET に移行し作業を行っております。
そこで質問なのですが、
デバッグでブレークポイントを張り、ステップ実行を行う際
飛び先の関数が別ファイルに移ったらそのファイルが開かれます。
まあそれは当然なのですが、個人的には、デバッグを中止し
プログラム作業に戻ったときに、そのデバッグ中に開かれたファイルは
閉じてくれないものかと思います。
例えば、標準の new をうっかり追いかけてしまうと、new.cpp が開かれて
ずっと開きっぱなしになります。・・・よね?
そういうのが残っていると、邪魔だなぁと思うわけです。

もしこの辺りが設定により変更できるのであれば
そのやり方を教えていただけませんでしょうか?
そんな設定ね〜よ と言われればおとなしくあきらめますが…

よろしくお願いします。

PATIO 2005/04/06(水) 11:24:12
未だにVC6がメインでたまに.NETを使っていますが、
そういう設定があるのではないかと言う発想がそもそもなかったり。(^^;
基本的に自分で閉じてますし、それが普通だと思ってました。
IDEの環境設定にそういう内容を見つけた事がないので、無いのではないかと思うのですが、
あるなら私も知りたいです。

Kerry 2005/04/06(水) 18:01:04
VS.NETであれば、マクロを組めば可能ですね。
即興で作ってみましたので、よろしければご利用ください。

適当に新規マクロプロジェクトを開いて、EnvironmentEventsモジュールに
以下のようにコードを追加します。

--------------------------------------------------------------------------
Option Strict Off
Option Explicit Off
Imports EnvDTE
Imports System.Diagnostics

Public Module EnvironmentEvents

#Region "Automatically generated code, do not modify"
    'Automatically generated code, do not modify
    'Event Sources Begin
    <System.ContextStaticAttribute()> Public WithEvents DTEEvents As 
EnvDTE.DTEEvents
    <System.ContextStaticAttribute()> Public WithEvents DocumentEvents As 
EnvDTE.DocumentEvents
    <System.ContextStaticAttribute()> Public WithEvents WindowEvents As 
EnvDTE.WindowEvents
    <System.ContextStaticAttribute()> Public WithEvents TaskListEvents As 
EnvDTE.TaskListEvents
    <System.ContextStaticAttribute()> Public WithEvents FindEvents As 
EnvDTE.FindEvents
    <System.ContextStaticAttribute()> Public WithEvents OutputWindowEvents As 
EnvDTE.OutputWindowEvents
    <System.ContextStaticAttribute()> Public WithEvents SelectionEvents As 
EnvDTE.SelectionEvents
    <System.ContextStaticAttribute()> Public WithEvents BuildEvents As 
EnvDTE.BuildEvents
    <System.ContextStaticAttribute()> Public WithEvents SolutionEvents As 
EnvDTE.SolutionEvents
    <System.ContextStaticAttribute()> Public WithEvents SolutionItemsEvents As 
EnvDTE.ProjectItemsEvents
    <System.ContextStaticAttribute()> Public WithEvents MiscFilesEvents As 
EnvDTE.ProjectItemsEvents
    <System.ContextStaticAttribute()> Public WithEvents DebuggerEvents As 
EnvDTE.DebuggerEvents
    'Event Sources End
    'End of automatically generated code
#End Region

    ' ↓ここから追加 ======================================

    Private docs As New Collection()

    Public Sub DocumentEvents_DocumentOpened(ByVal Document As 
EnvDTE.Document) Handles DocumentEvents.DocumentOpened
        If DTE.Debugger Is Nothing Then Exit Sub
        If DTE.Debugger.CurrentMode <> dbgDebugMode.dbgDesignMode Then
            ' デバッグ中にオープンしたドキュメントを保持する
            On Error Resume Next
            docs.Add(Document, Document.FullName)
        End If
    End Sub

    Public Sub DocumentEvents_DocumentClosing(ByVal Document As 
EnvDTE.Document) Handles DocumentEvents.DocumentClosing
        ' クローズされたドキュメントを除去する
        On Error Resume Next
        docs.Remove(Document.FullName)
    End Sub

    Public Sub DebuggerEvents_OnEnterDesignMode(ByVal Reason As 
EnvDTE.dbgEventReason) Handles DebuggerEvents.OnEnterDesignMode
        ' デザインモードに戻ってきたときに、デバッグ中にオープンされたドキュメ
ントをクローズする
        Do While docs.Count > 0
            docs(1).Close()
        Loop
    End Sub

    ' ↑ ここまで追加 =====================================

End Module

--------------------------------------------------------------------------

デバッグ中にオープンされたドキュメントを保持し、デバッグ終了時に
保持しているドキュメントをすべてクローズします。
デバッグ開始以前にオープンされたドキュメントは閉じません。

VS.NET 2002(C#) の環境で作りましたが、2003でも使用できると思います。
なお、使用にあたっては、自己責任でお願いします。

Kerry 2005/04/06(水) 18:04:54
↑すみません。変に改行が入ってしまっているところが
  ありますので、直してご利用ください。

PATIO 2005/04/07(木) 10:35:27
なるほど、マクロを使うと言う手がありましたか。
きちんと使いこなせば、マクロで大概の事は出来そうですね。
一時期、手を染めかけて止めたままほったらかしにしてたなぁ。(^^;

古いスレッドには追加発言できません。