質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

13407閲覧

eclipse上でのjavaのデバッグ実行の仕組みについて

nob777

総合スコア112

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

1クリップ

投稿2016/02/20 13:00

eclipse上でのjavaのデバッグ実行時の仕組みについてご教授願います。

eclipse上でjavaをデバッグ実行中に該当ソースのclassファイル情報を確認しましたが、
特に更新されておらず、リコンパイルされているようには見受けられませんでした。
eclipse上でのデバッグ時の内部動作として"-g"オプション付きでリコンパイルされると思い込んでいましたが違うようです。

■質問
eclipse上でのjavaのデバッグ実行時の仕組みについてご教授願います。
なぜ、デバッグ実行時にclassファイルが更新されていないのでしょうか?
デバッグ情報が埋め込まれたclassファイルは生成されるが、メモリ上のみに展開されているというような動作となっているのでしょうか?それとも別フォルダに一時的にclassファイルを生成している?

以上、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Eclipse はデフォルトの設定ではデバッグ情報ありでコンパイルしていると思いますよ。

Window->Preferences->Java->Compiler の Classfile Generation

を見てみてください。
(Eclipse のバージョン等によって場所は多少違うかもしれません)

Compilerオプションの初期状態

(参考)デバッグ情報を切るとどうなるか

例えばプロジェクトローカルの設定で(プロジェクト右クリック->Preference)
以下のようにデバッグ情報出力のチェックボックスを外したとします。

Compilerオプションからデバッグ情報出力を外した状態

この状態でブレークポイントを設定してデバッグ実行しようとすると、以下のようなエラーダイアログが表示されます。
デバッグ情報が無い場合のエラーダイアログ

「実行(Run As)」と「デバッグ(Debug As)」の使い分けについて

開発チームの意図を直接ドキュメントで読んだわけではないですが、
使っている感覚としては、「「実行」と同じことを(条件を変えずに)デバッガ上で実行する」というイメージで使っています。

これは、Eclipse のような IDEを使う以前に、
コマンドラインで開発していたときのやり方の延長です。

コマンドライン開発では、

  • 単に実行するとき: コンパイラが出力した実行ファイルを直接実行
  • デバッグするとき:同じ実行ファイルをデバッガから起動、

というやり方をしていました。

デバッグをするときは、デバッガというデバッグのためのプログラムを動かして、
その上で同じ実行ファイルを動かしていたのです。
現在の「デバッグ」で実行してデバッグパースペクティブに切り替えるのは、
この「デバッガを起動してデバッグをする」というような感覚です。
やることを切り替えるというより、同じことをブレークポイントなどが効く環境にから実行しなおすという感じです。

デバッグ用情報の出力に関して

デバッグをするからデバッグ用にコンパイルしなおすというようなことはあまりしていませんでした。
開発中はデバッグ情報を ONのままにして、テストが十分終わった後、
パフォーマンスのためにデバッグ情報を OFF にしたり最適化オプションを ON にしたりしていました。
実際には、パフォーマンスを極限まで必要とされる用途(CAD等の科学技術演算)を除いては、
デバッグ情報を残したまま運用まで行うことも多かったです。
これは、障害が起きた場合の原因解明のしやすさの方が、多少のパフォーマンス低下よりも重要だと
考えられるような場合です。
障害が起きたら、障害を起こした時点と同じ実行ファイルをデバッガにかけて障害の原因を調べたのです。

現在の Java のアプリケーションでは、デバッグ情報を外すことはめったにないと考えていいと思います。
極限のパフォーマンスを追及するような用途では C/C++ が使われますし、
絶対的なパフォーマンスよりも運用の安定性、障害復旧の迅速さといったことの方が
重要度が高い場合が多いからです。

投稿2016/02/20 13:06

編集2016/02/20 15:49
kozuchi

総合スコア1193

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nob777

2016/02/20 15:15

ご回答いただきありがとうございました。 実行方法に、「実行」と「デバッグ」を選択できるようになっています。 また、「デバッグ」を選択した場合のみブレークポイントで止まるため、誤った理解をしておりました。 (デバッグ・パースペクティブの起動有無等、別の理由で分けているのでしょうか・・・)
kozuchi

2016/02/20 15:51

そのあたりの説明が無かったので、「「実行(Run As)」と「デバッグ(Debug As)」の使い分けについて」の説明、というか、「こういう感じで使っている」という話を回答に追加してみました。 ご興味があれば参考までに見てみてください。
nob777

2016/02/20 16:38

とても分かりやすい説明をしていただき感謝しております。 以前、実運上でサーバーサイドのjavaをjavapで確認する機会がありましたが、 その環境でも確かにデバッグ情報が埋め込まれていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問