2009-03-31 13 views
2

私はコンパイルしてデバッグモードでプログラムを実行すると、C++で書かれたシンプルなudpリスナを持っています。私が受け取っているパケットから。リリースビルドと同じコードを実行すると、うまくコンパイルされているように見えますが、リリースビルドのようなパケット情報は表示されません。私はビルド構成を正確に一致させるためにミラーリングしようとしましたが、それはまだ起こっています。どんな提案も大歓迎です。Visual StudioでのデバッグとビルドのビルドC++ 2008のWin32ランタイムの問題

答えて

1

これは変数をいくつかの初期値に初期化しない可能性が高いため、デバッグにはある種の値がありますが、リリースではほとんどのものがゼロ(NULL)に初期化されます。したがって、いくつかの条件/ブランチが起こっている可能性があります。期待していないことがあります。たとえば、ソースコードがなければ、本当に問題を見つけるのは難しいです。

は、これは私に一回以上のビットた。.. :)

Mehrdadが示唆されているようにこれはあなたのことを確認し、また...)あなたはのOutputDebugString(のようなものを使って何かを見ることが期待されていない

を想定していますパケットのサイズが1024バイト未満の場合、または取得できません。 XPが出てきたときに私はこのことを理解していましたが、私のコードが2000で動作したのは分かりませんでしたが、XPではありません... send(sendto)は成功を返すでしょう。パケット..

あなたは私にいくつかのサンプルコードを与える場合、私はより多くのを助けることができるはずですので、とにかく、私は、UDPとWin32で多くのことを扱ってきた

...

しかしとにかく、チェックしているすべての変数送信側と受信側の両方で何らかの種類のデフォルト値に初期化されています(これは良い方法です)。次に再構築して再試行してください。また、送信する前にsizeof()でパケットサイズを確認し、1024バイトより大きい場合は気にしないでください...受信したパケットのサイズを確認することもお勧めします。サイズが正確でない場合はそれからパケットをドロップします。これは、ブロードキャストについてはより多くの事実を保持するが、依然として適用される。

私が助けてくれれば、少し前にanother questionに多くのUDPコードを掲載しましたが、そのコードは動作しますので参考にしてください。

+0

1024バイト以上を受信できますか?パケットを送信するマシンはLinuxを実行しているため、1024バイト以上のパケットを送信することができます。 – whatWhat

+0

私はrecvfrom()を実行できず、1024バイト以上を取得できませんでした。いくつかの種類の制限があります。元々見つけた情報を検索する必要があります。あなたはWin2000でこの同じアプリを試しましたか?それはうまくいくかもしれませんが、私はあなたのコードをまだ見ていないので、私は確かに言うことはできません。 – LarryF

1

リリースビルドでは、パフォーマンスに関する理由から、パケットに関するデバッグ情報を出力するコードが削除される可能性があります。

これは、2つのことで、主に行われます。デバッグモードに対してチェックして、そのモードで適切なコードを生成

  • 条件付きプリプロセッサディレクティブ。
  • ライブラリのデバッグバージョンとのリンク。

これらの内容を削除することは、実際には、リリース版を作成する主な目的です。デバッグ情報は必要ないので、パフォーマンスを犠牲にすることはありません。あなたが本当にそうしたいのであれば、なぜデバッグビルドを出荷しないのですか?[アップデート:コメントに記載されているように、デバッグライブラリにリンクされたソフトウェアをライセンスで配布できないようです。]これは最も類似した設定です(同一の設定より多くの設定を得ることはできません)

+0

ライセンスに基づいて、デバッグランタイムDLLにリンクされたビルドを出荷することはできません。 – RBerteig

+0

@RBerteig:メモをありがとう、私はそれを知らなかった。 –

0

正確に情報を印刷していますか? TRACEのようなマクロは、リリースビルドでは何もしません。

fprintfなどを使用して印刷している場合は、fflushを呼び出すまでは何も書き込む必要はありません。これは、デバッグバージョンによって頻繁に行われる場合があります。

関連する問題