DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ステップ実行で通らない場所の特定方法

環境/言語:[WinXP VB6 IE6 Script]
分類:[VB6以前]

いつもお世話になってます、YRです。

現在VB6でプログラムのトレースを行っているのですが
いつ通ってるかわからないメソッド・サブプロシージャーがあり、
原因がわかっておりません。

例を挙げますと

dim A as class1 '参照

private sub command_click ()

dim B as string
set AA = new A

A.set(B)

sub

private sub class1_onControl…
処理1
end sub

private sub class1_SetData…
処理2
end sub

とあり、ステップ実行(F8)でトレースを行うとclass1_ から始まるメソッドは
通らないのですが、ブレークポイントを付加すると確かに通ってたりしています。
class1自体は参照設定でCOMを指定しているので、それ以上の解析は出来ません。

自動的にメソッドが呼ばれる理由、呼ばれている場所を特定するには
どうすればよろしいでしょうか?
定義を調べてもclass1.set(String) 等の表記しかなかったり

読みづらい文章で申し訳ありませんがよろしくお願いします。
■No18772に返信(YRさんの記事)
> いつもお世話になってます、YRです。
>
> 現在VB6でプログラムのトレースを行っているのですが
> いつ通ってるかわからないメソッド・サブプロシージャーがあり、
> 原因がわかっておりません。
>
> 例を挙げますと
>
> dim A as class1 '参照
>
> private sub command_click ()
>
> dim B as string
> set AA = new A
>
> A.set(B)
>
> sub
>
> private sub class1_onControl…
> 処理1
> end sub
>
> private sub class1_SetData…
> 処理2
> end sub
>
> とあり、ステップ実行(F8)でトレースを行うとclass1_ から始まるメソッドは
> 通らないのですが、ブレークポイントを付加すると確かに通ってたりしています。
> class1自体は参照設定でCOMを指定しているので、それ以上の解析は出来ません。
>
> 自動的にメソッドが呼ばれる理由、呼ばれている場所を特定するには
> どうすればよろしいでしょうか?
> 定義を調べてもclass1.set(String) 等の表記しかなかったり
>
> 読みづらい文章で申し訳ありませんがよろしくお願いします。
>
>

YRさん、こんにちは。
各メソッドにコンソール出力を入れることで、何処の処理を通過したのかを記録できると思います。
.NETだったら「Console.WriteLine("処理1")」
VB6だったら「Debug.Print "処理1"」
といった感じです。
> YRさん、こんにちは。
> 各メソッドにコンソール出力を入れることで、何処の処理を通過したのかを記録できると思います。
> .NETだったら「Console.WriteLine("処理1")」
> VB6だったら「Debug.Print "処理1"」
> といった感じです。

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

そういえば、debug.printってありましたね。いつもブレークでとめて
マウスで中身を確認とやっていたので、大助かりです。
ただ、それでも処理1と処理2が呼ばれる場所が不明だったりします。

何か設定等でもあるんでしょうかね・・・

ぺがらぼさんのおかげで呼ばれる順番等は確認できました。ありがとうございます。
■No18780に返信(YRさんの記事)
> ただ、それでも処理1と処理2が呼ばれる場所が不明だったりします。

■No18772に返信(YRさんの記事)
> 自動的にメソッドが呼ばれる理由、呼ばれている場所を特定するにはどうすればよろしいでしょうか?

なぜ、解析したいのかわからないのですが、COM 側のことは、COM 側に任せましょう。
■No18780に返信(YRさんの記事)
>ただ、それでも処理1と処理2が呼ばれる場所が不明だったりします。

■No18772に返信(YRさんの記事)
>自動的にメソッドが呼ばれる理由、呼ばれている場所を特定するにはどうすればよろしいでしょうか?

なんとなく想像ですが、スレッドが動いてませんか?
■No18781に返信(じゃんぬねっとさんの記事)
> ■No18780に返信(YRさんの記事)
>>なぜ、解析したいのかわからないのですが、COM 側のことは、
COM 側に任せましょう。

今回は既存してるCOMを使用するにあたり必要な情報を調べたかったのですが
デバッグで動かしてると、ブラックボックス的な部分が多く、どのような
処理を行ってるかを確認したかった次第であります。
おっしゃるとおり、COMはCOMに任せるのが一番ですね。

■No18782に返信(ぺがらぼさんの記事)
> ■No18780に返信(YRさんの記事)
> >なんとなく想像ですが、スレッドが動いてませんか?

ごめんなさい、意味がわかりません・・・

まだ、暫定ですが、宣言部に WithEvent という記述がありました。
同じイベントをまとめて呼び出す?のような意味があるとわかり、
処理1や処理2が呼ばれるのはこいつが原因のようか感じがします。
もう少し自分で調査を行ってみたいと思います。
> class1自体は参照設定でCOMを指定しているので

> private sub class1_onControl…

>private sub class1_SetData…

それぞれclass1のイベントのようですから、呼び出し元は、
class1の内部のどこかです。class1のソースはないようですから、
class1のマニュアルを読むなり、マニュアルがないのであれば、
作成者に問い合わせましょう。

DOBON.NET | プログラミング道 | プログラミング掲示板