2010-11-30 13 views
1

STL、C++、Visual Studioの使用に大きな問題があります。私はいくつかのエラーがいくつかこのようないくつかのエラーがある"Incorrect format specifier"を(デバッグコンパイルで)いくつかのstdまたはstl関数を使用します。STLのデバッグエラー

しかし、私のコードはこのエラーの「手で検索」するには大きすぎます。たぶん、エラーを見つけるための助けを得る方法を知っている人がいるかもしれません。__FILE__ & __LINE__ assert?プログラムのコードが大きすぎるためです。尊敬アレックス

+1

エラーメッセージには、関連するソースファイルと行番号を指定する必要があります。 –

+0

@Oli:これはCRTから来て、ファイル/行情報がないと思います。 –

+0

私はそれを取得しません。コンパイラは、ファイルとすべてのコンパイルエラーの行を与えていませんか? – Puppy

答えて

0

それともtry & catch私の最後の希望?...

あなたはSTLのソースコードを持っているので、私は何をするだろうことは、「ポイントにブレークポイントを設定されているが不正な書式指定子 "stringが見つかりました。その文字列のgrep(ファイルの検索など)を行い、それぞれにブレークポイントを設定し、プログラムを実行し、死を希望します。 :)

+0

はい、しかし、これは私がこの問題を他のPC(MSVCが私のプログラムに添付されていないとき)にのみ持っていると言っています。 – Alex

+0

@Alex:ああ、あなたは問題がより難しいです。おそらく、sprintfのデバッグ、ショットガンのデバッグ、およびミニダンプの組み合わせに頼るか、あるいはWinDbgをクライアントマシンに接続する必要があります。 –

0

多分、エラーが発生する場所を知るために、コンソール上でステータスmsgを実行することができます。同じ部分を詳細に検索することができます。必要に応じてこれを頻繁に行います。
その後、あなたはプログラムをデバッグし、 '問題領域'にブレークポイントを設定し、それを実行することができます。

編集:linuxでプログラムをコンパイルできる場合は、valgrind memcheckをインストールして実行するだけです。すべてのエラーを行番号で出力するはずです。

+0

Windowsプラットフォームでのみ:(。私はvalgringについて知っているが...私はWindowsだけで古くて停止したプロジェクトや商用のものについては何も知らない。 – Alex

+0

あなたのコードはプラットフォームに依存しているか、Linuxを持っていないので?最後に、ライブCD(Ubuntuなど)を試して、実行中に必要なプログラムをインストールすることができます。 – tbolender

0

try/catchについては、例外がスローされていると思います。あなたがデバッガ内であなたのアプリケーションを実行する場合、それはキャッチされない例外がスローされた時点であなたのプログラムを壊さないのですか?

EDIT:Linux/g ++でコンパイルできるのであれば、その場合バックトレース付きのコアが残ってしまいます。

+0

MSVC(デバッグ)を実行するとスタックやエラーなどが表示されます。しかし、私は他のPCでプログラムを(デバッグモードではなくデバッグコンパイルで)実行すると、何も表示されず、内部ファイルにエラー行だけが表示されます。 – Alex

0

添付のスクリーンショットは、ランタイムアサーションをヒットしたことを明らかにし、dbuggerに直接行くオプションも提供します。これにより、不完全なコールスタックに移動します。

このメッセージは、デフォルトモードの_CrtDbgReportです。 _CrtSetReportHook2を使用すると、エラーが出力される前に独自のコードを実行できます。たとえば、ミニダンプを作成することができます。