ローグウェーブのセールスエンジニア柄澤(からさわ)です。一般に物事はシンプルであるに越したことはないのですが、なかなか物事はそううまくは行きません。ますます複雑化する世の中から開発者の生産性と精神の健康を保つために、ローグウェーブのTotalViewデバッガは様々な機能を提供しています。今回はそうした中からTransformations機能を説明したローグウェーブ本社のブログCodeBuzzに投稿された記事をご紹介します。著者のDean Stewartはイギリスを中心にヨーロッパで活躍するセールスエンジニアです。
複雑なデバッグをシンプルに - TotalViewのTransformations機能
アプリケーションの機能はますます複雑化を続けていますが、利用できる開発期間やリソースがそれに伴って長くなるわけではありません。これに対処するために、プログラミング言語とフレームワークには、ラムダ関数、STL、Boost、アプリケーションミドルウェアといった抽象レイヤーが追加されてきました。 しかしこれらの抽象化によって、開発者は、ポインタをたどって実際のデータを調べなければならなくなったり、glueコードが埋め込まれたスタックフレームの中で自分の居場所を見失うなど、デバッグが困難になります。
TotalViewは代表的なマルチスレッドデバッガで、データやコールスタックの抽象化を解決するのに役立つ型変換フレームワーク (TTF)とスタック変換フレームワーク (STF)という機能を持っています。
型変換フレームワーク (TTF、Type Transformation Framework)
TotalViewはクラスや構造体でコレクションデータをどのように表示するかを開発者が定義できるようにします。 デフォルトではTotalViewはTTFを使用して、STL文字列、vector、list、map、multimap、set、multiset、そして最近のg++コンパイラ用のunorderedなSTLの型を変換します。
TTFは、コンパイラによって提供される不必要な詳細に煩わされず、開発者が関心のあるデータ要素に集中することを可能にします。 TTFを使用することで、開発者はクラスや構造体の一部のみを表示し、残りの部分を非表示にするtransformationを作成できるため、デバッグのプロセスが簡単になります。 transformationはファイルからロードすることも、またすべてのTotalViewデバッグセッションに自動的に適用させることもできます。
以下の図では、TTFによって構造体のフィールドのうちyear、name、streetのみが表示されるようになりました。
スタック変換フレームワーク (STF、Stack Transformation Framework)
TotalView 2017.1は、コールスタックを変換する機能を追加します。 このスタック変換機能は表示されたスタックフレームを変更する一連のルールを管理します。このルールによってユーザーが関心のあるスタックフレームにのみ集中できるようにすることができ、複雑なアプリケーションのデバッグプロセスは大幅にシンプルかつ役立つものとなります。
TotalViewのSTFは新しい混合言語デバッグ(PythonとC/C++)のサポートでglueコードを除去します。 混合言語サポートの詳細については、このホワイトペーパーを参照してください。
簡単な一例として、以下に関数のスタックトレースから ‘_start'という名前の関数をフィルタするためのルールが追加されたコマンドラインでの実行例を示しました。
このルールの追加の効果は、以下のGUIのCall Stackウィンドウでも同様で、「_start」という名前の関数がビューから削除されています。
以上のように、TTFとSTFを使用することで、開発者はデータと関数をどのように表示するのか、これまでにないレベルの制御を行うことができます。 これらTotalViewの強力な機能は、皆様のデバッグ体験を変え、複雑なタスクをシンプルにするのに役立ちます。
編集後記
いかがだったでしょうか。TotalViewの機能というと、MemoryScapeやReplayEngineのような重量級で派手な機能に目を奪われがちですが、TTFやSTFのような機能もプログラムを活き活きと可視化し、開発者とコードの距離を縮めるTotalViewの役割をしっかりと担っています。
TTFに関しては以前エントリを起こしましたので、ご覧ください。
いつもながら、ご興味のある方はぜひ製品のトライアル窓口にご連絡ください。
ローグウェーブ セールスエンジニア 柄澤(からさわ)