問題タブ [stack-frame]
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.
perl - 現在のフレームと上位フレームの変数の一覧表示
でスクリプトをデバッグしようとしていperl -d ...
ます。必要な場所でブレークした後、現在の環境と上位フレームからの環境を出力したいと思います。
経由でスタックが表示されますT
。さて、試してみるとV
、すべてのリストが得られますが、定数などが含まれているため、ほとんど役に立ちSO_BROADCAST
ません。それらを除外して、ローカルのものだけを取得するにはどうすればよいですか?
より高いフレームで同じことを行うにはどうすればよいですか?
また、より高いスタックフレームの行の周りにコードを印刷するにはどうすればよいですか? v
/l
現在のものだけを実行します。
powershell - Powershell のスタック トレースは壊れていますか?
私はpowershellで簡単なユニットテストハーネスを書いています
アサート関数がパラメーターとしてスクリプト ブロックを受け取り、ハーネスがアサート関数内からコードを実行し、スローされた例外をテストの失敗として処理できるように、ハーネスを設計しました。
テストが失敗した場合、テストが失敗した単体テストで行を返したいと思います。私の計画では、各アサート メソッドの開始時にスタック トレース (Get-PSCallStack) を取得し、アサート関数が呼び出された行に対応すると思われる 2 番目のスタック フレームの情報を使用してこれを行うことでした。
実際には、powershell が返した情報が間違っているように見えることがわかりました。2 番目のスタック フレームは、予想どおり正しいファイルを参照していますが、アサート メソッドで Get-PSCallStack を呼び出した行番号を常に示しています。この数は、指定されたファイルの行数よりも多い場合があります (つまり、場所は "ScriptFile.ps1 line 88" と指定されていますが、ファイルには 20 行しかありません)。
PowerShell のスタック トレースに問題がありますか、それともここで理解できないことがありますか?
編集
要求に応じて、同じ結果を生成する例を投稿しています
Tester.ps1
TestCase.ps1
Assert は TestCase.ps1 の 7 行目で呼び出され、コール スタックは Tester.ps1 の 9 行目でキャプチャされます。
これは印刷します
コマンドは正しいが、ファイルと行の両方が間違っている
スタック トレースの次のフレームは、TestFailure() が呼び出された場所を正しく記述しており、その場所は "TestCase.ps1: Line 11" です。
assembly - アセンブリの push ebp および pop ebp 命令に関する説明
アセンブリでスタックを使用しましたが、プッシュ ebp とポップ ebp についてはわかりませんでした。
debugging - ブロック図でスタックを可視化できるデバッガ
現在のスタック フレーム (RSP と RBP の間のバイト) をブロック図として視覚化できるデバッグ ツールが本当に欲しいです。
このようなものですが、セルに実際の実行値があります: http://abrickshort.files.wordpress.com/2006/11/stackframe.jpg
そのようなソフトウェアは存在しますか?UNIX システムを使用しています。
PS。
gdb の「バイトを調べる」機能に注意してください。それが私が今使っているものですが、上司に見せるためにきれいな図が欲しいです。
乾杯
c# - Webアプリケーション用のGetEntryAssembly
Assembly.GetEntryAssembly()は、Webアプリケーションでは機能しません。
しかし...私は本当にそのようなものが必要です。私は、Webアプリケーションと非Webアプリケーションの両方で使用されるいくつかの深くネストされたコードを使用しています。
私の現在の解決策は、StackTraceを参照して、最初に呼び出されたアセンブリを見つけることです。
アセンブリが必要なものであることを確認するために、次の3つの条件があります。
- アセンブリはGACにありません
- アセンブリは動的ではありません
- アセンブリは生成されません(一時的なasp.netファイルを回避するため)
私が遭遇する最後の問題は、ベースページが別のアセンブリで定義されている場合です。(私はASP.Net MVCを使用していますが、ASP.Netでも同じです)。その特定のケースでは、ページを含むアセンブリではなく、その個別のアセンブリが返されます。
私が今探しているのは:
1)アセンブリの検証条件は十分ですか?(ケースを忘れたかもしれません)
2)ASP.Net一時フォルダー内の特定のコード生成アセンブリから、そのページ/ビューを含むプロジェクトに関する情報を取得する方法はありますか?(私はそうは思いませんが、誰が知っていますか...)
c# - FormatException引数を取得する
私は次のようなクローズドソースのサードパーティライブラリを使用しています。
将来的には、サードパーティのライブラリが予期しない形式のDateTime値を解析しようとし、FormatExceptionをスローします。
この場合、解析に成功しなかった文字列を取得して、自分で解析してみます。このようなもの:
はい、単に年を追加することはかなり無意味ですが、あなたはその考えを理解します。サードパーティのライブラリは、必要なすべての形式をサポートしているわけではありませんが、「someObject」からデータを簡単に取得することもできません。(はい、Reflectorを使用してライブラリの機能を複製することはできますが、それは避けたいと思います。)
これを行う方法はありますか?ありがとう。
c - -fomit-frame-pointerは*常に*fpを省略しますか?
-fomit-frame-pointerは常にフレームポインタを省略しますか?PCとFPの両方をセットアップする必要がある状況はありますか?動的なスタックの増加により、fpがセットアップされますか?特にMIPS32を求めています。ありがとう!
python - スタックフレームになる呼び出しを再現しますか?
repr
Python で特定のスタック フレームを生成する呼び出しの標準的な方法はありますか? それができない場合、手動で行う良い方法はありますか?
例として:
特定の呼び出しをログに記録しようとしており、ラップされた関数への呼び出しを完全な詳細でログに記録するデコレータを作成しています。私はこれについて間違っていますか?
optimization - gccの非常識な最適化レベル(-O3)は十分に非常識ではありませんか?
別の質問に答える一環として、gcc
(-O3
)の非常識なレベルの最適化により、mainで使用されなかった変数が基本的に削除されることを示したいと思いました。コードは次のとおりです。
gcc -O3
出力は次のとおりです。
これで、ローカル変数が削除されたことがわかりますが、まだかなりの無駄があります。私には、全体が次のように思われます。
セクションは、より単純なものに置き換えることができます。
なぜgcc
この最適化を実行しないのか、誰かが知っていますか?それ自体はほとんど節約できないことはわかっていmain
ますが、これが通常の関数でも行われた場合、大規模なループでスタックポインタを不必要に調整することによる影響はかなり大きくなります。
アセンブリの生成に使用されたコマンドは次のとおりです。
.net - StackFrame.GetFileLineNumber() の動作は、アセンブリのプラットフォームおよび最適化フラグによって異なります
私は問題を理解しようとしていますが、たくさん読みましたが、この奇妙な組み合わせを説明するリソースを見つけることができないようです.
少し実験した後、コンパイラの最適化のオン/オフを設定し、AnyCPU/x86 プラットフォーム用にビルドすると、StackFrame.GetFileLineNumber() の動作が変わることがわかりました。
次の結果が得られる理由がわかりません (x64 システムで)
以下のコードは、問題を再現します。
上記のコードを保存code.cs
して、次のスクリプトでバッチ ファイルを作成すると、アセンブリがコンパイルされ、問題を簡単に解決できます。