多くのC/C++/Fortranや他のプログラマは、「スタックオーバーフロー」というエラーに遭遇していました。 私の質問は、プログラム、実行中にスタックのサイズを監視または確認できるツール、プログラム、または単純なコードスニペットがあるかどうかです。これは、スタックが蓄積されている場所を特定し、最終的にオーバーフローを引き起こすのに役立ちます。スタックサイズを監視してスタックオーバーフローを防止する方法はありますか?
答えて
あなたのためにやるプログラムがあるかどうかわかりませんが、スタックポインタがある場所(少なくともCとC++では)を簡単に調べることができます。変数のメモリ位置を見てください。それは正確な場所ではありませんが、ローカル変数はスタック上に定義されているので、数バイト以内でなければなりません(これはあなたの目的にとっては問題ありません)。あなたが正確な価値を望むなら、私はそれをアセンブリを通して得ることができます。
しかし、プログラムがクラッシュしたときにスタックトレースを見るほうが簡単かもしれません。
このquestionをご覧ください。受け入れられた回答は、Raymond Chenを引用しています。
If you have to ask, you're probably doing something wrong.
解決策/ツールはプラットフォームに依存します。 1つの簡単なトリックは、スタックに既知のバイト値(例えばAA)を充填し、この値を持たない最初のバイトの位置を監視することである。これは現在のスタックサイズではなく、使用される最大スタックサイズを与えます。
私は同意します。たとえば、DSP/BIOSオペレーティングシステムは、新たに割り当てられたスタックに0xDEADBEEFというパターンを埋め込み、それを使用してスタックの使用状況を追跡します。 x86プロセッサの別の方法(簡単には実装されていない、OSによって実行されなければならない)は、スタックを別のセグメントに置くことです。 OSは、セグメント記述子を割り当てられた長さに設定し、オーバーフローによってGPFが発生し、その時点でスタックの内容が上に移動して拡張されます。誰もが実際にこれを実装するかどうかは分かりません! –
- 1. WPFルーティングイベントを監視する方法はありますか?
- 2. AndroidStudioでスレッドを監視する方法はありますか?
- 3. Vuejsでローカルストレージを監視する方法はありますか?
- 4. 防止スタックオーバーフロー
- 5. tsc:コマンドラインで監視しない方法はありますか?
- 6. 新しいRelicでApacheを監視する方法はありますか?
- 7. Typescript TSC CommandLine - TSCの監視を防止する
- 8. ログファイルを監視する良い方法はありますか?(linux/python)
- 9. API Manager 1.10 - バックエンドの状態を監視する方法はありますか?
- 10. ファイルのハッシュ中に状態を監視する方法はありますか?
- 11. Windowsアプリケーションのインストール番号を監視する方法はありますか?
- 12. エルキャピタンでMacの通知を監視する方法はありますか?
- 13. スタックオーバーフローの例外をデバッグする方法はありますか?
- 14. java:プロセスを管理/監視するライブラリはありますか?
- 15. アプリケーションのアンインストールを自動的に防止する方法はありますか?
- 16. byobu端末のタイムアウトを防止する方法はありますか?
- 17. JMXを使用してtomcat上のWebアプリケーションを監視する方法はありますか?
- 18. ロボットフレームワークを使用してエラー文字列のテストログを監視する方法はありますか?
- 19. ZABBIXを使用してSQL Serverサービスを監視する方法はありますか?
- 20. パフォーマンスカウンタを使用してWCFサービスの稼働時間を監視する方法はありますか?
- 21. gruntjsを使用して、.coffeeファイルの変更を監視する方法はありますか?
- 22. else if文でこの繰り返し割り当てを防止する方法はありますか?
- 23. 監視しているファイルの名前を取得する方法はありますか?
- 24. RxCache - 監視対象からの退去防止
- 25. C++デーモンプロセスを監視する方法は?
- 26. ルビープロセスを監視する方法は?
- 27. javascriptを使用してページのブラウザリロードアイコンを無効にする/防止する方法はありますか?
- 28. ブルートゥースシリアルポートのアクティビティを監視するフックがありますか?
- 29. Appdynamicsを使用してサーバーを監視する方法は?
- 30. Javaを使用してウィンドウプロセスを監視する方法は?
グローバルなアクセス可能な変数に最下位のスタックフレーム(main())からのローカル変数のアドレスを格納する場合は、 "g_my_stack_base"と呼ぶと、approx_stack_size = my_local_function_variable - g_my_stack_baseを持つ関数のスタックサイズの概算を確認できます。醜いが動作する。ポインタ演算がバイトを返すようにchar *ポインタを使用するようにしてください。 – tucuxi