# HG changeset patch # User Jaroslav Tulach # Date 1435326710 -7200 # Node ID b8dffa0113ca154ab8bce65397ffc84586756ddd # Parent 6691b182e1a182b5b9484f04a19d295fa02acfc8 Allows debugging and executing any project's unittest from inside of NetBeans. Added --attach localhost:8000 option to allow the JVM to attach to IDE's (and any other) JPDA server. diff -r 6691b182e1a1 -r b8dffa0113ca mxtool/mx.py --- a/mxtool/mx.py Fri Jun 26 14:47:52 2015 +0200 +++ b/mxtool/mx.py Fri Jun 26 15:51:50 2015 +0200 @@ -1703,6 +1703,7 @@ self.add_argument('-p', '--primary-suite-path', help='set the primary suite directory', metavar='') self.add_argument('--dbg', type=int, dest='java_dbg_port', help='make Java processes wait on for a debugger', metavar='') self.add_argument('-d', action='store_const', const=8000, dest='java_dbg_port', help='alias for "-dbg 8000"') + self.add_argument('--attach', dest='attach', help='Connect to existing server running at [
:]') self.add_argument('--backup-modified', action='store_true', help='backup generated files if they pre-existed and are modified') self.add_argument('--cp-pfx', dest='cp_prefix', help='class path prefix', metavar='') self.add_argument('--cp-sfx', dest='cp_suffix', help='class path suffix', metavar='') @@ -2344,8 +2345,15 @@ self.version = VersionSpec(version.split()[2].strip('"')) self.javaCompliance = JavaCompliance(self.version.versionString) - if _opts.java_dbg_port is not None: - self.java_args += ['-Xdebug', '-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=' + str(_opts.java_dbg_port)] + attach = None + if _opts.attach is not None: + attach = 'server=n,address=' + _opts.attach + else: + if _opts.java_dbg_port is not None: + attach = 'server=y,address=' + str(_opts.java_dbg_port) + + if attach is not None: + self.java_args += ['-Xdebug', '-Xrunjdwp:transport=dt_socket,' + attach + ',suspend=y'] def _init_classpaths(self): if not self._classpaths_initialized: @@ -2653,8 +2661,16 @@ self.logCompilation('javac' if not args.alt_javac else args.alt_javac) javacCmd = [javac, '-g', '-J-Xmx1g', '-source', compliance, '-target', compliance, '-classpath', cp, '-d', outputDir] jdk.javacLibOptions(javacCmd) - if _opts.java_dbg_port is not None: - javacCmd += ['-J-Xdebug', '-J-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=' + str(_opts.java_dbg_port)] + + attach = None + if _opts.attach is not None: + attach = 'server=n,address=' + _opts.attach + else: + if _opts.java_dbg_port is not None: + attach = 'server=y,address=' + str(_opts.java_dbg_port) + + if attach is not None: + javacCmd += ['-J-Xdebug', '-J-Xrunjdwp:transport=dt_socket,' + attach + ',suspend=y'] javacCmd += processorArgs javacCmd += ['@' + _cygpathU2W(argfile.name)] @@ -4468,6 +4484,33 @@ out.close('target') out.open('target', {'name' : 'jar', 'depends' : 'compile'}) out.close('target') + out.open('target', {'name' : 'run', 'depends' : 'compile'}) + out.open('exec', {'executable' : sys.executable, 'failonerror' : 'true'}) + out.element('env', {'key' : 'JAVA_HOME', 'value' : jdk.jdk}) + out.element('arg', {'value' : os.path.abspath(__file__)}) + out.element('arg', {'value' : 'unittest'}) + out.element('arg', {'value' : p.name}) + out.close('exec') + out.close('target') + out.open('target', {'name' : 'debug', 'depends' : 'init,compile'}) + out.open('nbjpdastart', {'addressproperty' : 'jpda.address', 'name' : p.name, }) + out.open('classpath') + out.element('path', {'path' : '${javac.classpath}'}) + out.close('classpath') + out.open('sourcepath') + out.element('pathelement', {'location' : 'src'}) + out.close('sourcepath') + out.close('nbjpdastart') + out.open('exec', {'executable' : sys.executable, 'failonerror' : 'true'}) + out.element('env', {'key' : 'JAVA_HOME', 'value' : jdk.jdk}) + out.element('arg', {'value' : os.path.abspath(__file__)}) + out.element('arg', {'value' : '-d'}) + out.element('arg', {'value' : '--attach'}) + out.element('arg', {'value' : '${jpda.address}'}) + out.element('arg', {'value' : 'unittest'}) + out.element('arg', {'value' : p.name}) + out.close('exec') + out.close('target') out.open('target', {'name' : 'javadoc'}) out.open('exec', {'executable' : sys.executable, 'failonerror' : 'true'}) out.element('env', {'key' : 'JAVA_HOME', 'value' : jdk.jdk}) @@ -4589,7 +4632,7 @@ javadoc.use=true javadoc.version=false javadoc.windowtitle= -main.class= +main.class=com.oracle.truffle.api.impl.Accessor manifest.file=manifest.mf meta.inf.dir=${src.dir}/META-INF mkdist.disabled=false diff -r 6691b182e1a1 -r b8dffa0113ca truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/Accessor.java --- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/Accessor.java Fri Jun 26 14:47:52 2015 +0200 +++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/Accessor.java Fri Jun 26 15:51:50 2015 +0200 @@ -124,4 +124,12 @@ throw new IOException("No symbol invoker found!"); } + /** + * Don't call me. I am here only to let NetBeans debug any Truffle project. + * + * @param args + */ + public static void main(String... args) { + throw new IllegalStateException(); + } }