1

すべての C コードを含む MSVC 6.o ワークスペースがあります。
コードは、最適化スイッチなし、つまりオプション O0 を使用して、デバッグ モードで実行されています。このコードは、サードパーティから入手したものです。そのまま望ましい実行をします。

しかし、printfデバッグのために特定の関数にいくつかのステートメントを追加してからコードを実行すると、クラッシュします。

メモリページ/メモリセグメントなどで何らかのコード/データオーバーフローが発生したと思われます。しかし、コードにはメモリマップ指定子​​、またはセグメント/メモリマップなどを言及するリンカコマンドファイルがありません.

この風変わりな問題の原因と修正方法を絞り込むにはどうすればよいですか?

4

4 に答える 4

1

Visual Studio のスタック トレースを調べることで、クラッシュが発生した場所を特定することができます。最終的にクラッシュにつながる関数呼び出しのシーケンスを確認できるはずです。これにより、何が問題なのかについてのヒントが得られる場合があります。

printf() だけでクラッシュが発生する可能性もあります。考えられる原因は、Windows ではあまりありませんが、printf() の呼び出しによってオーバーフローしているスタックが小さすぎることです。

于 2009-04-10T13:35:36.927 に答える
1

Linux では、 valgrindが好きです。これは、Windows 上の valgrind のようなツールのスタック オーバーフロー スレッドです

于 2009-04-10T12:13:47.777 に答える
0

一般に、クラッシュに対処しようとする場合、最初の呼び出しポートはデバッガーである必要があります。

これを正しく使用すると、問題を特定のコード行に絞り込むことができ、うまくいけば、クラッシュ時のランタイムメモリを確認できます。これにより、クラッシュの直接の原因を確認できます。

于 2009-08-26T16:32:48.697 に答える
0

printf で cstring オブジェクトを出力するときに、string.getbuffer を使用します。ワイド文字と通常の文字列で問題が発生する可能性があります。printf("%s",str.Getbuffer()); str.ReleaseBuffer(); 乾杯、アトゥル。

于 2009-04-10T12:15:47.977 に答える