問題タブ [verysleepy]
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.
c++ - Very Sleepy プロファイラーに C++ バイナリの関数名を認識させるにはどうすればよいですか?
Visual Studio 2010 でビルドされた C#/マネージド C++/アンマネージド C++ が混在するツールがあります。コードは実際には .exe (mybinary.exe と呼びます) と .dll (mylib.dll) に分散しています
リリース ビルドで PDB ファイルを生成するために、プロジェクトで dll と exe のビルド設定を行いました。PDB ファイルが両方とも exe と pdb と同じディレクトリにあることを確認しました。しかし、このプログラムをデバッグしても関数の名前が表示されません。住所しか見えない。以下は、Very Sleepy の最初の画面でプログラムを選択したときに、下部の小さなステータス バーに表示される内容の抜粋です。
したがって、mylib.pdb を mylib.dll に一致させる際に問題があるように見えますが、何らかの理由で不明ですが、mybinary.exe からの関数の適切なアドレスも得られないことに注意してください。最近インストールされた新しいコンピューターを使用しているため、これは「一部のライブラリが古くなっている」という問題ではありません。
誰かがこれを手伝ってくれれば大歓迎です!
編集:実際には、これは最適化されたコードに固有のものではないことがわかりました。他のプロファイラーは最適化された C++ でいくつかの問題を抱えていたので、私は Very Sleepy に切り替えましたが、テストの結果、Very Sleepy ではデバッグ モードでコンパイルしても関数名を取得できないように見えることがわかりました。
c++ - C++ コード用のプロファイラー、非常に眠い
私はプロファイリングの初心者です。タイミングの制約を満たすようにコードを最適化したいと考えています。私は Visual C++ 08 Express を使用しているため、プロファイラーをダウンロードする必要がありました。私はいくつかの検索を行いましたが、Sleepy に関する適切なチュートリアルが見つかりませんでした。ここで私の質問: 適切に使用するには? プロファイリングの一般的な考え方を把握したので、ボトルネックを見つけるために %exclusive に従って並べ替えました。まず、このリストの一番上にZwWaitForSingleObject、RtlEnterCriticalSection、operator new、RtlLeaveCriticalSection、printfがあります、いくつかのイテレータ...そして、それらが60%のようになった後、最初の関数、子呼び出しの最初の位置が来ます。上記のエラーが発生する理由、その意味、およびこの重要な 60% にアクセスできない場合にコードを最適化するにはどうすればよいか、誰か説明してもらえますか? (「ソースファイル」の場合:不明...)。また、私の関数では、各行に時間がかかると思いますが、そうではありません。たとえば、算術演算や一部の関数にはタイミングがありません (未使用の「if」句にネストされていません)。最後に、超高速で実行できる回線があるにもかかわらず、何千回も呼び出されて実際のボトルネックになっていることを確認するにはどうすればよいでしょうか?
最後に、スリーピーは良いですか?または、私のプラットフォームの無料の代替品はありますか?
大変助かりました!乾杯!
- アップデート - - - - -
プレーンな Sleepy と呼ばれる別のバージョンのプロファイラーを見つけました。一部のスニペットが呼び出された回数と行数を示します (重要なものを指していると思います)。だから私の場合.. KiFastSystemCallRetは50%かかります! 何らかのデータを待っているということですよね?その問題を改善するには、これらの複数の呼び出しの原因を追跡し、最終的にそれを削除/変更する適切なアプローチがありますか?
windows - MinGW コンパイル済みファイルをキャプチャするときに、Very Sleepy に関数名が表示されない
私はこれに慣れていないので、おそらく基本的な何かが欠けています。gcc 4.8 (MinGW) と -g オプションを使用して C プログラムをコンパイルします。
次にそれを実行し、Very Sleepy でキャプチャします。すべて動作しますが、Sleepy の出力は次のようになります。
(私のアプリケーションは a.exe と呼ばれます)
Sleepy には関数名が表示されません。動作させるにはどのようにコンパイル/実行する必要がありますか? 眠そうなウェブサイトは以下を提供します:
GCC/mingw のサポート。DWARF2 データが埋め込まれた実行可能ファイルをプロファイリングできるようになり、動作するはずです。これには特別なオプションは必要ありません。「-g」を指定してコンパイルするだけで、シンボルが存在することを確認できます。通常、Sleepy はどちらの方法でも機能しますが、「-fno-omit-frame-pointer」を使用して正しいコールスタックを確保することもできます。「-pg」やゴミを使用する必要はありません。Microsoft DLL から GCC DLL への正しいスタックをウォークスルーすることもできますが、これは想像以上に困難でした。
しかし、私の場合は十分ではありません。
c++ - C++ プロファイリングの Very sleepy と Callgrind の違い
プロファイリングのために、 Very SleepyとCallgrindの違いを学ぼうとしています。プロファイリングする予定のコードは C++ で記述されており、Linux と Windows の両方で動作します。
Linux では、Callgrind を使用して、Self と包括的な相対コストを調べることができました。私の理解では、Callgrind はインストルメント化されたプロファイリング手法を使用しており、かなりの時間がかかります。ただし、Very Sleepy は統計プロファイリングを使用しており、非常に高速です。どちらもプロファイリングに異なるアプローチを使用しているため、2 つの結果を比較することはできません。
Linux と Windows の両方である種のプロファイル比較を行う方法はありますか? 残念ながら、Callgrind は Windows では利用できず、Very Sleepy ではその逆です。