Skip to content

翻訳記事:

  • RED HAT Magazineは、米国発の記事を翻訳したものです。

RED HAT SPEAKS

テスト環境で再現できない、いまいましいバグに出くわしたことはありませんか?Fryskを使用すれば、リアルタイムでモニタリングし、デバッグできます。オープンソースアプリケーションを悩ますバグをすばやく見つけてつぶす方法をご覧ください。

Frysk Monitor

原文(英語/2006年10月)

Frysk logo

Fryskの用途の1つは、実行分析ツールとして使用することです。

「実行分析ツールとは何か」と疑問に思われるかもしれません。

実行分析ツールとは、問題の発生が予想されるプログラムの実行をユーザがモニタリングできるソフトウェアです。それらの問題が発生すると、ユーザは従来のデバッガが提供するツールによって問題を分析できます。

Fryskは、従来のデバッガではありません。Fryskがすべてのデバッガに備えられた機能を提供することは当然ですが、Fryskを使用すると、デバッグ対象のプログラムを問題発生前にモニタリングすることもできます。さらにFryskでは、デバッグ対象のプログラムがまだ稼働しており、問題が依然として存在している間にデバッグを行うことができます。

Fryskの機能については、Red Hat Magazineで以前公開された『Frysk: Debugging or Monitoring Tool?』(Rick Moseley著)の中で、その一部が紹介されています。この記事では、Fryskのモニタリングの側面に注目します。

Frysk Monitorの詳細に踏み込む前に、その大目標について議論しておきましょう。Rickが彼の記事の中で述べているとおり、Red Hat Customer Advisory Board(CAB)のメンバーによって与えられた要件の1つは、目的のツールが大規模なマルチスレッドアプリケーションをデバッグできること、および複数のアプリケーションにまたがる可能性のある問題でもデバッグできることです。

どうすれば、1,000個ものスレッドを持つアプリケーションをデバッグできるのでしょうか。どうすれば、この大量の情報をユーザの役に立つ抽象化された形で表示できるのでしょうか。どうすれば、ユーザが必要に応じて追加情報をリクエストできるのでしょうか。これらがFrysk Monitorの大目標です。

難しそうに聞こえますか?そうかもしれません。

Fryskを実行したときに表示される最初のウィンドウは、Startup Managerダイアログです。

Frysk Monitoring Window screenshot
Frysk Startup Managerの画面例

Startup Managerでは、ユーザはFryskの実行モードを選択できます。第1のオプションでは、ユーザは既存のプロセスをデバッグできます。その場合、プロセスを選択して、ソースウィンドウへ直接移動することができます。ソースウィンドウでのデバッグ方法は、従来のデバッガと同様です。

他の2つのオプションには、Debug Sessionが関係します。セッションとは、Frysk Monitor(および一般にはFrysk)のフォーカスを、ユーザが関心を持っている1つまたは複数のプロセスに絞り込むための手段です。Startup Managerでは、ユーザはターミナルを使用してブランクセッションをオープンするオプションも選択できます。セッションをターミナルでオープンする場合、ユーザはLinuxのコマンドラインターミナルを利用できます。そのセッションは、ターミナルから実行されたプロセスによって使用されます。ユーザは新しいセッションを作成したり、以前作成したセッションをオープンしたりできます。

Newをクリックすると、Create Session Assistantが表示されます。そこでは、ユーザはセッションに名前を付与し、左側のリストから右側のリストへプロセスを移動することによって、関心のあるプロセスを選択します。左側のリストには、現在システムで実行されているすべてのプロセスが表示されます。

Frysk Create Session Assistant
Frysk Create Session Assistant

Process Groupsリストでは、共通の実行ファイルを持つプロセスがグループ化されています。その理由は、実行ファイルのパスは(プロセスIDと異なり)Fryskが再起動されても有効であることです。特定のプロセスIDは、別のプロセスによって取得されたり、どのプロセスにも割り当てられなかったりする可能性があります。したがって、ユーザは実行ファイルのパスを選択するだけであり、Fryskがそのパスを持つプロセスをセッションに割り当てます。

Frysk Process Groups
プロセスグループ

Nextをクリックすると、次のページが表示されます。このページでは、これらのプロセスに追加するオブザーバを選択でき、またカスタムオブザーバを作成できます。オブザーバとカスタムオブザーバについては、この記事のあとの方で詳しく説明します。Finishをクリックすると、セッション作成プロセスが終了し、Frysk Monitorが起動します。

The Frysk Monitor
Frysk Monitor

Frysk Monitorは、左側のプロセスビュー、右上のステータスビュー、右下のログという3つの主なセクションで構成されています。

Processesビューには、現在のセッションがフォーカスされているプロセスの一覧が表示され、それらに関する情報がいくらか表示されます。図に示されたとおり、このセッションには、セッション作成時に選択したfirefox-binというプロセスしかありません。コンテキストメニューを右クリックすると、これらのプロセスを操作し、オブザーバを追加することができます。

Statusビューには、セッション内のプロセスごと、およびそれらの各プロセスに属するスレッドごとにイベントトレースが表示されます。トレースは基本的に、イベントが発生するたびに行を表示します。たとえば、オブザーバがプロセス/スレッドに追加されると、それが表示されます。マウスポインタをイベント行の上に移動すると、そのイベントに関する情報が表示されます。将来の開発計画として、ユーザがイベント行をクリックすることにより、関係するソースコードエリアを表示できるようにすることなどが検討されています。次の画面例は、funit-childというプロセスがcloneシステムコールを行い、新しいスレッドがそのプロセスに追加された状態を示しています。

Status window
ステータス

Fryskでさらにオブザーバを実装していくと、ユーザは事実上、オブザーバの追加により、プロセスのコードに含まれるあらゆるイベントを監視できます。生成されるトレースによって、プロセススペースの抽象化されたビューが提供されます。このビューでは、(指定しないかぎり)やっかいな詳細情報は省かれますが、それでもプロセスの動作は正しくモデル化されます。

この抽象化と正確なモデル化こそ、ユーザがprintステートメントによるデバッグ作業を行うときの目標です。そうした抽象化の有効性を示す非常に単純な例の1つは、プログラム内の無限ループのキャッチです。無限ループはプログラムのステップ実行によって確認することも可能ですが、コードと変数のローカルステータスの確認に追われている間に、容易に見逃してしまいます。たとえば、printステートメントを正しく配置するか、または監視用のオブザーバを追加して関数の出入りが正しく行われるかどうかを確認すると、パターンの認識がはるかに容易になります。

Frysk Monitorウィンドウの第3の部分であるMain Logビューは、現在、オブザーバによって生成時にロギングされたステートメントを出力するために利用されています。

オブザーバというパラダイムは、Fryskの基本設計概念の1つです。Fryskのコアは、リクエストとイベントを通じてGUIとやり取りします。オブザーバは、それらのイベントを待ち受け、関係する部分に通知するクライアントです。

Fryskによって提供される基本的なオブザーバは、Frysk UIによってある程度カスタマイズできます。ユーザは、このUIを通じてフィルタやアクションを追加することによって、カスタムオブザーバを作成できます。フィルタとは、オブザーバにより受信されるイベントのパラメータの1つに焦点を絞り込むための手段です。また、アクションとは、そのオブザーバが出力したときに実行されるタスクです。アクションでは一般に、コード内での現在の実行位置を示すソースウィンドウが生成され、そのイベントがロギングされます。

基本的なFryskオブザーバを組み合わせて、より複雑な機能を作成する方法を示す単純な例が、プログラムオブザーバです。プログラムオブザーバの機能は、新たに生成されたプログラムを、execシステムコールのあとに最初の命令の実行が開始されるその瞬間にキャッチすることです。プログラムオブザーバは基本的に、プロセスに追加されたフォークオブザーバです。プロセスがforkシステムコールを行うと、ただちにプログラムオブザーバは、新たに生成された子に対してexecオブザーバとして追加されます。子コールのexecプログラムオブザーバがそのイベントをキャッチしたら、execの引数をチェックし、それが問題の実行ファイルかどうかを判定します。新しいプロセスの作成を通常担当しているシステム(/bin/bashやgnome-panelなど)でプロセスにFryskプログラムオブザーバを追加すると、起動された新しいプロセスのイベントの大半をキャッチできます。これは、Fryskセッションにとって基本的に重要です。これによって、プロセスの存在期間がいかに短くても、ユーザが選択した実行ファイルの新たに生成されたインスタンスを、プロセスリストに正しく追加できるようになります。

開発は、Fryskのすべての先端領域で精力的に続けられています。Fryskのコアの開発によって、オブザーバが現在よりもはるかに精密に設定できるようになります。Frysk Monitorのトレース行については、さらに精密化、安定化、および柔軟化するために開発が行われています。開発が続けられ、デバッグ作業に対する我々の理解が深まるにつれて、Frysk Monitorはデバッグ作業を変革し、我々が思い描くようなツールになっていくと期待されます。

Fryskに関与する方法

コードの作成作業、機能拡張要求の提出、あるいは開発状況のモニタリングなどを通じてFrysk に関与したい場合は、FryskのWebサイトをご覧ください。このWebサイトでは、Fryskメーリングリストに加入したり、パブリックIRCチャネル上でFryskの開発者が集まっている場所を調べたりできます。

執筆者について

Samiは、アルバータ大学からRed Hatに来たインターンです。16カ月の研修期間中、彼はFryskの作業に集中し、すべての分野で貢献しています。彼の貢献の大部分は、Fryskのモニタリングの側面とシステムコールトレース機能に関するものです。Samiは、Java-GNOMEプロジェクトのコードに相当な貢献をしています。そこで彼は、バグ修正と機能の追加で品質の高い寄与を行ったことにより、コミッタ特権を与えられました。