99var tmpDir = ( process . env . TMP || process . env . TEMP || '.' ) + require ( 'path' ) . sep ;
1010//var tmpDir = require('path').resolve('./tmp') + require('path').sep;
1111var exeNode = 'node' ;
12+ var exeGdb = 'gdb' ; // only used if native stack traces wanted
1213var exeParpar = '../bin/parpar' ;
1314var exePar2 = 'par2' ;
1415
@@ -19,6 +20,7 @@ var pruneCache = false; // prune unused keys from cached results
1920var procArgs = process . argv . slice ( 2 ) ;
2021var fastTest = procArgs . indexOf ( '-f' ) > - 1 ;
2122var verbose = procArgs . indexOf ( '-v' ) > - 1 ;
23+ var use_gdb = procArgs . indexOf ( '-d' ) > - 1 ;
2224
2325var fs = require ( 'fs' ) ;
2426var crypto = require ( 'crypto' ) ;
@@ -579,14 +581,18 @@ async.timesSeries(allTests.length, function(testNum, cb) {
579581 var testFiles , refFiles ;
580582 var execArgs = exeParpar ? ( Array . isArray ( exeParpar ) ? exeParpar : [ exeParpar ] ) . concat ( testArgs ) : testArgs ;
581583 console . log ( 'Executing: ' + exeNode , execArgs . map ( function ( arg ) { return '"' + arg + '"' ; } ) . join ( ' ' ) ) ; // arguments not properly escaped, but should be good enough for 99% of cases
584+ if ( use_gdb ) {
585+ execArgs = [ '--batch' , '-ex' , 'r' , '-ex' , 'bt' , '-ex' , 'q $_exitcode' , '--args' , exeNode ] . concat ( execArgs ) ;
586+ }
582587 var timePP , timeP2 ;
583588 timePP = Date . now ( ) ;
584- proc . execFile ( exeNode , execArgs , function ( err , stdout , stderr ) {
589+ proc . execFile ( use_gdb ? exeGdb : exeNode , execArgs , function ( err , stdout , stderr ) {
585590 timePP = Date . now ( ) - timePP ;
586591 if ( err ) {
587592 console . error ( 'Error occurred after ' + ( timePP / 1000 ) + '; std output: ' ) ;
588593 process . stdout . write ( stdout ) ;
589594 process . stderr . write ( stderr ) ;
595+ console . log ( 'Error object: ' , err ) ;
590596 throw err ;
591597 }
592598
0 commit comments