- PR -

プログラムを修正してデバッグしても、修正した結果が反映されません。

投稿者投稿内容
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-05-28 13:23
よこけんさん,お忙しいのに大変親切なご指導を頂本当にありがとうございます。
引用:

よこけんさんの書き込み (2008-05-28 11:20) より:
Release ビルドなら正常に行ったんですね。(理由は見当つきませんが^^
そしたら、ひとまずは常に Release ビルドで開発を進めてしまうのもアリかと思います。(Debug ビルドと Release ビルドについてはしっかり抑えておくことをお勧めします。)


分りましたDebug ビルドと Release ビルドについて勉強しておきます。
また、binとobjフォルダを削除すると正常にプログラム変更が反映される新バージョンが立ち上がります。そしてこのプロジェクトの「構成マネージャ」はDebug のままですが、正常に動作しています。

お忙しいところすみませんが、以前(投稿日時: 2008-05-27 15:55)に質問された
引用:

すみません、一つ言い忘れてたのですが、ソースコードに変更を加えてから試してください。 印刷ボタンを配置しただけだと、ソースコードに変更が入らないと思います。(非表示の〜.designer.vbファイルには変更が入りますが・・・。)


この内容は「印刷ボタンを配置すると*.designer.vb は更新されるがソースコードに変更がないと*,vb は更新されていない。よってデバッグでは更新された*.designer.vb は旧バージョンが立ち上がり、更新されていない*,vb は現行バージョンが立ち上がっているから、ブレークポイントでストップしている」と予測されてのご質問だったのでしょうか。?
お忙しいので何時でも結構ですが、教えていただければ幸いです。






[ メッセージ編集済み 編集者: One.net 編集日時 2008-05-28 13:25 ]
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2008-05-28 15:48
引用:
One.netさんの書き込み (2008-05-28 13:23) より:
また、binとobjフォルダを削除すると正常にプログラム変更が反映される新バージョンが立ち上がります。そしてこのプロジェクトの「構成マネージャ」はDebug のままですが、正常に動作しています。


うーん、そうですか。
そうすると、配置場所に原因があったってことなのかなぁ…??
僕には見当つきません ^^;

引用:
One.netさんの書き込み (2008-05-28 13:23) より:
この内容は「印刷ボタンを配置すると*.designer.vb は更新されるがソースコードに変更がないと*,vb は更新されていない。よってデバッグでは更新された*.designer.vb は旧バージョンが立ち上がり、更新されていない*,vb は現行バージョンが立ち上がっているから、ブレークポイントでストップしている」と予測されてのご質問だったのでしょうか。?



そうですね、実行ファイルのビルド時に使用されたソースコードと比べ、*.vb ファイルは相違点がないため現行バージョンと判断され、*.vb ファイルのデバッグが可能であった、ということです。
_________________
C#と諸々
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-05-29 11:27
今回のトラベルに対して大勢の先輩から助けられ、明快な原因はまだわかっておりませんが、おかげさまでトラブルを回避することが出来ました。

その間、ご指導やご指摘をいただき大変ありがとうございました。問題の状況を尋ねられているときは、その状況説明や指摘されたテストの結果報告で忙しく、何をどんな意味で尋ねられているのか等を検証する余裕もありませんでした。

あとになって読み返してみるとデバッグやビルドに関するトラブルのチェック項目が多岐にわたっている事がわかりました。今後のトラブル対応の意味からも今回指導や指摘いただいたことを私なりにまとめ、以下の通り報告いたします。

引用:

【質問内容】
昨日から開発中のプログラムに改善を加えてもその改善結果が反映されません。
具体的な例で 説明しますとメインメニューに[印刷]ボタンを配置したのにデバッグしてもメインメニューのフォームに[印刷]ボタンは表示されていません。またそれらしいエラーの発生していなくプログラムは 正常に動作しています。

ただし正常に動作している内容は昨日改善(修正)を加えた以前の状態で動作していて、改善後の内容は反映されていません。 念のためにメインメニューのLoad時にメッセージを挿入してみましたが、挿入したメッセージも表示されません。


以下、状況説明をQ&A形式で連記しました。

◆1.ソリューションのリビルドを試してください → デバッグしても修正画面が反映されません。
◆2.ソリューションのクリーン→ソリューションのビルド を試してください 。
−−→ クリーンの方法が分らず未対応
◆3.エクスプローラでプロジェクトフォルダ内の bin フォルダと obj フォルダを削除してからビルド下さい。
−−→ bin フォルダ と obj フォルダを削除してからビルドしても結果は同じでした。
◆4.該当プロジェクトの作り直し (各コンテンツは流用できるのでそれほどの手間ではないかと)
引用:

【遅くなり翌日報告】
新たなプロジェクト(My Documents\WindowsApplication1)を作成し、ここに バックアップしておいた現行プロジェクトを(*.sln、*.suo及びプロジェクトフォルダー)
をコピーしましたがソリューションエクスプローラにMyProject,app.config,Form1.vb
しか表示されません。デバックしても数多くのエラーが発生します。


◆5.改善後の.vbファイルのタイムスタンプを調べてはどうか。→意味を理解できず未対応
引用:

調べ方は、ソリューションエクスプローラで該当.vbファイルを右クリックしてプロパティウィンドゥで「完全パス」項目を確認してからエクスプローラでそのパスの.vbファイルのタイムスタンプ(更新日時)を見てください。 これが編集直後の日時でなければ他のみなさんが指摘されている「修正対象がビルド対象でない」の可能性が大きいでしょう。


※この方法は別のトラブルでも有効な方法だと思われます。ただしIDEでは次の点に注意が必要
・エクスプローラの更新日時はIDEを閉じてプロジェクトが保存されないと更新されない。
・デザインのみの修正でも .vb も更新されるが、コードのみの修正では .Designer.vb は更新されない。
◆6.現象の発生しているアセンブリは exe ファイルですよね?→ はい
◆7.修正した.vb とビルド対象の.vbが違っていて改善前の.vbをビルドしていませんか
−−→ 再確認しましたが同じ.vb です。
◆8.修正した.vb とよく似た .vbを見ていることはありませんか→ ありません。9のテストで証明
◆9.スタートページの一番最初にブレークポイント貼って止まりますか。
−−→ ブレークポイントに黄色い矢印が出てとまりました。
※このことはブレークポイントを設定した.vb とビルドした.vb が同じであることも実証している。
◆10.ソースコードに変更を加えてから9のブレークポイントを試してください。
−−−→ ブレークポイントで止まりません。
※スタートフォームに「MessageBox.Show("テスト中です。")」を挿入した。このことは[印刷]ボタンを貼りつけただけの.Designer.vb 編集(更新)されたこととなり貼りつける前の旧バージョンがビルドされ、ブレークポイントのみを設定した.vb は編集(更新)していないことで現行バージョンがビルドされてブレークポイントで止まったと予測される。続けてコードにMessageBox.Showを挿入編集後デバッグするとブレークポイントでは止まらずMessageの表示もなかった。
引用:

実行ファイルのビルド時に使用されたソースコードと比べ、*.vb ファイルは相違点がないため現行バージョンと判断され、*.vb ファイルのデバッグが可能であった、ということです。


引用:

※止まらなかったブレークポイントを右クリックすると以下のようなメッセージが表示されます
ブレークポイントは、現在の設定ではヒットしません。ソースコードが元のバージョンと異なります。ソースコードがことなるときにブレークポイントがヒットされるためにはブレークポイント上で右クリックし、「場所...」を選択してから「元のバージョンと異なるソースコードを許可する」チェックボックスをONにします。
全てのブレークポイントにこの許可するには[ツール]メニューから[オプション]をクリックします。「全般」でオプション[元のバージョンと完全に一致するソースコードのみを使用する]を無効にします。
※ブレークポイントを右クリックしても「ブレークポイントの削除」しか表示がありません
※[ツール]メニューから[オプション]→「環境」→「全般」には次の項目しかありません。
□ステータスバーの表示
□[閉じる]ボタンをアクティブなツールウインドウに対してのみ実行する
□[自動的に隠す]ボタンをアクティブなツールウインドウに対してのみ実行する
□環境ツールをアニメーションで表示


◆11.VS のソリューションエクスプローラで構成マネージャにビルドにチェックがある事を確認。
−−→確認方法が分らず未確認(後で確認方法伝授してチェックが入っていることを確認)
引用:

bin と obj の削除も試してもらっているのでこれはありえないと思いますが、一応。
チェックが入っていないプロジェクトはソリューションのビルド時にビルドされません。


引用:

2005 Express Editionで構成マネージャを表示させるには
1.[ツール]−[オプション]を選択。
2.「すべての設定を表示」というチェックボックスをチェックする。
3.表示されたツリーから[プロジェクトおよびソリューション]−[全般]を選び、 「ビルド構成の詳細を表示」をチェックする。
4.[ビルド]メニューに[構成マネージャ] が追加されます。


◆12.VBの場合、メニューとかのリソース管理はどんな風になってるか。 → 力不足で未回答
※VCだとリソースファイルが別にあってそれを編集しますけれど。 リソースが反映されていなくて画面上にも出ないのかなぁ。
◆13.ソリューションファイル(*.sln)をメモ帳などで開いてプロジェクトファイルのパスを確認する
−−→ 確認(修正プロジェクトのパス)
◆14.そのプロジェクトファイル(*.vbproj)をメモ帳などで開いて<Compile Include="VBファイル.vb"> となっているVBのファイルのパスを確認する。
−−→ 力不足で未確認
◆14.ツール メニューのオプション→ 「プロジェクトおよびソリューション」の「ビルド/実行」は?
引用:

【結果報告】
ビルド日開始前に行う保存の操作[全ての変更を保存]
[1]並行にビルドするプロジェクトの最大数
□実行時にスタートアッププロジェクト及び依存関係のみをビルドする (False)
実行時にプロジェクトが古い型のとき[常にビルドする]
実行時にビルド又は配置のエラーが発生したとき[古いバージョンを起動する]
□新しいバージョンに現在選択されているプロジェクトをスタートアッププロジェクトとする
MSBuild プロジェクトビルドの出力の詳細[最小]


−−→実行時にビルド又は配置のエラーが発生したとき[古いバージョンを起動する] を「起動時に確認する」や「起動しない」に設定して実行しましたが以前と同様で解決しません。
◆16.他の画面に関しても同様に変更が反映されないのでしょうか? → はい(他のフォームも同じ)
◆17.保存されてないのでは? → プロジェクトは何度も保存しています。
◆18.以下の手順も試してください?
1. 適当な場所にブレークポイント貼っておいてデバッグ実行
2. ブレークポイントで止めた状態にする
3. ソースコードを適当に右クリックし、クイックウォッチを開く
4. クイックウォッチに AppDomain.CurrentDomain.BaseDirectory と入力
5. [再評価] ボタンをクリックし、表示された値を確認
※これはアプリケーションの実行パスを調べている。
引用:

【確認報告】
名前:AppDomain.CorrentDomain.BaseDirectory
値: c:\VisualBasic2005\abc\abc\bin\Debug\ (abcはプロジェクト名)
型: String


◆15. [構成マネージャ] ウィンドウの [アクティブ ソリューション構成] を Release に変更して閉じてください。 あとはリビルド後 Ctrl + F5 で実行してください。
引用:

【結果報告】
なんとメインメニューに追加したボタンが配置されて表示されました。
またメインメニューに 次のコードを追加してデバッグしますとメッセージが表示され
[OK]ボタンで正常にメインメニューが表示され、画面には追加配置したボタンが
表示されています。
MessageBox.Show("ただいまテスト中です。")


◆19.binとobjフォルダを削除して、そのプロジェクトをフォルダごとマイドキュメントに移動すると変化が起きる?
−−→15のテスト後に19のテストをしたためか、プロジェクトをマイドキュメントに移動しなくても正常に動作するようになりました。
◆20.DLL作っていますか? → いいえ
◆21.Debug ビルドと Release ビルドについてはしっかり抑えておくことをお勧めします。
−−→ はい(以下に参考サイトを)
http://www.nitoyon.com/vc/tutorial/project/build_detail.htm
http://www.atmarkit.co.jp/fdotnet/special/msbuild01/msbuild01_01.html
http://www.donguri.sakura.ne.jp/~shock8/wisper/debug_release.html


◆追記22.ターゲットファイル(*.Designer.vb や*.vbファイル)よりもソースファイル(bin\Debug\フォルダの*.exe ファイル)の方が古いといつまでたってもビルド対象になりません。よってビルド対象であるためにはターゲットファイルよりソースファイルが新しい事をエクスプローラの更新日時で確認下さい。
(DLLを作成する場合のターゲットは*.dllです)
−−→ 後日(投稿日時: 2008-05-29 12:51及び2008-05-30 17:35)に指導されたためテストしていません。



【今後の反省点】
・この現象は目に見えてわかるような違いが発見されない可能性があるから、原因は追究しておいた方がいい。
・指摘を受けた時には指摘内容が理解できず(例:タイムスタンプ=更新日時)回答者に失礼があったこと。
・まだまだ基本的なことを収得できていなく、勉強が必要なこと。
・プログラム開発中は毎日バックアップをとること
・急いだことは理由になりませんが、誤字は多いこと。


以上

[ メッセージ編集済み 編集者: One.net 編集日時 2008-05-29 12:48 ]
追加→◆追記22

[ メッセージ編集済み 編集者: One.net 編集日時 2008-06-02 14:19 ]
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2008-05-29 12:51
指摘済みかもしれませんが、ひょっとして作業しているPCの時計が狂ってたりしませんか?

あるいは、時計が狂っているPCから作業ファイルをコピーしてきたとか。
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-05-29 13:15
渋木宏明(ひどり)さん、ご指摘ありがとうございます。
おっしゃるとおりです。実は開発中のプログラムは1ヶ月に1度しか実行できない機能がありまして
このテストを行うたびにこの制限に引っかかり、PCの時計を変更して行っていました。
テストを実行してから元に戻すことを忘れことがよくあり、先日も忘れていて修正しました。
それがトラブル発生した日かは確認出来ませんが、おそらく27日だったような気がします。
6月にデバッグして5月に再度デバッグしたことになり以前と比較できなくなったものと予測します。

これですっきりいたしましたが、今までご指導いただきました先輩にはなんとお詫びしたらよいか。
この場を借り、この通りお詫びいたします。
渋木宏明(ひどり)さん、本当にありがとうございました。
_________________
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2008-05-29 13:40
うーん、でも bin, obj フォルダを一度削除してるんですよね。
以下の手順で試してみましたが、正常にビルドされます。

1. 時計を一日進めた状態でデバッグ実行
2. 時計を元に戻す
3. bin, obj フォルダを削除してデバッグ実行

うーん。。。
_________________
C#と諸々
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2008-05-29 13:47
引用:

以下の手順で試してみましたが、正常にビルドされます。



時計が狂った(進んだ)状態でソースを変更しないと再現しないです。
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2008-05-29 13:54
すみません、記述漏れです。
手順 3 の時点でソースに変更を加えてます。
それと、bin, obj フォルダを削除せずに試せば再現するということは確認済みです。

// 追記
もちろん、手順 1 の時点で未来のアセンブリが生成されるようにして試しています。
_________________
C#と諸々

[ メッセージ編集済み 編集者: よこけん 編集日時 2008-05-29 14:07 ]

スキルアップ/キャリアアップ(JOB@IT)