投稿数 - 437, コメント - 59540, トラックバック - 156

ASP.NET - Redirect してる場所はどこですか?

プロジェクトが巨大になってくると、一人の人間がコード全体を熟知しているという事はまずあり得ない。他人の書いたコードはおろか、自分の書いたコードでさえ記憶に残っているか怪しいものだ。

ASP.NET の場合、フレームワークが順にイベントを発行し、ユーザーコードはそのイベントを捕まえて処理を行うという形式なので、デバッガで順にコードを追う事は難しい(Windows アプリケーションもある意味で同様だが)。ユーザーコントロールや各種ライブラリが相当数あり、そのどれかに、ある条件下で HTTP Redirect されるコードがあると問答無用で処理が中断されてしまうため、更にデバッグの難度は増す。

テクニックという程、偉そうなものではないが、「ある条件下で HTTP Redirect される場所」がどこかというのを簡単に探せる方法を紹介しよう。

ASP.NET では「HTTP Redirect とはスレッドの中断」の事である。要するに ThreadAbortException がスローされる。これを知っていれば「HTTP Redirect 要求をサーバーが行ったとき」にデバッガで止める事ができる。

どうするか。

Visual Studio のデバッグの設定で「例外スロー時の挙動」を変更できる。例外がスローされたとき、ハンドリングしていない場合にデバッガで止めるのか、それとも例外がスローされたら問答無用でデバッガで止めるのかを設定できる。デフォルト設定は「ハンドリングされていない場合はデバッガで止め、ハンドリングしている場合は処理続行」だ。

ThreadAbortException をハンドリングする事はまずないので、HTTP Redirect すればデフォルトでデバッガで止めて欲しいところだが、実際は、ASP.NET フレームワークが ThreadAbortException をハンドリングしているために処理は続行される。従って「例外がスローされたらデバッガで止める」という設定をしておけば、HTTP Redirect 要求時にデバッガで止める事ができ、HTTP Redirect を行っているコードの場所がわかるという寸法だ。

投稿日時 : 2007年12月21日 12:43

フィードバック

# re: ASP.NET - Redirect してる場所はどこですか?

while ループから抜けるために throw を使っている糞なコードの場合はバリバリ引っかかってうざそうなのですがどうすればよかとですか('A`)
2007/12/21 13:14 | melt

# re: ASP.NET - Redirect してる場所はどこですか?

我慢するか、「どの例外クラス」まで細かく設定できるのでそれで頑張るかですな。
2007/12/21 13:17 | 囚人

# re: ASP.NET - Redirect してる場所はどこですか?

おお、例外クラスまで設定できるんですね。さっすが Visual Studio。
2007/12/21 13:54 | melt

# ブランド財布コピーN級激安通販専門店

http://www.ooobrand.com/bags/hermes/2248.html
激安エルメス ケリー, エルメスN品 ボリード}}}}}}
2016/02/16 22:09 | v7od2se390

# エルメスコピー

2017年春夏新作商品大好評中
★━┓+┏━┓☆。
┃★┣━┫●┣━┓*
┗━┫○┣━┫◎┃
  ┗━┛ ┗━☆
 * +  +*
2017新しいリリースシャネルシャネルシャネルの靴超■超-N製品!
◆靴超N超N品通販のブランドボッテガ ヴェネタの靴
評判第一、品質リリーフ最低価格保証
良い品質、低価格、評判最初の本当の写真
エルメスコピー http://www.newkokoku.com
2017/10/12 21:25 | epmgmlzg@goo.ne.jp

# シャネルコピー

とても迅速な対応で良かったです!
また買いたいものがあったら、こちらで探そうと思っています。
購入したお財布も、とても使いやすく気に入っているので、大切にします!
シャネルコピー http://www.newkokoku.com
2017/10/27 14:18 | csgrpisw@excite.co.jp

コメントの投稿

タイトル
名前
URL
コメント