@@ -35,14 +35,24 @@ export class DebugSessionTracker
3535 * The modules are kept in an array to maintain the load order of the modules.
3636 */
3737 private modules = new Map < vscode . DebugSession , DebugProtocol . Module [ ] > ( ) ;
38- private modulesChanged = new vscode . EventEmitter < void > ( ) ;
38+ private modulesChanged = new vscode . EventEmitter <
39+ vscode . DebugSession | undefined
40+ > ( ) ;
3941
4042 /**
4143 * Fired when modules are changed for any active debug session.
4244 *
4345 * Use `debugSessionModules` to retieve the active modules for a given debug session.
4446 */
45- onDidChangeModules : vscode . Event < void > = this . modulesChanged . event ;
47+ onDidChangeModules : vscode . Event < vscode . DebugSession | undefined > =
48+ this . modulesChanged . event ;
49+
50+ constructor ( ) {
51+ this . onDidChangeModules ( this . moduleChangedListener , this ) ;
52+ vscode . debug . onDidChangeActiveDebugSession ( ( session ) =>
53+ this . modulesChanged . fire ( session ) ,
54+ ) ;
55+ }
4656
4757 dispose ( ) {
4858 this . modules . clear ( ) ;
@@ -52,7 +62,6 @@ export class DebugSessionTracker
5262 createDebugAdapterTracker (
5363 session : vscode . DebugSession ,
5464 ) : vscode . ProviderResult < vscode . DebugAdapterTracker > {
55- this . showModulesTreeView ( false ) ;
5665 return {
5766 onDidSendMessage : ( message ) => this . onDidSendMessage ( session , message ) ,
5867 onExit : ( ) => this . onExit ( session ) ,
@@ -71,11 +80,7 @@ export class DebugSessionTracker
7180 /** Clear information from the active session. */
7281 private onExit ( session : vscode . DebugSession ) {
7382 this . modules . delete ( session ) ;
74- // close when there is no more sessions
75- if ( this . modules . size <= 0 ) {
76- this . showModulesTreeView ( false ) ;
77- }
78- this . modulesChanged . fire ( ) ;
83+ this . modulesChanged . fire ( undefined ) ;
7984 }
8085
8186 private showModulesTreeView ( showModules : boolean ) {
@@ -86,6 +91,18 @@ export class DebugSessionTracker
8691 ) ;
8792 }
8893
94+ private moduleChangedListener ( session : vscode . DebugSession | undefined ) {
95+ if ( ! session ) {
96+ this . showModulesTreeView ( false ) ;
97+ return ;
98+ }
99+
100+ if ( session == vscode . debug . activeDebugSession ) {
101+ const sessionHasModules = this . modules . get ( session ) != undefined ;
102+ this . showModulesTreeView ( sessionHasModules ) ;
103+ }
104+ }
105+
89106 private onDidSendMessage (
90107 session : vscode . DebugSession ,
91108 message : DebugProtocol . ProtocolMessage ,
@@ -102,9 +119,6 @@ export class DebugSessionTracker
102119 } else {
103120 modules . push ( module ) ;
104121 }
105- if ( modules . length == 1 ) {
106- this . showModulesTreeView ( true ) ;
107- }
108122 break ;
109123 }
110124 case "removed" : {
@@ -119,7 +133,7 @@ export class DebugSessionTracker
119133 break ;
120134 }
121135 this . modules . set ( session , modules ) ;
122- this . modulesChanged . fire ( ) ;
136+ this . modulesChanged . fire ( session ) ;
123137 }
124138 }
125139}
0 commit comments