RFR: 8263572: Output from jstack mixed mode is misaligned
Chris Plummer
cjplummer at openjdk.java.net
Mon Mar 15 19:25:08 UTC 2021
On Mon, 15 Mar 2021 07:29:16 GMT, Koichi Sakata <ksakata at 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
More information about the serviceability-dev
mailing list