JMC-6149: Distinguish by package with default packages in the traces does not work

Marcus Hirt marcus.hirt at oracle.com
Mon Dec 3 15:40:10 UTC 2018


Looks good Alex!

Kind regards,
Marcus

On 2018-12-03, 16:25, "jmc-dev on behalf of Alex Macdonald" <jmc-dev-bounces at openjdk.java.net on behalf of almacdon at redhat.com> wrote:

    Hi,
    
    This patch addresses JMC-6149 [0], in which the stack trace tree disappears
    when a default package is encountered when selecting the option
    "Distinguish Frames by Package". For testing purposes, I have been using
    the memoryleak.jfr recording that is available as an attachment on JMC-6127
    [1]
    
    The problem here is a NPE being thrown when checking whether if the
    category object equals the cached lastCategory object [2]. If the current
    frame has no corresponding package then the package attribute will be null
    [3], which then causes "category" to be null.
    
    In StructTypes.java [4], there are precautions in place for handling
    unknown methods and classes [5] so null values aren't passed around, but
    nothing in place to handle unknown packages. This patch introduces a null
    check in the IMCType implementation to mimic how the method [6] and class
    [7] implementations currently handle null values. Additionally, a null
    check must be made in the convertNames() and getName() methods that access
    the package name, because if it is null then the
    MethodToolkit.refTypeToBinaryJLS() [8] will throw an NPE when trying to get
    the length of the name.
    
    I've taken a couple screenshots to show the before and after of this patch,
    as well as a couple gifs to show how to reproduce the behaviour. Link to
    imgur album: https://imgur.com/a/0hNekjh
    
    Before (image): https://imgur.com/VnvwMkQ
    Before (gif): https://imgur.com/gZcPDCF
    After (image): https://imgur.com/TOyalSG
    After (gif): https://imgur.com/7GaCMII
    
    Thoughts?
    
    Cheers,
    
    Alex
    
    [0] https://bugs.openjdk.java.net/browse/JMC-6149
    [1] https://bugs.openjdk.java.net/browse/JMC-6127
    [2]
    http://hg.openjdk.java.net/jmc/jmc/file/997060a24c42/core/org.openjdk.jmc.flightrecorder/src/main/java/org/openjdk/jmc/flightrecorder/stacktrace/StacktraceModel.java#l197
    [3] https://imgur.com/ktUJvo5
    [4]
    http://hg.openjdk.java.net/jmc/jmc/file/997060a24c42/core/org.openjdk.jmc.flightrecorder/src/main/java/org/openjdk/jmc/flightrecorder/internal/parser/v1/StructTypes.java
    [5]
    http://hg.openjdk.java.net/jmc/jmc/file/997060a24c42/core/org.openjdk.jmc.flightrecorder/src/main/java/org/openjdk/jmc/flightrecorder/internal/parser/v1/StructTypes.java#l67
    [6]
    http://hg.openjdk.java.net/jmc/jmc/file/997060a24c42/core/org.openjdk.jmc.flightrecorder/src/main/java/org/openjdk/jmc/flightrecorder/internal/parser/v1/StructTypes.java#l580
    [7]
    http://hg.openjdk.java.net/jmc/jmc/file/997060a24c42/core/org.openjdk.jmc.flightrecorder/src/main/java/org/openjdk/jmc/flightrecorder/internal/parser/v1/StructTypes.java#l661
    [8]
    http://hg.openjdk.java.net/jmc/jmc/file/997060a24c42/core/org.openjdk.jmc.common/src/main/java/org/openjdk/jmc/common/util/MethodToolkit.java#l219
    
    




More information about the jmc-dev mailing list