ハッカーの物語
日付は12/02/10です。クリスマスの前の日々がどんどんどろどろになっていて、私はWindowsプログラマーとして大部分の主要な障害にぶつかりました。私はAQTimeを使用しており、眠くて、光沢があり、非常に眠いので、VTuneをインストールしています。私はVS2008プロファイラーを使用しようとしましたが、積極的に罰せられているだけでなく、多くの場合無意味です。私はランダムな一時停止テクニックを使用しました。呼び出しツリーを調べました。関数のトレースを開始しました。しかし、悲しいことに、私が使用しているアプリは100万行を超えるコードであり、おそらく数百万行に相当するサードパーティのアプリが含まれています。
より良いツールが必要です。 私は他のトピックを読みました。 各トピックにリストされている各プロファイラーを試しました。単にこれらのジャンキーで高価なオプションよりも優れたもの、またはほとんど利益が得られない途方もない量の作業でなければなりません。問題をさらに複雑にするために、コードは大量にスレッド化され、いくつかのQtイベントループを実行します。それらのループの一部は非常に壊れやすく、タイミングの遅延が原因で重いインスツルメンテーションの下でクラッシュします。複数のイベントループを実行している理由を聞かないでください。誰にも言えません。
Windows環境でValgrindに沿ったオプションはありますか?
私がすでに試した長い壊れた道具よりも良いものはありますか?
Qtと統合するために設計されたものはありますか、おそらくキュー内のイベントの便利な表示と一緒ですか?
私が試したツールの完全なリスト、およびイタリックで本当に役立つツール:
- AQTime:かなり良いです!深い再帰には問題がありますが、コールグラフはこれらの場合に正しく、混乱を解消するために使用できます。完璧なツールではありませんが、試してみる価値はあります。それはあなたのニーズに合うかもしれません、そしてそれは確かに私にとってほとんどの場合十分でした。
- デバッグモードでのランダムな一時停止攻撃:十分な情報が不足しています。
優れたツールですが、完全なソリューションではありません。 - Parallel Studios: 核となるオプション。目障りで、奇妙で、とてつもなく強力です。30日間の評価を上げて、適切かどうかを判断する必要があります。それもすごくかっこいいです。
- AMD Codeanalyst: 素晴らしい、使いやすく、クラッシュしやすいですが、それは環境問題だと思います。無料なので試してみることをお勧めします。
- ルーク・スタックウォーカー:小さなプロジェクトでうまく機能します。それを私たちのプロジェクトで機能させるのは少し困難です。しかし、いくつかの良い結果があり、それは間違いなく私の個人的な仕事のためのスリーピーを置き換えます。
- PurifyPlus: Win-x64環境はサポートされません。最も目立つのはWindows 7です。それ以外は優れています。他の部門の多くの私の同僚はそれを誓います。
- VS2008プロファイラー:関数トレースモードで必要な解像度で100ギグ以上の範囲の出力を生成します。プラス面では、確かな結果が得られます。
- GProf:GCCが適度に効果的であることを要求します。
- VTune:VTuneのW7は犯罪者の国境をサポートしています。そうでなければ優れている
- PIN:自分のツールを改造する必要があるので、これは最後の手段です。
- Sleepy \ VerySleepy:小さいアプリに便利ですが、ここでは失敗します。
- EasyProfiler:インストルメントする場所を示すために手動で挿入されたコードを少しでも気にしなければ問題ありません。
- Valgrind:* nixのみですが、その環境では非常に優れています。
- OProfile:Linuxのみ。
- プロフィール:彼らは野生の馬を撃ちます。
私が試していない推奨ツール:
- XPerf:
- グローコード:
- Devpartner:
注: 現在のところIntel環境。VS2008、ブーストライブラリ。Qt 4+。そして、それらすべての惨めなhumdinger:trolltechによるQt / MFC統合。
現在:ほぼ2週間後、私の問題は解決したようです。リストにあるほぼすべてのものや、いくつかの個人的なトリックなど、さまざまなツールのおかげで、主要なボトルネックが見つかりました。ただし、新しいプロファイラと新しい技術のテスト、調査、試行を続けます。どうして?君たちが借りているからだ、君たちがロックしているから。タイムラインが少し遅くなりますが、私は新しいツールを試し続けることに非常に興奮しています。
概要
他の多くの問題の中で、最近、多くのコンポーネントが誤ったスレッドモデルに切り替わり、その下にあるコードが突然マルチスレッドでなくなったために深刻なハングアップが発生しました。私のNDAに違反しているのでこれ以上は言えませんが、これは何気ない検査や通常のコードレビューによってさえ発見されなかったと言えるでしょう。プロファイラー、コールグラフ、ランダムな一時停止を併用しなくても、美しい空の青い円弧に怒りを叫び続けます。ありがたいことに、私は今まで会ったことのない最高のハッカーと仕事をしており、素晴らしい「素晴らしいツールと素晴らしい人々でいっぱいの詩」にアクセスできます。
ジェントルフォーク、私はこれを非常に感謝しています。そして、私があなた一人一人に報奨金を報いるほどの担当者がいないことを後悔しているだけです。これは、SOでこれまでに得たものよりも良い答えを得るための重要な質問であるとまだ思います。
その結果、次の3週間は毎週、私ができる最大の報奨金を上げて、常識ではないと思う最高のツールを使って回答にそれを与えます。3週間後、私の罰を許していただければ、プロファイラーの明確なプロファイルが蓄積されていると思います。
テイクアウト
プロファイラーを使用します。それらはリッチー、カーニハン、ベントレー、クヌースにとって十分なものです。私はあなたがあなたが誰だと思うかは気にしません。プロファイラーを使用します。あなたが持っているものが機能しない場合は、別のものを見つけてください。見つからない場合は、コーディングしてください。コードを作成できない場合や、ちょっとした電話が切れた場合、または行き詰まった場合は、ランダムな一時停止を使用してください。他のすべてが失敗した場合、プロファイラーを強打するためにいくつかの大学院生を雇います。
より長い眺め
なので、ちょっと振り返ってみればいいかなと思いました。私はParallel Studioを広範囲に使用することを選択しました。その理由の1つは、実際にはPINツールの上に構築されているためです。関係する研究者の何人かと学術的な取引があったので、これはおそらくある程度の品質の印だと感じました。ありがたいことに、私は正しかった。GUIは少し恐ろしいですが、IPSは信じられないほど便利であることがわかりました。重要なのは、行レベルのヒットカウントを取得する明確な方法がないことです。これは、AQTや他の多くのプロファイラーが提供するものであり、特にブランチ選択の割合を調べるのに非常に役立ちます。ネットでは、AQTimeの使用も楽しんでおり、彼らのサポートは非常に迅速であることがわかりました。繰り返しますが、私は私の推薦を修飾する必要があります:それらの機能の多くはそれほどうまく機能せず、Win7x64では一部の機能がクラッシュする傾向があります。XPerfも見事に動作しましたが、特定の種類のアプリケーションで適切な読み取りを行うために必要なサンプリングの詳細については、苦労して遅くなります。
今のところ、W7x64環境でC ++コードをプロファイリングするための決定的なオプションはないと思いますが、便利なサービスを実行できないオプションは確かにあります。