スタックトレースを削る
スレッドダンプやログに出力されるスタックトレースはしばしば長大になる。
長大なスタックトレースを解析するとき、あまり注目しない行を削ると見通しがよくなる。
あまり注目しない行をどう判定するかが問題だが、個人的経験では、同じパッケージ内での呼び出しを省略すると3割くらい削れる。
機械的作業なので、コピペでできるようにしてみた。
https://github.com/hashimoton/cauldron
「- locked」の前は省略しないとかdoFilter()が含まれたら省略する(サーブレットフィルタを意識したもの)とか、いくつかルールを追加している。
例えばこれが
"Worker-8: reload maven project" #48 prio=5 os_prio=0 tid=0x0000000023eb4000 nid=0x2f78 runnable [0x000000002f92b000] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) at java.net.SocketInputStream.read(SocketInputStream.java:170) at java.net.SocketInputStream.read(SocketInputStream.java:141) at sun.security.ssl.InputRecord.readFully(InputRecord.java:465) at sun.security.ssl.InputRecord.read(InputRecord.java:503) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973) - locked <0x00000000d2b1a418> (a java.lang.Object) at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:930) at sun.security.ssl.AppInputStream.read(AppInputStream.java:105) - locked <0x00000000d2b38328> (a sun.security.ssl.AppInputStream) at okio.Okio$2.read(Okio.java:140) at okio.AsyncTimeout$2.read(AsyncTimeout.java:237) at okio.RealBufferedSource.indexOf(RealBufferedSource.java:358) at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:230)
こうなる。
"Worker-8: reload maven project" #48 prio=5 os_prio=0 tid=0x0000000023eb4000 nid=0x2f78 runnable [0x000000002f92b000] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) ... at sun.security.ssl.InputRecord.readFully(InputRecord.java:465) at sun.security.ssl.InputRecord.read(InputRecord.java:503) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973) - locked <0x00000000d2b1a418> (a java.lang.Object) at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:930) at sun.security.ssl.AppInputStream.read(AppInputStream.java:105) - locked <0x00000000d2b38328> (a sun.security.ssl.AppInputStream) at okio.Okio$2.read(Okio.java:140) ...
Pythonで本格的にやっているのがあった。
https://github.com/nir0s/backtrace
Javaの特定パッケージに着目するアプローチ。