6

多くの C/C++/Fortran およびその他のプログラマーは、「スタック オーバーフロー」エラーに遭遇したことがあります。私の質問は、プログラムの実行中にスタックのサイズを監視または確認できるツール、プログラム、または単純なコード スニペットはありますか? これは、スタックが蓄積され、最終的にオーバーフローを引き起こしている場所を特定するのに役立つ場合があります。

4

2 に答える 2

1

この質問を見てください。受け入れられた答えはレイモンド・チェンを引用しています:

If you have to ask, you're probably doing something wrong.

間違いなくそれを行う必要がある場合、ソリューション/ツールはプラットフォームに依存します。簡単なトリックの1つは、スタックを既知のバイト値(AAなど)で埋め、この値を持たない最初のバイトの位置を監視することです。これにより、現在のスタックサイズではなく、使用されている最大スタックサイズがわかります。

于 2009-05-28T05:39:13.327 に答える
1

それを実行するプログラムがあるかどうかはわかりませんが、スタックポインタが存在する関数内を簡単に確認できます(少なくともCおよびC ++では)。変数のメモリ位置を確認するだけです。ローカル変数はスタックで定義されているため、正確な場所ではありませんが、数バイト以内である必要があります(これは目的に応じて問題ありません)。正確な値が必要な場合は、アセンブリを通じて取得できると思います。

ただし、プログラムがクラッシュしたときにスタックトレースを確認する方が簡単な場合があります。

于 2009-05-28T05:39:27.570 に答える