問題タブ [stack-unwinding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - R での例外処理とスタックの巻き戻し
同僚のスクリプトと私の R スクリプトに一貫した例外処理インターフェイスを設定するために、次の tryCatch 構造を採用したいと考えています。
- 外側の tryCatch は、特定の R スクリプトをラップしています。スクリプトの中止を必要とする致命的なエラーをキャッチして処理するために使用されます。
- ユーザーのスクリプト内のユーザー固有の tryCatch コマンド。これらはキャッチし、場合によっては処理する必要があります
- 2a. 致命的ではないエラー。スクリプトの中止は必要ありません
- 2b. スクリプトの中止を必要とする致命的なエラー。エラーは外側の tryCatch によって処理されます [1. を参照]。
- 2c。追加のエラー情報を含む致命的なエラー。外側の tryCatch によって処理されるエラー。
次のコードは、これらの機能を実装する方法です。しかし、私はRの専門家ではないので、これが良いアプローチであるかどうかを尋ねたいと思います. 具体的には:
Q1. 内側の tryCatch でエラー ハンドラーを指定せず、外側の tryCatch がそのエラーを処理するのを待つことは問題ありませんか (上記の 2b. と以下のコードを参照)。
Q2. ハンドラー内で同じエラー (上記/下記の 2c. を参照) を再スローすることは正しいですか? または適切なコーディング スタイルと見なされますか?
ありがとうございました!
java - JVMは、実行時に例外をキャッチする場所をどのように知るのですか?
私の理解でthrow
は、これは基本的なjvmコマンドです。これが呼び出されると、JVMは「現在のコールスタックがそれをキャッチできるかどうかをチェックします」。それができない場合、javaは、returnが呼び出されたかのように、呼び出しスタックを単純にポップします。次に、jvmは「現在のコールスタックがそれをキャッチできるかどうかをチェックします」などと再帰的に続きます。
私の質問:JVMがコールスタックのどこで特定の例外をキャッチできるかをアルゴリズムで知るにはどうすればよいですか?例外をコードブロックにマッピングする各コールスタックエントリにメタデータが保存されていますか?どういうわけかこれを追跡する静的データ構造がヒープにありますか?どこかにそれを追跡するデータがなければならないからです。
c++ - malloc/new がコールスタックをキャプチャするのはなぜですか?
Server 2003 でサービスとして実行される 64 ビット アプリケーションがあります。
VS プロファイラーまたは windbg をアタッチすると、以下のようなコールスタックが多数表示されます。デバッガー (またはプロファイラー) で生成されたプロセスがデバッグ ヒープなどを使用することは理解していますが、このサービスは OS によって開始され、私はそれにアタッチしているだけなので、そうではありません。
スタックを巻き戻す理由がわかりません。そして、プロファイラーは、測定可能な量の時間がそれを行うために費やされていることを示しています. いくつかの詳細情報:
• これらは、Server 2003 で動作する vc9 で構築されたリリース ビットです。
• システム環境変数 _NO_DEBUG_HEAP が 1 に設定されている。
• Microsoft シンボル サーバーを使用しています。
スタック トレースをキャプチャするのはなぜですか? ログを記録しているようですが、どこにあるのかわかりません。
私の目的は、アプリが実際にスタックを巻き戻していることを確認し、それが正しい場合は回避することです。
何か案は?
コールスタック
c++ - 別のデストラクタの実行中にオブジェクトが作成されたかどうかを検出するトリックはありますか?
MyClass
誰かが別のクラスのデストラクタで (またはコール スタックのどこかでアクティブなデストラクタで) 作成しているかどうかを検出したいと思います。
1つの試みは次のとおりです。
ただし、オブジェクトがスコープ外になったために呼び出された場合ではなく、例外のためにデストラクタが呼び出された場合にのみ機能します。
c++ - スタックのアンワインドでスロー/キャッチしても安全ですか?
Q: スタックのアンワインド時に例外をスローしてキャッチするのは安全ですか? それとも、アプリケーションterminate
は 2 回目のスローで呼び出しますか?
最小限の例:
この質問を読んだ後、私は興味を持ちました。
catch(...)
注:デストラクタでできる/すべきであることは知っていますが、ブロックtry/catch
内に aを持つことは一般的に意味がありcatch
ますか - おそらく例外で呼び出されるいくつかの関数(re
私の例では)ですか?
mips - mips ターゲット用に libunwind を構成してビルドする
mips ターゲット (ライブラリがビルドされているホストではない) 用に libunwind を構成およびビルドする方法を知っている人はいますか?
c++ - x64 スタックの巻き戻しと、RIP がエピローグにあるかどうかの確認
x64 コールスタックをアンワインドしたいので、ここで見つけた「UNWIND プロシージャ」に従おうとしています:
http://msdn.microsoft.com/en-us/library/8ydc79k6.aspx
RIP がエピローグにある場合、まだ実行する必要がある操作を考慮して RSP のオフセットを計算する必要があることは理解していますが、RIP がエピローグにあるかどうかを確認する方法は不明です (セクション3.a)?
誰かが私にこれを説明できますか?(リンクまたはコード例も大歓迎です)
c++ - x64 スタックで RUNTIME_FUNCTION を見つけるアルゴリズム
x64 スタックを巻き戻そうとしています。
そのためには、ここで指定されているアルゴリズムに従う必要があります:
http://msdn.microsoft.com/en-us/library/8ydc79k6.aspx
しかし、それに従うためには、正しい を見つける方法を知る必要がありますRUNTIME_FUNCTION
が、これに対する完全なアルゴリズムを見つけることができませんでした...
誰もそれを行う方法を知っていますか? (リンクまたは例も非常に高く評価されます)
c++ - 構造体 RUNTIME_FUNCTION
IDA によって、RUNTIME_FUNCTION 構造体の .pdata セグメントに大きな配列が見つかりました。それで、私が情報を見つけることができる場所: コンパイルされたものから、これを作成する方法と C++ で使用する方法。この構造での例外処理と巻き戻しに関する書籍、または適切な説明とチュートリアルへのリンクをください。