アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になっております。
java1.6
eclipse3.3

にてabstractクラスのメソッドを呼び出している手前でブレークポイントを設定し、ステップインしてデバックしていくと、
abstractクラスの方のソースがデバックされます。

abstractクラスを継承している実際に流れているソースをデバックする事はできますでしょうか。

今はソースを追う時、abstractメソッドがきた場合、
そのメソッド名でプロジェクト全体を検索して、どのソースが実行されているのかチェックしていますが、たくさんのソースから継承されている場合、現在流れている処理が、どのソースのロジックかを特定するのが大変です。

簡単に特定する事はできますでしょうか。
よろしくお願いします。

A 回答 (2件)

下記のようなテストコードで試してみましたが、foo・barどちらのメソッドも、デバッガでstep intoで実行するとAbsClsではなくClsのほうのソースコードが表示されました。

Eclipse 3.5です。

abstract class AbsCls {
public void foo() {
System.out.println("AbsCls.foo()");
}
abstract public void bar();
}
class Cls extends AbsCls {
public void foo() {
System.out.println("Cls.foo()");
}
public void bar() {
System.out.println("Cls.bar()");
}
}

AbsCls x = new Cls();
x.foo();
x.bar();

あと細かいですが、 ×デバック ○デバッグ です。

この回答への補足

ご回答ありがとうございます。
提示いただいたソースをeclipse3.3で実行してみたところ、
ご指摘のようにClsのほうのソースコードが表示されました。

ソースの書き方のせいなのか。
上手くいく場合と、いかない場合のソースを比べてみて試してみます。

ありがとうございました。
試してみてまた報告します。

補足日時:2009/12/29 12:57
    • good
    • 0

>今はソースを追う時、abstractメソッドがきた場合、


意味が分からないです。abstaractメソッドは処理内容がないメソッドですのでデバッグできないです。

質問したいことはabstractメソッドをオーバーライドしたメソッドのうち、どのクラスのメソッドが実行されているかを知りたいということでしょうか?

上記であると仮定して標準出力(System.out.println();)を使う or log4jでログ出力するのが一番簡単だと思います。

文章を読んだ印象としては質問者さんは継承に対する理解が不足しているように思われますので、
一度、継承やメソッドのオーバーライドに関する知識を整理した方が良いと考えます。

この回答への補足

ご回答ありがとうございます。

たくさんオーバーライドしている場合、
すべてログを仕込むのでしょうか。

自分がつくった所なら構わないですが、他の人が作った所を
動かして解析する場合、できればソースに手を加えたくないです。

確かに自分の文章が良くないですが、
自分の質問しようとしている事が分かっていて、
あえて違う回答をしているように思えて残念です。

補足日時:2009/12/28 18:03
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!