Thread: [Pydev-code] Debugging Java called from python
Brought to you by:
fabioz
From: Andrew M. <mi...@nd...> - 2008-09-11 18:56:40
|
I want to stop at breakpoints in the Java code called by my python script (via Jython). However, PyDev's Eclipse debugging interface is handled exclusively by the pydevd.py wrapper, and there is no debugger connection to the underlying JVM. I thought to add a launcher argument like -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:2959, but this just results in an error: ERROR: transport error 202: connect failed: Connection refused ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [../../../src/share/back/debugInit.c:690] FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197) Any ideas about how I can simultaneously debug the script and the Java code it calls? Thanks! --Andrew Mickish |
From: Fabio Z. <fa...@gm...> - 2008-09-11 23:19:38
|
You should be able to start your application from the java debugger and use the Pydev Extensions remote debugger. See http://fabioz.com/pydev/manual_adv_remote_debugger.html for details on using it. Cheers, Fabio On Thu, Sep 11, 2008 at 3:56 PM, Andrew Mickish <mi...@nd...> wrote: > I want to stop at breakpoints in the Java code called by my python > script (via Jython). > > However, PyDev's Eclipse debugging interface is handled exclusively by > the pydevd.py wrapper, and there is no debugger connection to the > underlying JVM. > > I thought to add a launcher argument like > -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:2959, but > this just results in an error: > > ERROR: transport error 202: connect failed: Connection refused > ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) > JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports > initialized [../../../src/share/back/debugInit.c:690] > FATAL ERROR in native method: JDWP No transports initialized, > jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197) > > Any ideas about how I can simultaneously debug the script and the Java > code it calls? > > Thanks! > > --Andrew Mickish > > > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's > challenge > Build the coolest Linux based applications with Moblin SDK & win great > prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > pydev-code mailing list > pyd...@li... > https://lists.sourceforge.net/lists/listinfo/pydev-code > |
From: Gregory G. <gr...@al...> - 2008-09-12 11:15:41
|
This may be off-topic for this list, but transparent stepping-through between languages was something I thought could be done nicely with JPDA. I started a project for doing that because I thought stepping between Java and SQL stored procedures could be useful, but as this was largely to fulfill a school requirement, it got to just that point and no further. So if anyone wants to continue it, I would love it - see http://db-db.sourceforge.net. On Thu, Sep 11, 2008 at 4:19 PM, Fabio Zadrozny <fa...@gm...> wrote: > You should be able to start your application from the java debugger and use > the Pydev Extensions remote debugger. See > http://fabioz.com/pydev/manual_adv_remote_debugger.html for details on > using it. > > Cheers, > > Fabio > > > On Thu, Sep 11, 2008 at 3:56 PM, Andrew Mickish <mi...@nd...> wrote: > >> I want to stop at breakpoints in the Java code called by my python >> script (via Jython). >> >> However, PyDev's Eclipse debugging interface is handled exclusively by >> the pydevd.py wrapper, and there is no debugger connection to the >> underlying JVM. >> >> I thought to add a launcher argument like >> -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:2959, but >> this just results in an error: >> >> ERROR: transport error 202: connect failed: Connection refused >> ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) >> JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports >> initialized [../../../src/share/back/debugInit.c:690] >> FATAL ERROR in native method: JDWP No transports initialized, >> jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197) >> >> Any ideas about how I can simultaneously debug the script and the Java >> code it calls? >> >> Thanks! >> >> --Andrew Mickish >> >> >> >> ------------------------------------------------------------------------- >> This SF.Net email is sponsored by the Moblin Your Move Developer's >> challenge >> Build the coolest Linux based applications with Moblin SDK & win great >> prizes >> Grand prize is a trip for two to an Open Source event anywhere in the >> world >> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >> _______________________________________________ >> pydev-code mailing list >> pyd...@li... >> https://lists.sourceforge.net/lists/listinfo/pydev-code >> > > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's > challenge > Build the coolest Linux based applications with Moblin SDK & win great > prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > pydev-code mailing list > pyd...@li... > https://lists.sourceforge.net/lists/listinfo/pydev-code > > |
From: Andrew M. <mi...@nd...> - 2008-09-12 19:11:43
|
The Pydev remote debugger does not help me stop at breakpoints in Java code. It still only stops at breakpoints in Python code. Am I missing something? I can stop at Java breakpoints when I run my python script from Eclipse directly with Jython (i.e., without the pydevd.py wrapper). In this scenario, my Eclipse launcher produces a command line like this: C:\Program Files\Java\jdk1.6.0_02\bin\javaw.exe -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:4088 -Dfile.encoding=Cp1252 -classpath C:\jython2.2.1\jython.jar org.python.util.jython src\example.py However, when I run my python script from Eclipse using PyDev, there is no -agentlib:jdwp in the command line: C:\Program Files\Java\jdk1.6.0_02\bin\javaw.exe -classpath "C:\jython2.2.1\jython.jar;...;C:\Program Files\Java\jdk1.6.0_02\jre\lib\ext\tools.jar" -Dpython.security.respectJavaAccessibility=false org.python.util.jython pydevd.py --vm_type jython --client localhost --port 3088 --file src\example.py I believe the -agentlib:jdwp is the link between the launched process and the Eclipse debugger. I think all that I need is for the Java process spawned by PyDev to use the -agentlib:jdwp argument. Any idea how we could enable that in PyDev? Seems like an enhancement that would benefit Jython users generally. --Andy Fabio Zadrozny wrote: > You should be able to start your application from the java debugger > and use the Pydev Extensions remote debugger. See > http://fabioz.com/pydev/manual_adv_remote_debugger.html for details on > using it. |
From: Fabio Z. <fa...@gm...> - 2008-09-12 19:17:14
|
> The Pydev remote debugger does not help me stop at breakpoints in Java > code. It still only stops at breakpoints in Python code. Am I missing > something? > Actually, what I said is that you should launch from the java debugger and later go on and from your code call pydevd.settrace() to attach to the remote debugger. I think that doing it the other way around and passing additional arguments to the java and attaching the java debugger as a remote debugger should work too... But one of those should be the remote debugger... Cheers, Fabio > > > I can stop at Java breakpoints when I run my python script from Eclipse > directly with Jython (i.e., without the pydevd.py wrapper). In this > scenario, my Eclipse launcher produces a command line like this: > > C:\Program Files\Java\jdk1.6.0_02\bin\javaw.exe > -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:4088 > -Dfile.encoding=Cp1252 > -classpath C:\jython2.2.1\jython.jar org.python.util.jython > src\example.py > > However, when I run my python script from Eclipse using PyDev, there is no > -agentlib:jdwp in the command line: > > C:\Program Files\Java\jdk1.6.0_02\bin\javaw.exe > -classpath "C:\jython2.2.1\jython.jar;...;C:\Program > Files\Java\jdk1.6.0_02\jre\lib\ext\tools.jar" > -Dpython.security.respectJavaAccessibility=false > org.python.util.jython > pydevd.py > --vm_type jython --client localhost --port 3088 --file src\example.py > > I believe the -agentlib:jdwp is the link between the launched process and > the Eclipse debugger. > > I think all that I need is for the Java process spawned by PyDev to use the > -agentlib:jdwp argument. > > Any idea how we could enable that in PyDev? Seems like an enhancement that > would benefit Jython users generally. > > --Andy > > > Fabio Zadrozny wrote: > > You should be able to start your application from the java debugger and use > the Pydev Extensions remote debugger. See > http://fabioz.com/pydev/manual_adv_remote_debugger.html for details on > using it. > > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's > challenge > Build the coolest Linux based applications with Moblin SDK & win great > prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > pydev-code mailing list > pyd...@li... > https://lists.sourceforge.net/lists/listinfo/pydev-code > > |
From: Andrew M. <mi...@nd...> - 2008-09-12 20:42:34
|
Fabio Zadrozny wrote: > > The Pydev remote debugger does not help me stop at breakpoints in > Java code. It still only stops at breakpoints in Python code. Am > I missing something? > > > Actually, what I said is that you should launch from the java debugger > and later go on and from your code call pydevd.settrace() to attach to > the remote debugger. > > I think that doing it the other way around and passing additional > arguments to the java and attaching the java debugger as a remote > debugger should work too... But one of those should be the remote > debugger... Yes, I agree that would probably work. It is a lot more awkward than just pressing the debug button, but it would probably work. But since PyDev is launching the Java process to run Jython, why not just activate the standard jdwp debugging agent? My first stab at this was to make org.python.pydev.debug.ui.launching.AbstractLaunchConfigurationDelegate extend org.eclipse.jdt.launching.JavaLaunchDelegate. This successfully added the -agentlib:jdwp argument to the JVM command line, but it is not sufficient to get Eclipse to automatically connect to the launched process. The console says: FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197) ERROR: transport error 202: connect failed: Connection refused ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [../../../src/share/back/debugInit.c:690] This apparently comes from the launched process (not Eclipse), because I get the same error message when I launch using the -agentlib:jdwp argument from the command line outside of Eclipse. I wish I knew more about how to initialize Eclipse's JDT package properly... --Andy P.S. Thanks for the great documentation, including the pydev manual_101. |
From: Fabio Z. <fa...@gm...> - 2008-09-15 01:13:27
|
> I think that doing it the other way around and passing additional arguments to the java and attaching the java debugger as a remote debugger should work too... But one of those should be the remote debugger... > > Yes, I agree that would probably work. It is a lot more awkward than just pressing the debug button, but it would probably work. > > But since PyDev is launching the Java process to run Jython, why not just activate the standard jdwp debugging agent? That's possible, but needs digging into JDT internals to make it work > > My first stab at this was to make org.python.pydev.debug.ui.launching.AbstractLaunchConfigurationDelegate extend org.eclipse.jdt.launching.JavaLaunchDelegate. This successfully added the -agentlib:jdwp argument to the JVM command line, but it is not sufficient to get Eclipse to automatically connect to the launched process. The console says: > > FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197) > ERROR: transport error 202: connect failed: Connection refused > ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) > JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [../../../src/share/back/debugInit.c:690] > > This apparently comes from the launched process (not Eclipse), because I get the same error message when I launch using the -agentlib:jdwp argument from the command line outside of Eclipse. > > I wish I knew more about how to initialize Eclipse's JDT package properly... I think it goes a bit deeper than just passing those flags...(but I haven't looked it myself). Still, if you're up to the task and manage to get it working, please submit a patch with it (or you can enter a feature request, but I'm not sure when I'll be able to tackle that). Cheers, Fabio |