ローグウェーブソフトウェアのブログ

開発をシンプルに 安全で高品質のコードを 素早くお客様のもとへ

TotalView 2017.1リリース - Python混合デバッグ、リバースデバッグのブックマーク、Split DWARF

GUI並列デバッガTotalViewの新バージョンがリリースされました。今回のリリース内容は以下の通りです。

GNU DebugFission Split DWARFをサポート

巨大なアプリケーションを開発する場合、含まれるデバッグ情報(変数名、関数シグニチャ、クラス定義)も膨大になり、ディスクサイズを圧迫しメモリは不足しビルド時間は堪え難いほど長くなります。特にコンパイルと異なり通常リンクは並列化できないため、開発時間に占めるビルド時間は無視できないものとなり迅速な開発を妨げることになります。また、ますます高度になっていくC++のテンプレートやラムダなどのジェネリックプログラミングは、コーディングの効率を飛躍的に高める一方で、上記の問題をさらに深刻にしています。

GNULinuxGCCなどの開発環境を始め、IntelやClangなどでも標準的に使われているデバッグのためのデータフォーマットをDWARFと言います。もちろん実行ファイルフォーマットのELFと洒落ているのでしょうが、この規格を定める標準委員会が、リンクの長大化を解決するための手段として、DebugFissionという仕組みをDWARF 5 Standardに定めました。簡単にいうと、オブジェクトファイル(.o)作成時に、デバッグ情報は別の.dwo拡張子のファイルに分けてしまい、リンク過程から省くことによってこの問題を解決しよう、というものです。

Split DWARFの技術的な詳細や使い方はローグウェーブのホワイトペーパー (Saving time and space with Split DWARF (現時点では英語)TotalView 2017.1のリリースノートをご覧ください。readelfやシンボルテーブルと言った低レベルの話が好きな方には技術の読み物としてもとても面白いと思います。いずれ日本語化したら更新します。

更新しました。

blog.roguewave.jp

PythonC/C++の混合言語デバッグ

TotalViewのプロダクトマネージャーMartin Bakalが、サンノゼで行われたGTC (GPU Technology Conference) で発表した時の感想を以下の記事に書いています。

blog.klocwork.com

ディープラーニングやAIがますます隆盛になり、皆がTensorFlowやChainerといったフレームワークPythonを勉強し始めていますが、手軽でパワフルなPythonの機能に物足らなくなったら、C/C++の既存の資産を呼び出したりSWIGなどを使ってC/C++で書かれたフレームワークを自分で拡張したり、といったハイブリッドな使い方ができるのもPythonの大きな魅力の1つです。しかし複数の言語で書かれたコードを同時にデバッグするという作業は大変に複雑なもので、ともするとglueコードによる多段のコールスタックと自動生成された多数の変数の洪水の中で本質的なアルゴリズムや両コードの関連性を見失うことになります。

今回TotalViewの新UIに導入された混合言語デバッグの機能を使うと、これら煩雑なglue部分を取り除いて表示することができ、1つのセッションで快適に自分の書いたコードだけに集中することができます。今回STF (Stack Transformation Facility)という概念を導入しましたが、TTF(Type Transformation)C++Viewなどとも共通するところがあります(Dean Stewartによる英語ブログ記事)。また、TensorFlowなどで使われるマルチスレッドのアプリケーションに対する並列デバッグはまさにTotalViewの最も得意とするところです。

混合デバッグの簡単な試し方やポイントについては発表スライドや、ホワイトペーパーをご覧ください。

ホワイトペーパーの中身を日本語化しました。

blog.roguewave.jp

また、新UIの製品マニュアル Chapter 7にもこの混合デバッグ機能についての詳細な説明があります。

www.slideshare.net

なお、デバッグ情報の圧縮方法の違いにより、現在CentOSでは混合デバッグが使えません。試す場合はUbuntuをお使いください。次のリリースでCentOSにも対応する予定です。

新UI (CodeDynamics)の ReplayEngineブックマーク機能

TotalViewのリバースデバッグ機能であるReplayEngineは、逐次や並列アプリケーションの実行履歴を記録し、その場ですぐに逆向き実行したり保存して後から詳細に検討することができます。見逃したアプリケーションの変化を確認したり、問題の起きた箇所から根本原因にまで遡ることができ、デバッグの効率を大幅に向上させます。

今回のリリースでこのReplayEngineにブックマーク機能が搭載されました。デバッグセッションの特定のタイミングをブックマーク指定して保存し、後からすぐにその場所にアクセスすることができます。新UI用のユーザーガイドChapter 9に、このReplayEngineのブックマーク機能についての説明があります。コマンドライン(CLI)でも、dhistory -create_boookmarkの要領で設定可能です。

TotalViewの新機能を試してみたい方は、トライアルバージョンアップリクエストよりご連絡ください。

セールスエンジニア 柄澤(からさわ)