CodeDynamics の主な機能と特長

CodeDynamics はこれらの主要なテクノロジーをサポートします。

C や C++ のプログラムをデバッグ、トラブルシューティング

C 言語や C++ を使用すると、データ、アクセスパターン、メモリ管理、実行の詳細を管理できます。ただし、低レベルのマシン動作を直接管理するため、大規模な科学技術アプリケーションを開発したりメンテナンスする際にはわずかなミスも許されません。CodeDynamicsはCやC++で書かれた複雑なアプリケーションをトラブルシューティングするための理想的な環境を提供します。オブジェクトやデータ構造、ポインタの詳細を表示でき、複雑なオブジェクトの操作が簡易化されます。

STLはプログラムのデータをシンプルに操作するためのコレクションクラスです。しかしプログラムがハングしたりクラッシュした時にはSTLはトラブルシューティングを厄介なものにします。CodeDynamics の型変換機能(TTF, TypeTransformation)を使用することにより、データオブジェクトを柔軟に表示できます。STLView変換機能は STLのオブジェクトを論理的に表示し、リストデータなどをより実際的に表示します。その結果コードの構造や振る舞いがシンプルで直観的に表示されます。

アプリケーションの挙動や計算用のデータ、パターンをよりよく理解するためのデータの可視化

開発されるアプリケーションの多くはデータ操作のためのエンジンです。それが観察の対象であるか、計算の対象であるかにかかわらず、重要なのはデータです。物理システムの動作に対する見識を得る目的の場合は、定量的なアプローチが必要になります。計算システムの動作を理解する目的でも同様です。

トラブルシューティングの中には、稼働中のアプリケーションの挙動を観察したり、計算が思ったように実行されない理由の手がかりを探ったり、データを様々な形でスライスして未知のパターンを探す、という作業があります。そのようなデータを簡単に観察し操作できるツールが不可欠であり、CodeDynamics を使えば効率的にこれらの作業を行うことができます。

メモリリークやアロケート周りのエラーをデバッグ

メモリは有限のリソースであり、何百万行という大量コードのアプリケーションでは特に、実装に大きな影響を与えます。プログラムの複雑性が増すと、メモリーリークのデバッグやmallocエラーの問題解決が困難になります。メモリ関連のコード欠陥があると、リソース管理ができなくなり、ランダムにデータ破壊が発生する原因になります。メモリエラーによって、不規則なプログラムクラッシュが起こる場合もあり、生産性に悪影響を与えます。最悪の場合、メモリエラーによってデータが壊れ、プログラムから不正確な結果が生成される原因になることもあります。CodeDynamicsはコードが正しく動いてきちんと正確な結果を出すように、このようなリスクをコントロールします。

マルチスレッドアプリケーション/マルチコアアーキテクチャ

クロック数が増加していく時代は終わり、プロセッサの構造はマルチコアやメニーコアで設計されるようになりました。マルチスレッドのアプリケーションを作成したり逐次アプリケーションを並列アプリケーションに移行するのは大きな課題です。CodeDynamicsとReplayEngineは初めから並行、並列、マルチスレッドのアプリケーションの問題を解決するために作られています。

競合状態(レースコンディション)は、適切に検証されたマルチスレッドアプリケーションでも、よく見られる問題です。ロック、セマフォー、アトミック操作を使用して、競合状態を回避することができますが、それら自体がまた新しい微妙な問題の原因になりかねません。ローグウェーブのツールを使用することにより、コードの動作を可視化し、このような問題の影響に対する理解を深められます。

バッチデバッグ

CodeDynamicsの自動バッチデバッグスクリプトであるTVScriptは、CodeDynamicsを使用した非対話型デバッグのためのフレームワークです。対象プログラム内で起こる可能性のある一連のイベントをユーザが定義すると、TVScriptがプログラムの読み込みを制御し、必要に応じてブレークポイントを設定し、プログラムを実行します。プログラムが停止するたびにTVScriptがデータを収集し、ジョブの完了後にユーザが確認できる出力ファイルにログを記録します。TVScriptを引数なしで呼び出すと、使用方法と、使用できるイベントやアクションのリストが表示されます。TVScriptは強化版printfと考えることもできます。
 

ローグウェーブが提供する Capability