タグ付けされた質問 「callstack」


29
最大コールスタックサイズ超過エラー
Direct Web Remoting(DWR)JavaScriptライブラリファイルを使用していて、Safari(デスクトップおよびiPad)でのみエラーが発生する それは言う 呼び出しスタックの最大サイズを超えました。 このエラーは正確には何を意味し、処理を完全に停止しますか? また、Safariブラウザの修正(実際にはiPad Safari、 JS:実行がタイムアウトを超えました 私が想定しているのは同じコールスタックの問題です)

6
スタックフレームの概念を簡単に説明する
プログラミング言語の設計では、コールスタックの考え方を理解しているようです。しかし、私はスタックフレームが何であるかについての適切な説明を見つけることができません(おそらく、私は十分に検索していません)。 それで、私に誰かにそれを簡単に説明してもらいたいと思います。
200 callstack 

2
Javascriptで例外を再スローしながらスタックを保持するにはどうすればよいですか?
JavaScriptで、例外が発生したときにいくつかのクリーンアップを実行したいが、例外がスタックに伝播し続けるようにしたいとします。例: try { enterAwesomeMode(); doRiskyStuff(); // might throw an exception } catch (e) { leaveAwesomeMode(); throw e; } doMoreStuff(); leaveAwesomeMode(); このコードの問題は、例外をキャッチして再スローすると、その時点までのスタックトレース情報が失われるため、その後例外が再びキャッチされた場合、スタックの上位でスタックトレースがreまでしかダウンしないことです。 -スロー。これは、実際に例外をスローした関数が含まれていないことを意味するため、面倒です。 結局のところ、try..finallyは少なくともChromeで同じ動作をします(つまり、問題の原因となっているのは再スローではなく、例外ハンドラーブロックの存在です)。 誰かがJavascriptで例外を再スローする方法を知っていますが、それに関連付けられたスタックトレースを保持しますか?それができない場合、例外が発生したときに完全なスタックトレースをキャプチャしながら、例外セーフクリーンアップハンドラーを追加する他の方法の提案についてはどうでしょうか。 ポインタをありがとう:)

13
CまたはC ++でのコールスタックの出力
特定の関数が呼び出されるたびに、CまたはC ++で実行中のプロセスのコールスタックをダンプする方法はありますか?私が考えているのは次のようなものです: void foo() { print_stack_trace(); // foo's body return } where はPerl print_stack_traceと同様に機能callerします。 またはこのようなもの: int main (void) { // will print out debug info every time foo() is called register_stack_trace_function(foo); // etc... } where は、呼び出さregister_stack_trace_functionれたときにスタックトレースが出力されるようにする内部ブレークポイントを配置しますfoo。 このようなものはいくつかの標準Cライブラリに存在しますか? LinuxでGCCを使用しています。 バックグラウンド この動作に影響しないはずのコマンドラインスイッチに基づいて異なる動作をするテスト実行があります。私のコードには、これらのスイッチに基づいて異なる方法で呼び出されていると想定する疑似乱数ジェネレーターがあります。スイッチの各セットを使用してテストを実行し、乱数ジェネレーターの呼び出しがスイッチごとに異なるかどうかを確認したいのですが。
120 c++  c  linux  callstack 


7
コールスタックはどの程度正確に機能しますか?
私はプログラミング言語の低レベルの操作がどのように機能するか、特にそれらがOS / CPUとどのように相互作用するかについて、より深く理解しようとしています。スタックオーバーフローのすべてのスタック/ヒープ関連スレッドのすべての回答を読んだことがあり、それらはすべて素晴らしいものです。しかし、まだ完全には理解していなかったことがあります。 有効なRustコードになる傾向がある疑似コードでこの関数を検討してください;-) fn foo() { let a = 1; let b = 2; let c = 3; let d = 4; // line X doSomething(a, b); doAnotherThing(c, d); } これは、スタックが行Xで次のように見えると想定する方法です。 Stack a +-------------+ | 1 | b +-------------+ | 2 | c +-------------+ | 3 | d +-------------+ …


4
スタック変数はGCCによって整列されていますか__attribute __((aligned(x)))?
私は次のコードを持っています: #include <stdio.h> int main(void) { float a[4] __attribute__((aligned(0x1000))) = {1.0, 2.0, 3.0, 4.0}; printf("%p %p %p %p\n", &a[0], &a[1], &a[2], &a[3]); } そして、私は次の出力を持っています: 0x7fffbfcd2da0 0x7fffbfcd2da4 0x7fffbfcd2da8 0x7fffbfcd2dac なぜの住所 a[0]の倍数ではないは0x1000ですか? 正確には __attribute__((aligned(x)))は何ですか?私はこの説明を誤解しましたか? gcc4.1.2を使用しています。


17
スタックはアセンブリ言語でどのように機能しますか?
私は現在、スタックがどのように機能するかを理解しようとしているので、自分自身にいくつかのアセンブリ言語を教えることにしました。私はこの本を使用しています。 http://savannah.nongnu.org/projects/pgubook/ 私が使用しているガスをし、上の私の開発を行っているLinuxのミント。 私は何かに少し混乱しています: 私の知る限り、スタックは単なるデータ構造です。したがって、アセンブリでコーディングする場合は、スタックを自分で実装する必要があると思いました。ただし、次のようなコマンドがあるため、これは当てはまらないようです。 pushl popl したがって、x86アーキテクチャのアセンブリでコーディングし、Gas構文を使用する場合、スタックはすでに実装されている単なるデータ構造ですか?それとも実際にハードウェアレベルで実装されていますか?それとも何か他のものですか?また、他のチップセットのほとんどのアセンブリ言語には、スタックがすでに実装されていますか? これは少しばかげた質問だと思いますが、実際にはかなり混乱しています。

10
Node.js-最大コールスタックサイズを超えました
コードを実行すると、Node.jsは"RangeError: Maximum call stack size exceeded"再帰呼び出しが多すぎるために例外をスローします。Node.jsスタックサイズを増やしようとしましたが、Node.jssudo node --stack-size=16000 appがエラーメッセージなしでクラッシュします。sudoを使用せずにこれを再度実行すると、Node.jsはを出力し'Segmentation fault: 11'ます。再帰呼び出しを削除せずにこれを解決する可能性はありますか?

1
.COMファイルをロードした後、DOSがSPレジスタを0xFFFEに設定するのはなぜですか?
.COMファイルに関するwikpediaページhttps://en.wikipedia.org/wiki/COM_fileには次のように記載されています。 DOSの.COMファイルは、すべてのx86セグメントレジスタを同じ値に設定し、SP(スタックポインタ)レジスタを0xFFFEに設定するため、スタックはメモリセグメントの最上部から始まり、そこから下に向かって動作します。 しかし、これは実際にはスタックをセグメントの先頭の1ワード下から開始するように設定します。スタックに値をプッシュすると、CPUはSPを0xFFFCにデクリメントしてそこに値を格納するため、セグメントのトップワードが無駄になります。DOSがSPを代わりに0に設定しない理由は何ですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.