コンパイラのバグレポート書いた話。
発端
趣味プログラミングをしていたら、Javaコンパイラのバグを踏んでしまいました。
コンパイラで例外が発生しました(1.8.0_25)。Bug Paradeで重複がないかをご確認のうえ、Java Developer Connection (http://java.sun.com/webapps/bugreport)でbugの登録をお願いいたします。レポートには、そのプログラムと下記の診断内容を含めてください。ご協力ありがとうございます。 java.lang.ClassCastException: com.sun.tools.javac.code.Type$UnionClassType cannot be cast to com.sun.tools.javac.code.Type$IntersectionClassType at com.sun.tools.javac.code.Types$8.visitClassType(Types.java:1540) at com.sun.tools.javac.code.Types$8.visitClassType(Types.java:1497) at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:778) at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4451)
こんな感じ。
今回は、このコンパイラのエラーメッセージにレポート送ってね、と書いてあったので送った話。
とその書き方を書きます。
これで皆さんも安心してjdkのバグが踏めますね!!(めったに起きるものではない)
追記
今回報告した内容に関してはすでに上位のバージョンで修正済みでした。
すでにバグが上がっていないか、他のjdkバージョンで改善されていないかは
あらかじめ確認が必要ですね。。。。
@aoetk @yy_yank これでは https://t.co/fG0SvYfFyK
— KUBOTA Yuji (@sugarlife) July 16, 2016
@aoetk @yy_yank ついでに修正済みバージョン https://t.co/2nkifIQSs6
— KUBOTA Yuji (@sugarlife) July 16, 2016
バグレポートを書く
Synopsis:
Enter a one line summary of your report. Please be specific
概要を教えてよ、とのこと。
ざっくり、バグのタイトルを付けます。
Full OS version:
Include the full OS version here (use ‘uname -a’ for Solaris/Linux, ‘ver’ for Windows). List multiple OSes if applicable.
OSのバージョン教えてね、とのこと。
ボクはMac使ってるので、下のように書きました。
OS X El Capitain ver 10.11.2
Additional Configuration Information:
Include any additional relevant information about your system, network, or environment configuration (e.g. the type of sound card for an audio problem).
設定で何か特に言っとくことある?
ということで、あえて言うならIDEかなぁ、とか思って使ってるIDEを書きました。
IntelliJ IDEA 15 CE
Development Kit or Runtime version:
Paste the output of ‘java -version’ here.
バージョンを書け、と。
今回は1.8の古いの使ってたので、terminalからversionの出力をコピペ。一応javacのversionも送っておきました。
java -version
java version “1.8.0_25”
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
javac -version
javac 1.8.0_25
Description:
Enter a detailed description of the problem. Please describe only one problem per report. For multiple problems, file a separate report for each one.
バグの説明をしてください、と。
趣味プログラミングをしてたら、こんなバグが発生しました、と書きました。
Frequency: How often does the bug occur?
そのバグってどのぐらいの発生頻度なの?
コンパイルするたびに再現したため、Alwaysを選びました。
Always
Regression: Was this working in a prior release?, If yes, which one?
他のjdkバージョンでは動いたの?動いた場合はそのjdkのバージョンを選択してね。
他のバージョンでの動作確認はサボってしなかったため、未選択。
Steps to Reproduce:
Describe the step-by-step process we can follow to reproduce this bug.
どういう手順を踏んでそういったバグが出たか書いてね。
ステップバイステップで細かくね。
ということで、こんな感じで書きました(英語でね)。
- とあるクラスを作りました。
2.こんな感じでそのクラスを参照しました。
3.gradle buildコマンドを実行しました
Expected Result:
Describe the results you were expecting when performing the above steps.
期待値はなに?とのこと。
ビルドにサクセスして欲しいんや!と書きました。
Actual Result:
Please report the actual results that you saw.
実際にはどうなったの?とのこと。
java.lang.ClassCastExceptionが発生してコンパイルできなかったよと書きました。
Error Message(s)/ Crash Logs:
Exact text of any error message(s) that appeared or any trace information available. Please paste the contents of the log file created (For example: hs_err_pid2416.log) as a result of this crash.
エラーログを見せてね、とのこと。
スタックトレースを貼っつけました。
Source code for an executable test case:
Complete, compilable Java SOURCE CODE that demonstrates the problem. Do not include an entire application; just provide a test case that shows the problem and nothing else. Be as brief as possible.
完全に再現できるソースコードをくれ、とのこと。
再現するために必要な、とある3クラスのminimum実装を書いて送りました。
Workaround:
Please provide a temporary method for bypassing this bug, if you have found one.
回避策はないかな?あったら分かってたら書いてね、とのこと。
ちょっと呼び出し方を変えれば回避できたので、回避方法を書きました。
Severity:
What impact does this issue have on developing your software?
どのぐらいこのバグってインパクトある?とのこと。
つまり、商用利用想定ですよね。これがサービスに大きく関わり、損失があるから、はよ!!!とかそういうのを伝えればいいと思います。
僕の場合は趣味なので支障なし。
選択肢で以下を選びました。
No Impact.
Support:
Would you be interested in our support options which can provide faster and more appropriate service? More information is available at Oracle Java SE Support describing the various paid services that provides online and telephone support services.
Oracleのサポートを受けたい?とのこと。
なんか、メールとか飛んで来るんかな?と思ってチェックボックスは外したままとしました。
User Information
Please give us some information about yourself. Be sure to include a valid email address. You will receive confirmation and subsequent updates regarding your report via email.
メールアドレスとお名前教えてちょうだい、とのこと。
書いておきました。
まとめ
ということで、分かってしまえばとても簡単ですね。
一番プロダクトコードで難関なのはソースコードの再現できるやつ送ってよ、ってやつでしょうか。
お堅いところだと苦労しそうですよね。顧客情報が入ってないかとか弊社の技術が漏れないかとか。
そこはうまく依存を外してミニマムに書いて送れば良いと思います!!
ということで、皆さんどんどんレポート書いていきましょう!!(滅多にない)
0 件のコメント:
コメントを投稿