On Mon, 15 Mar 2021 07:29:16 GMT, Koichi Sakata <ksak...@openjdk.org> wrote:

> When running jstack with mixed option, the output of the lines that doesn't 
> have an address are misaligned as followings. 
> 
> $ sudo jhsdb jstack --mixed --pid 5905
> ----------------- 5955 -----------------
> "event-handler" #20 daemon prio=5 tid=0x00007f133079a970 nid=0x1743 in 
> Object.wait() [0x00007f1308bfe000]
>    java.lang.Thread.State: WAITING (on object monitor)
>    JavaThread state: _thread_blocked
> 0x00007f133a85b9f3 __pthread_cond_wait + 0x243
> 0x00007f133940b75b os::PlatformEvent::park() + 0x8b
> 0x00007f13393b7b2d ObjectMonitor::wait(long, bool, Thread*) + 0xf4d
> 0x00007f13397f0b95 ObjectSynchronizer::wait(Handle, long, Thread*) + 0x85
> 0x00007f1338e85961 JVM_MonitorWait + 0x241
> 0x00007f1328b264b7 java.lang.Object.wait(long) + 0xd7 (Native method)
> 0x00007f132177b3c4 * java.lang.Object.wait() bci:2 line:338 (Compiled frame)
> * com.sun.tools.jdi.EventQueueImpl.removeUnfiltered(long) bci:64 line:190 
> (Compiled frame)
> * com.sun.tools.jdi.EventQueueImpl.remove(long) bci:18 line:97 (Interpreted 
> frame)
> 0x00007f1321009543 * com.sun.tools.jdi.EventQueueImpl.remove() bci:2 line:83 
> (Interpreted frame)
> 
> This pull request aligns the indentation. So It will be able to improve 
> readability.
> 
> In this pull request the address part is filled with white spaces. The amount 
> of space is calculated from VM's logarithmic address size and lastly 2, which 
> is the length of "0x", is added.
> 
> I checked the output on 64-bit and 32-bit OS.
> 
> 0x00007f596cb2a6b7      java.lang.Object.wait(long) + 0xd7 (Native method)
> 0x00007f5965791ec4      * java.lang.Object.wait() bci:2 line:338 (Compiled 
> frame)
>                         * 
> com.sun.tools.jdi.EventQueueImpl.removeUnfiltered(long) bci:64 line:190 
> (Compiled frame)
>                         * com.sun.tools.jdi.EventQueueImpl.remove(long) 
> bci:18 line:97 (Interpreted frame)
> 0x00007f5965009543      * com.sun.tools.jdi.EventQueueImpl.remove() bci:2 
> line:83 (Interpreted frame)
> 0x00007f59650099b3      * jdk.jshell.execution.JdiEventHandler.run() bci:18 
> line:79 (Interpreted frame)
> 0x00007f596500985a      * java.lang.Thread.run() bci:11 line:831 (Interpreted 
> frame)
> 
> 0x035002d4      java.lang.Object.wait(long) + 0x94 (Native method)
> 0x034fcd3c      * java.lang.Object.wait() bci:2 line:338 (Compiled frame)
>                 * com.sun.tools.jdi.EventQueueImpl.removeUnfiltered(long) 
> bci:64 line:190 (Compiled frame)
>                 * com.sun.tools.jdi.EventQueueImpl.remove(long) bci:18 
> line:97 (Interpreted frame)
> 0x03296839      * com.sun.tools.jdi.EventQueueImpl.remove() bci:2 line:83 
> (Interpreted frame)

What testing have you done?

Please update the copyright to 2021.

I noticed that in you original jstack output there is only 1 space after the 
address, and now there appears to be multiple spaces. However, when I produce 
the jstack out there's already multiple spaces. Was there some formatting issue 
with your original output?

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/tools/PStack.java line 172:

> 170:                          // print java frame(s)
> 171:                          for (int i = 0; i < names.length; i++) {
> 172:                              if (0 < i) {

Please use `i > 0`

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/tools/PStack.java line 85:

> 83:         }
> 84:          final boolean cdbgCanDemangle = cdbg.canDemangle();
> 85:          String fillerForAddress = " ".repeat(2 + (2 << 
> VM.getVM().getLogAddressSize())) + "\t";

Why not use `2 * VM.getVM().getAddressSize()` rather than `(2 << 
VM.getVM().getLogAddressSize()`?

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

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

Reply via email to