1

私はVisual Web Developer Expressのデバッグに本当に不満を感じ始めています。Visual Studioデバッガ - それは私だけですか、このデバッガ自体にバグがいっぱいですか?

編集 - これは主にそれは私が二、三のブレークポイントを設定することが多いようでデバッグC#の

に関してれます。そして、何が起こるかは、カーソルがループ内を回って終わることです。私はすべてのブレークポイントを経験していますが、デバッグを終了してブラウザのWebページの結果を表示する代わりに、カーソルが最初にジャンプします。

または私はブレークポイントの途中にあり、カーソルは前のブレークポイントにジャンプし、ループ内でスタックし、再び常に前のブレークポイントにジャンプします。

デバッガが一貫していないように見えることがあります。

これが起こっているときに、時々私は余白に小さな青い点で黄色い矢印を表示します。私はそれにマウスをかざすと "プロセスやスレッドは最後のステップから変わった"と言われています。

また、私は不完全な例外を取得しています。私はoutパラメータを取るC#のメソッドを持っています。カーソルがこのメソッド呼び出しに到達すると、ときどきnull参照例外が返されます。しかし、それはヌルにすることができるoutパラメータです。そして再びVWDは矛盾しているようです。時には私はこの問題を抱えていますが、ほとんどの場合はそうではありません。

私は間違ったことをしていますか、VWDデバッガにねじがゆるんでいますか?

私の心を使用し始めているので、助けてください!

+1

デバッグ用のFirebug C#? –

+0

最適化されたコードをデバッグしていますか?あなたのソースはバイナリと一致していますか?このコードはリリースモードですか?ところで、これはVisual Studioで使用されているのと同じデバッガです。 –

+0

おっと!申し訳ありませんが、c#タグが表示されませんでした。 –

答えて

15

私が疑うことは、同じコード内で同時に多くのスレッドが実行されていることです。 ブレークポイントを停止すると、そのブレークポイントは、実行時に実行していたスレッドだけでなく、すべてのスレッドに適用されます()。 "go"を押して別のスレッドが実行を開始し、最初にブレークポイントにヒットした場合、それは今デバッグしているスレッドです。それは非常に混乱する可能性があります。

私はこのシナリオにいるときに何をするのですか?毎日そのシナリオに入っています。私はの習慣になっています。常にが凍っていますが、実際には欲しいです。デバッグ。そうすれば、プログラムはデバッグ中に効果的にシングルスレッドになります。ただそれらを解凍することを忘れないでください!

+0

スレッドが共有リソースに対して多くのロックを行う場合、この手法は非常に面倒なことに注意してください。 n-1スレッドをフリーズし、デッドロックが発生するまでステップを進め、ロックを保持しているスレッドを見つけ、解凍したスレッドをフリーズし、ロックが外れるまでステップして再びフリーズし、元のスレッドを解凍し、あなたの目は釉薬: –

+0

エリックを助けてくれてありがとう。私はどのように複数のスレッドを実行することができるか分からない。私はMVC Webアプリケーションを実行しています。私は一度だけ実行して、今は複数のスレッドを持つことができますか? –

+0

@ FunkyFresh84: "実行"をクリックすると、複数のスレッドを生成するコードが実行されますか?もしそうなら、あなたは複数のスレッドを持っています。私はデバッガの "スレッド"ウィンドウを開き、すべてのスレッドが何をしているかを注意深く見ていきます。あなたのコードのように見えるものに複数のスレッドがありますか? –

5

あなたやあなたのコードに特有の可能性が高いです。

私は過去18ヶ月間Visual Studio 2010のデバッガを頻繁に使用してきました。その前に、私は一貫して、Visual StudioのC#デバッガを元のVisual Studio .Netリリースまでずっと使いました。大きなバグは見つけられませんでした。ほとんどの場合、私はバグを見つけたと思っていましたが、実際には私の理解の欠陥、または私のコードがありました。最も可能性の高い検索を

は何が起こっているかを理解するために時間をかけて、アイコンと指標は何を意味するか、そしてどのようにデバッガを動作させるために、あなたは以下となります。VWDが正しく動作している

  1. あなたのコードはありません。
  2. プログラミングの理解が深まります。

心の習慣として、私はあなたに「選択が壊れていない」ことを研究するよう勧めます。ここで

は私はあなたの理解が不足していることを考えさせる特定の事柄です:

  1. あなたがこの状況を説明するために間違った言い回しである「...カーソルがこのメソッドの呼び出しに到達したとき」と言います。このメソッドは、カーソルがメソッド呼び出しの中または上を移動するときに呼び出されます。カーソルがメソッド呼び出し上にのみある場合、そのメソッドはまだ実行されていません。
  2. outパラメータが問題をどのようにしているかをどのように知っていますか?オブジェクトに対してメソッドを呼び出す場合、おそらくオブジェクトへの参照はnullですか?
  3. 一貫性のないデバッガの動作は、(デバッガによる)一貫性のないプログラムコードの一貫性のあるレポートです。
  4. 2番目と3番目の段落のフレーズと説明は不正確です。特定のデバッグ設定を見たことがない人にとっては役に立ちません。

要するに、あなたはあなたの心を失っているように感じます。私は共感する。その感情は消えませんが、不快感はあなたの脳が大きくなっていることを意味します。試してみてください。しかし、デバッガの仕組みについてもっと学ぶことはあなたにとっては大変です。適切に動作するコードをステップ実行する時間を増やす。

編集: コードをステップ実行する方法については言及していません。ブレークポイントがヒットしていることだけです(あなたが同意しない順に)。 VWDのステップイン、ステップオーバー、ステップアウト、カーソル移動コマンドについて学びます。あなたがウェブサイトの一部としてこれを実行しているので、それらは十分ではないかもしれません。あなたは、それを実現することなく同時に要求を処理しているかもしれません。これにより、ブレークポイントがヒットしたときに一見ランダムなシーケンスでスレッド間で交互に実行されます。一度に1つのリクエストのみを提供しているか、少なくともスレッドIDに注意してください。

+0

もし私がこれを2回upvoteすることができたら、私はそうするでしょう。 –

+0

Kennetに返信してくれてありがとう!まず、私は正しいコミュニケーションと専門用語を学びたいと思っています。コミュニケーションの重要性を理解していますが、私は完全に自己学習していますが、まだ学習しています。第二に、私は本当にあなたが "選択が壊れていない"という研究の意味を理解していません。あなたのポイント2は途中で正しいですが、outパラメータは問題ではありませんでした。小さな赤いアンダースコアがそれの隣にあったためだと思っていました。そして、私がそれを覆い隠したとき、インテリセンスはそれがヌルであると言いました。しかし、私は戻って行き、私が呼び出していたオブジェクトの上にぶら下がって、それは十分にヌルだった。 –

+0

また、ステップイン、ステップオーバー、ステップアウト、カーソル移動コマンドも理解しています。コードを踏んだ方法の詳細をどのように追加すれば助けになったのか、実際にはわかりません。私が理解しているように、一番下の行はすべてコード内を一方向に移動することです。だから、彼らはなぜ私が最初に戻るか、ループで立ち往生するのかを説明するのに役立たない。また、スレッドIDはどこにありますか? –

関連する問題