@@ -74,16 +74,16 @@ export class PythonDebugger extends DebugSession {
7474 private InitializeEventHandlers ( ) {
7575 this . pythonProcess . on ( "last" , arg => this . onDetachDebugger ( ) ) ;
7676 this . pythonProcess . on ( "threadExited" , arg => this . onPythonThreadExited ( arg ) ) ;
77- this . pythonProcess . on ( "moduleLoaded" , arg => this . onPythonModuleLoaded ( arg ) ) ;
78- this . pythonProcess . on ( "threadCreated" , arg => this . onPythonThreadCreated ( arg ) ) ;
79- this . pythonProcess . on ( "processLoaded" , arg => this . onPythonProcessLoaded ( arg ) ) ;
77+ this . pythonProcess . on ( "moduleLoaded" , arg => this . onPythonModuleLoaded ( arg ) ) ;
78+ this . pythonProcess . on ( "threadCreated" , arg => this . onPythonThreadCreated ( arg ) ) ;
79+ this . pythonProcess . on ( "processLoaded" , arg => this . onPythonProcessLoaded ( arg ) ) ;
8080 this . pythonProcess . on ( "output" , ( pyThread , output ) => this . onDebuggerOutput ( pyThread , output ) ) ;
8181 this . pythonProcess . on ( "exceptionRaised" , ( pyThread , ex ) => this . onPythonException ( pyThread , ex ) ) ;
8282 this . pythonProcess . on ( "breakpointHit" , ( pyThread , breakpointId ) => this . onBreakpointHit ( pyThread , breakpointId ) ) ;
8383 this . pythonProcess . on ( "stepCompleted" , ( pyThread ) => this . onStepCompleted ( pyThread ) ) ;
8484 this . pythonProcess . on ( "detach" , ( ) => this . onDetachDebugger ( ) ) ;
8585 this . pythonProcess . on ( "error" , ex => this . sendEvent ( new OutputEvent ( ex , "stderr" ) ) ) ;
86- this . pythonProcess . on ( "asyncBreakCompleted" , arg => this . onPythonProcessPaused ( arg ) ) ;
86+ this . pythonProcess . on ( "asyncBreakCompleted" , arg => this . onPythonProcessPaused ( arg ) ) ;
8787
8888 this . debugServer . on ( "detach" , ( ) => this . onDetachDebugger ( ) ) ;
8989 }
@@ -138,7 +138,7 @@ export class PythonDebugger extends DebugSession {
138138 this . launchArgs = args ;
139139 this . debugClient = CreateLaunchDebugClient ( args , this ) ;
140140
141- this . debuggerLoaded = new Promise ( resolve => {
141+ this . debuggerLoaded = new Promise ( resolve => {
142142 this . debuggerLoadedPromiseResolve = resolve ;
143143 } ) ;
144144
@@ -149,12 +149,12 @@ export class PythonDebugger extends DebugSession {
149149 this . startDebugServer ( ) . then ( dbgServer => {
150150 that . debugClient . LaunchApplicationToDebug ( dbgServer ) . then ( ( ) => {
151151
152- } , error => {
152+ } , error => {
153153 this . sendEvent ( new OutputEvent ( error + "\n" , "stderr" ) ) ;
154154 this . sendErrorResponse ( that . entryResponse , 2000 , error ) ;
155155 } ) ;
156156 } ) ;
157- } , error => {
157+ } , error => {
158158 this . sendEvent ( new OutputEvent ( error + "\n" , "stderr" ) ) ;
159159 this . sendErrorResponse ( that . entryResponse , 2000 , error ) ;
160160 } ) ;
@@ -163,7 +163,7 @@ export class PythonDebugger extends DebugSession {
163163 this . attachArgs = args ;
164164 this . debugClient = CreateAttachDebugClient ( args , this ) ;
165165
166- this . debuggerLoaded = new Promise ( resolve => {
166+ this . debuggerLoaded = new Promise ( resolve => {
167167 this . debuggerLoadedPromiseResolve = resolve ;
168168 } ) ;
169169
@@ -174,7 +174,7 @@ export class PythonDebugger extends DebugSession {
174174 this . startDebugServer ( ) . then ( dbgServer => {
175175 that . debugClient . LaunchApplicationToDebug ( dbgServer ) ;
176176 } ) ;
177- } , error => {
177+ } , error => {
178178 this . sendEvent ( new OutputEvent ( error + "\n" , "stderr" ) ) ;
179179 this . sendErrorResponse ( that . entryResponse , 2000 , error ) ;
180180 } ) ;
@@ -218,19 +218,19 @@ export class PythonDebugger extends DebugSession {
218218
219219 var breakpoints : { verified : boolean , line : number } [ ] = [ ] ;
220220 var breakpointsToRemove = [ ] ;
221- var linesToAdd = args . breakpoints . map ( b => b . line ) ;
221+ var linesToAdd = args . breakpoints . map ( b => b . line ) ;
222222 var registeredBks = this . registeredBreakpointsByFileName . get ( args . source . path ) ;
223- var linesToRemove = registeredBks . map ( b => b . LineNo ) . filter ( oldLine => linesToAdd . indexOf ( oldLine ) === - 1 ) ;
224- var linesToUpdate = registeredBks . map ( b => b . LineNo ) . filter ( oldLine => linesToAdd . indexOf ( oldLine ) >= 0 ) ;
225-
223+ var linesToRemove = registeredBks . map ( b => b . LineNo ) . filter ( oldLine => linesToAdd . indexOf ( oldLine ) === - 1 ) ;
224+ var linesToUpdate = registeredBks . map ( b => b . LineNo ) . filter ( oldLine => linesToAdd . indexOf ( oldLine ) >= 0 ) ;
225+
226226 //Always add new breakpoints, don't re-enable previous breakpoints
227227 //Cuz sometimes some breakpoints get added too early (e.g. in django) and don't get registeredBks
228228 //and the response comes back indicating it wasn't set properly
229229 //However, at a later point in time, the program breaks at that point!!!
230- var linesToAddPromises = args . breakpoints . map ( bk => {
231- return new Promise ( resolve => {
230+ var linesToAddPromises = args . breakpoints . map ( bk => {
231+ return new Promise ( resolve => {
232232 var breakpoint : IPythonBreakpoint ;
233- var existingBreakpointsForThisLine = registeredBks . filter ( registeredBk => registeredBk . LineNo === bk . line ) ;
233+ var existingBreakpointsForThisLine = registeredBks . filter ( registeredBk => registeredBk . LineNo === bk . line ) ;
234234 if ( existingBreakpointsForThisLine . length > 0 ) {
235235 //We have an existing breakpoint for this line
236236 //just enable that
@@ -246,7 +246,7 @@ export class PythonDebugger extends DebugSession {
246246 breakpoints . push ( { verified : true , line : bk . line } ) ;
247247 registeredBks . push ( breakpoint ) ;
248248 resolve ( ) ;
249- } , reason => {
249+ } , reason => {
250250 this . registeredBreakpoints . set ( breakpoint . Id , breakpoint ) ;
251251 breakpoints . push ( { verified : false , line : bk . line } ) ;
252252 registeredBks . push ( breakpoint ) ;
@@ -255,10 +255,10 @@ export class PythonDebugger extends DebugSession {
255255 } ) ;
256256 } ) ;
257257
258- var linesToRemovePromises = linesToRemove . map ( line => {
259- return new Promise ( resolve => {
258+ var linesToRemovePromises = linesToRemove . map ( line => {
259+ return new Promise ( resolve => {
260260 var registeredBks = this . registeredBreakpointsByFileName . get ( args . source . path ) ;
261- var bk = registeredBks . filter ( b => b . LineNo === line ) [ 0 ] ;
261+ var bk = registeredBks . filter ( b => b . LineNo === line ) [ 0 ] ;
262262 //Ok, we won't get a response back, so update the breakpoints list indicating this has been disabled
263263 bk . Enabled = false ;
264264 this . pythonProcess . DisableBreakPoint ( bk ) ;
@@ -279,7 +279,7 @@ export class PythonDebugger extends DebugSession {
279279
280280 protected threadsRequest ( response : DebugProtocol . ThreadsResponse ) : void {
281281 var threads = [ ] ;
282- this . pythonProcess . Threads . forEach ( t => {
282+ this . pythonProcess . Threads . forEach ( t => {
283283 threads . push ( new Thread ( t . Id , t . Name ) ) ;
284284 } ) ;
285285
@@ -367,8 +367,8 @@ export class PythonDebugger extends DebugSession {
367367 return this . sendResponse ( response ) ;
368368 }
369369
370- this . pythonProcess . ExecuteText ( args . expression , PythonEvaluationResultReprKind . Normal , frame ) . then ( result => {
371- let variablesReference = 0 ;
370+ this . pythonProcess . ExecuteText ( args . expression , PythonEvaluationResultReprKind . Normal , frame ) . then ( result => {
371+ let variablesReference = 0 ;
372372 //If this value can be expanded, then create a vars ref for user to expand it
373373 if ( result . IsExpandable ) {
374374 const parentVariable : IDebugVariable = {
@@ -419,7 +419,7 @@ export class PythonDebugger extends DebugSession {
419419
420420 if ( varRef . evaluateChildren !== true ) {
421421 let variables = [ ] ;
422- varRef . variables . forEach ( variable => {
422+ varRef . variables . forEach ( variable => {
423423 let variablesReference = 0 ;
424424 //If this value can be expanded, then create a vars ref for user to expand it
425425 if ( variable . IsExpandable ) {
@@ -443,12 +443,12 @@ export class PythonDebugger extends DebugSession {
443443
444444 return this . sendResponse ( response ) ;
445445 }
446-
446+
447447 //Ok, we need to evaluate the children of the current variable
448448 var variables = [ ] ;
449- var promises = varRef . variables . map ( variable => {
450- return variable . Process . EnumChildren ( variable . Expression , variable . Frame , CHILD_ENUMEARATION_TIMEOUT ) . then ( children => {
451- children . forEach ( child => {
449+ var promises = varRef . variables . map ( variable => {
450+ return variable . Process . EnumChildren ( variable . Expression , variable . Frame , CHILD_ENUMEARATION_TIMEOUT ) . then ( children => {
451+ children . forEach ( child => {
452452 let variablesReference = 0 ;
453453 //If this value can be expanded, then create a vars ref for user to expand it
454454 if ( child . IsExpandable ) {
@@ -465,7 +465,7 @@ export class PythonDebugger extends DebugSession {
465465 variablesReference : variablesReference
466466 } ) ;
467467 } ) ;
468- } , error => {
468+ } , error => {
469469 this . sendErrorResponse ( response , 2001 , error ) ;
470470 } ) ;
471471 } ) ;
@@ -491,7 +491,27 @@ export class PythonDebugger extends DebugSession {
491491 if ( args . filters . indexOf ( "all" ) >= 0 ) {
492492 mode = enum_EXCEPTION_STATE . BREAK_MODE_ALWAYS ;
493493 }
494- this . pythonProcess . SendExceptionInfo ( mode , null ) ;
494+ var exToIgnore = null ;
495+ var exceptionHandling = this . launchArgs . exceptionHandling ;
496+ if ( exceptionHandling ) {
497+ exToIgnore = new Map < string , enum_EXCEPTION_STATE > ( ) ;
498+ if ( Array . isArray ( exceptionHandling . ignore ) ) {
499+ exceptionHandling . ignore . forEach ( exType => {
500+ exToIgnore . set ( exType , enum_EXCEPTION_STATE . BREAK_MODE_NEVER ) ;
501+ } ) ;
502+ }
503+ if ( Array . isArray ( exceptionHandling . always ) ) {
504+ exceptionHandling . always . forEach ( exType => {
505+ exToIgnore . set ( exType , enum_EXCEPTION_STATE . BREAK_MODE_ALWAYS ) ;
506+ } ) ;
507+ }
508+ if ( Array . isArray ( exceptionHandling . unhandled ) ) {
509+ exceptionHandling . unhandled . forEach ( exType => {
510+ exToIgnore . set ( exType , enum_EXCEPTION_STATE . BREAK_MODE_UNHANDLED ) ;
511+ } ) ;
512+ }
513+ }
514+ this . pythonProcess . SendExceptionInfo ( mode , exToIgnore ) ;
495515 this . sendResponse ( response ) ;
496516 } ) ;
497517 }
0 commit comments