0

C++ コードでこのエラーが発生しています: http://imageshack.us/photo/my-images/193/vcerror.png/

唯一の問題は、問題がどこにあるかを示していないことです...文字列の添字が範囲外であることは理解していますが、どこにあるのかわかりません。

とにかくそれがどこにあるかを見つけることができるかどうか疑問に思っていましたか?私は大まかな考えを持っているので、そこにブレークポイントを入れましたが、VC++ がブレークポイントを行う方法はひどいものです。ステップスルーしますが、自分のコードではなく、C++ ファイル自体のコードのみが表示されます。

そのため、ステップオーバーすると、エラーがすぐに表示されます。

この問題を追跡するにはどうすればよいですか?

4

1 に答える 1

1

基本的に、コールスタックを見て、すべてのシンボルをセットアップする必要があります。

「コール スタック」ウィンドウの使用方法がわからない可能性があることをお勧めします。

プログラムのデバッグ セッションで、ブレークポイントが設定されていない場合は、アサート ダイアログに到達するまでプログラムを実行できます。「再試行」を押して、制御をデバッガーに渡すことができるようにします。別のダイアログがポップアップして、「中断」または「続行」するように求められる場合があります。休憩を選択。この時点で、デバッガーに割り込む必要があります。

次に、コール スタックが表示され、少なくとも 1 つのウォッチ ウィンドウが開いていることを確認します。

Debug->Windows->Call Stack.
Debug->Windows->Watch->Watch 1

コール スタック ウィンドウ内の任意の項目をダブルクリックすると、実行が戻ると予想される正確なコード行にジャンプできます。(エディター ウィンドウの小さな矢印が、前の呼び出しが返された後に実行するコードの次の行を指している場合があります)。一番上のコール スタック行のすぐ下にあるコール スタック ウィンドウの関数行をダブルクリックします。それはおそらく std::basic_string::operator です。この関数に渡される値は何ですか? 変数名にカーソルを合わせてもうまくいかない場合は、「ウォッチ」ウィンドウに追加します。また、「this」のウォッチを追加して、文字列の実際のサイズと容量を分析できるようにします。

現在いる場所の下のコール スタックで関数呼び出しをダブルクリックします。これにより、プログラム内の実際のバグのあるコード行に移動するはずです。文字列変数に別の監視を追加すると、何が問題なのかを突き止めることができるはずです。

後は君しだい。

これは、すべてが IDE によってビルドされたスタンドアロンの EXE プロジェクトであると想定しています。そうでない場合は、生成された各バイナリの PDB ファイルが、対応するバイナリと同じディレクトリにあることを確認してください。繰り返しますが、これが Visual Studio の単純な EXE プロジェクトである場合、これは自動的に行われます。念のため、最初にビルドを「クリーン」にしてから、完全な再構築を行ってください。これにより、デバッグのねじれが修正されることがあります。

于 2011-09-01T02:34:36.707 に答える