On Mon, 15 Mar 2021 18:47:15 GMT, Chris Plummer <cjplum...@openjdk.org> wrote:

>> NPE was thrown when I set server name prefix for debugd as following:
>> 
>> $ jhsdb -J-Dsun.jvm.hotspot.rmi.serverNamePrefix=test debugd --pid 781
>> Attaching to process ID 781 and starting RMI services, please wait...
>> Error attaching to process or starting server: 
>> sun.jvm.hotspot.debugger.DebuggerException: java.lang.NullPointerException: 
>> Cannot invoke "String.length()" because "this.input" is null
>>         at 
>> jdk.hotspot.agent/sun.jvm.hotspot.RMIHelper.rebind(RMIHelper.java:78)
>>         at 
>> jdk.hotspot.agent/sun.jvm.hotspot.HotSpotAgent.setupDebugger(HotSpotAgent.java:379)
>>         at 
>> jdk.hotspot.agent/sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.java:329)
>>         at 
>> jdk.hotspot.agent/sun.jvm.hotspot.HotSpotAgent.startServer(HotSpotAgent.java:215)
>>         at 
>> jdk.hotspot.agent/sun.jvm.hotspot.SALauncher.runDEBUGD(SALauncher.java:431)
>>         at 
>> jdk.hotspot.agent/sun.jvm.hotspot.SALauncher.main(SALauncher.java:493)
>> Caused by: java.lang.NullPointerException: Cannot invoke "String.length()" 
>> because "this.input" is null
>>         at java.base/java.net.URI$Parser.parse(URI.java:3166)
>>         at java.base/java.net.URI.<init>(URI.java:623)
>>         at java.rmi/java.rmi.Naming.intParseURL(Naming.java:273)
>>         at java.rmi/java.rmi.Naming.parseURL(Naming.java:237)
>>         at java.rmi/java.rmi.Naming.rebind(Naming.java:171)
>>         at 
>> jdk.hotspot.agent/sun.jvm.hotspot.RMIHelper.rebind(RMIHelper.java:64)
>>         ... 5 more
>> 
>> `serverNamePrefix` would not affect due to trivial bug.
>
> The fix looks fine. It would be nice if this was documented somewhere (and 
> even tested). Also, while looking into this I noticed the following comment:
> 
>         // debugServerID follows the pattern [unique_id@]host[:port]
>         // we have to transform this as 
> //host[:port]/<serverNamePrefix>['_'<unique_id>]
> 
> The `[:port]` part is also not document, not even in the command line syntax 
> for `sadebugd`

Thanks @plummercj for your review!

> The fix looks fine. It would be nice if this was documented somewhere (and 
> even tested). Also, while looking into this I noticed the following comment:
> 
> ```
>     // debugServerID follows the pattern [unique_id@]host[:port]
>     // we have to transform this as 
> //host[:port]/<serverNamePrefix>['_'<unique_id>]
> ```
> 
> The `[:port]` part is also not document, not even in the command line syntax 
> for `sadebugd`

In addition `sun.jvm.hotspot.rmi.startRegistry` is also undocumented even 
though it works well.
Both `serverNamePrefix` and `startRegistry` are not exposed as command line 
options of jhsdb, I think documentation. implementing testcases, and exposing 
as command line options should be done simultaneously. We need to change both 
command line help and manpage in that work (CSR is needed of course.)

For example, I think we can expose them as following:

$ jhsdb debugd --help
    :
    --disableregistry             Do not start RMI registry (to use RMI 
registry that exists)
    --servernameprefix         Specify RMI server name prefix

$ jhsdb jinfo --help
    :
    --connect [<id>@]<host>[:registryport][/servernameprefix] To connect to a 
remote debug server (debugd).
    :
    Examples: jhsdb jinfo --pid 1234
          or  jhsdb jinfo --core ./core.1234 --exe ./myexe
          or  jhsdb jinfo --connect debugserver
          or  jhsdb jinfo --connect id@debugserver:1234/prefix

I will work for it if you are ok.

-------------

PR: https://git.openjdk.java.net/jdk/pull/3000

Reply via email to