- PR -

.netのデバッグについて

投稿者投稿内容
ばなな
ベテラン
会議室デビュー日: 2005/06/16
投稿数: 91
投稿日時: 2005-07-04 11:48
asp.netのwebアプリケーションで実行して
SQL文でエラーが出たのでSQLを修正し再度実行すると
SQLの修正前のソースが実行(読み込まれています)されます。
ブレークポイントで指定しても実行すると別のとこにブレークポイントがはられています。
こういった現象皆様はございませんか?.NETが壊れているのでしょうか?
ご指導お願いいたします。
葉瀬崎浩樹
大ベテラン
会議室デビュー日: 2005/06/28
投稿数: 115
お住まい・勤務地: 兵庫県
投稿日時: 2005-07-04 12:01
ブレークポイントの設置位置と、実際のソース停止位置と異なる現象でしたら経験あります。

私の場合、同名のWebサービス用の実行ファイルとシンボル情報ファイルが2つずつ存在していたために、上記の現象が発生していました。
その際、不要なファイルを消してみたら正常にデバッグできました。

体感的には、VisualStudioが参照しているシンボル情報ファイルと、
実際の動作しているコードが違った為に発生しているように感じました。
(ローカルテスト用のモックデータのクラスが邪魔してたこともあります・・)

追記:過去ログさんもいろいろご存知のようですよ〜

[ メッセージ編集済み 編集者: 葉瀬崎浩樹 編集日時 2005-07-04 12:07 ]

[ メッセージ編集済み 編集者: 葉瀬崎浩樹 編集日時 2005-07-04 13:22 ]
ばなな
ベテラン
会議室デビュー日: 2005/06/16
投稿数: 91
投稿日時: 2005-07-04 14:03
過去ログを見たところ解決につながらなかったため
ご相談いたしました。葉瀬崎浩樹さんの回避策は
 Webサービス用の実行ファイルとシンボル情報ファイルが2つずつ存在していたために、
 上記の現象が発生していました。 その際、不要なファイルを消してみたら正常にデバッグで
 きました。
とありますが、Framework配下の
Temporary ASP.NET Files内にあるソースを削除ということでしようか?
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2005-07-04 14:34
unibon です。こんにちわ。

引用:

ばななさんの書き込み (2005-07-04 11:48) より:
asp.netのwebアプリケーションで実行して
SQL文でエラーが出たのでSQLを修正し再度実行すると
SQLの修正前のソースが実行(読み込まれています)されます。
ブレークポイントで指定しても実行すると別のとこにブレークポイントがはられています。


あまり良くは知らないのですが、ASP.NETのアプリケーションを再起動しないと、新しくビルドし直した DLL がロードされないと思います。このためには iisreset(iisreset.exe) を動かすか、あるいは global.asax をセーブし直すかのいずれかでできます(もっとも、いわゆるホットでの DLL 差し替えはできるのかもしれませんが、良く知りません)。
ブレークポイントがずれるのも、DLL が古くてソースコードが新しいから、といった副次的なものでしょう。
葉瀬崎浩樹
大ベテラン
会議室デビュー日: 2005/06/28
投稿数: 115
お住まい・勤務地: 兵庫県
投稿日時: 2005-07-04 15:17
「Temporary ASP.NET Filesのソースの削除」については、よく分りません。
環境も無いので(^▽^;)

外しているかも知れませんが、
私のケースをもう少し説明しますと。
-- 状況 --
・ソリューションには、MY_WSというWebServiceプロジェクトを含めている。
・MY_WSと同名のNameSpace・クラス名・WebMethodを持つWebサービスのDllが、
 WebServiceサイトのフォルダ内に存在した。(こちらは想定外のDll)

-- 現象 --
・デバッグ実行で追っかけると、ソリューションに含まれているほうの
 ソースコード上でブレークする。(しかし、停止位置は、ずれている)
・実際に実行されているのは、ソリューションに含めていない、想定外のDll。
・リビルド、Web参照の更新、IISの強制再起動を試したところ、
 正常に動く時もあったが、直ぐに、件の現象が発生するようになった。

-- 結果 --
調査するとサイト内に、想定外のDllがあった。
削除すると正常な位置でブレークするようになった。

このことから
WebService呼出の際、不要モジュールが混入していたため呼出先の解決が正しく行われず、上記現象が発生した、と結論づけました。
ですから、現象そのもののメカニズムは、unibonさんと同じ意見です。

なにか参考になれば幸いです。。

// 過去ログについて気を悪くされてましたらごめんなさい。

// 変なスマイリーがついちゃッたので編集・・
[ メッセージ編集済み 編集者: 葉瀬崎浩樹 編集日時 2005-07-04 15:22 ]

[ メッセージ編集済み 編集者: 葉瀬崎浩樹 編集日時 2005-07-04 15:31 ]
ばなな
ベテラン
会議室デビュー日: 2005/06/16
投稿数: 91
投稿日時: 2005-07-04 16:33
unibonさん葉瀬崎浩樹さんご教授ありがとうございます。
IISの再起動を何度もし、また.NETの修復も行ったのですが効果なしでした・・・
葉瀬崎浩樹さんの現象と似ています。しかし不要なDLLはありませんでした。
色々とありがとうございます。m(_ _)m
unibonさんにご質問ですが、
iisreset.exeを直接実行しても大丈夫でしょうか?
えんぞ@?
ぬし
会議室デビュー日: 2004/07/06
投稿数: 271
お住まい・勤務地: はまっこ
投稿日時: 2005-07-04 17:10
他には確か...
 C:\\Documents and Settings\\xxxx\\VSWebCache
の辺りとか。
# たまにここのキャッシュが原因でなんか変な挙動したような...(詳細忘れ)
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-07-04 21:40
 複数プロジェクトで1アプリケーションとしているときに、コンパイルしたモジュールがアプリケーションディレクトリにコピーされないことがあります。このとき、各プロジェクトのbinディレクトリにあるDLLを、アプリケーションのbinディレクトリにコピーしてやると、新しいコードで実行されます。
 私のところで発生する現象で、マイクロソフトが「発生することがある」としている現象ではありません。

 確定的な現象でないので、参考まで。

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