|
ChIDEユーザーズガイド
-
導入
-
はじめに
-
例題1 - 出力をともなうC/Ch/C++プログラムの作成と実行
-
Chにおけるパスの設定とコマンドの検索
-
例題2 - 入力を伴うサンプルの実行
-
例題3 - プロットの実行
-
例題4 - コマンド引数を伴った実行
-
C/Ch/C++ プログラムのデバッグ
-
デバッグウィンドウ内での [debug] コマンドの使用
-
C/C++プログラムのコンパイルとリンク
-
ChIDE におけるバッファ
-
ChIDE におけるセッション
-
ChIDEで解釈可能な文書
-
ChIDE における検索と置換
-
ChIDE におけるキーボードコマンド
-
ChIDE における折りたたみ表示
-
ChIDE におけるエンコーディング
導入
ChIDEは、C/Ch/C++プログラムをChで作成、デバッグ、実行するための統合化開発環境(IDE)です。
Ch
は、クロスプラットフォームスクリプティング、シェルプログラミング、
2D/3Dプロット、数値計算、および組み込みスクリプティング用の、
組み込み可能なC/C++インタープリタです。ChIDEは、
Embedded Chを用いて開発されています。
Microsoft Visual Studio .NETのようなCおよびC++コンパイラを用いると、
ChIDEは編集済みのC/C++プログラムをLinuxおよびWindows上で、コンパイル、リンクすることもできます。
ChIDEのユーザインターフェースを、日本語、ドイツ語、フランス語、中国語、韓国語
のような多くの言語のなかから選択することが可能です。
このドキュメントは、ChIDEのいくつかの機能と、プログラム開発のためのその使用法について説明しています。
ChIDEの最新のドキュメントは、
ここからダウンロードすることが可能です。
はじめに
ChIDEは、コマンド
chide を実行して起動することができます。
Windows上では、ChIDEは、
図 1 に示されているように、
デスクトップ上でそのアイコンをクリックして、簡単に起動することも可能です。
図 1: Windowsのデスクトップ上でのChIDEアイコン
ChIDEが起動されると、そのグラフィカルユーザインターフェースが、
図 2 のように表示されます。
ここで説明されている情報は、[ヘルプ] → [ChIDE のヘルプ] をクリックすると表示されます。
図 2: ChIDEの使用法に関するオンラインヘルプの表示方法
クラスでのプレゼンテーション用に、プログラムのフォントサイズは、
[表示] → [フォントサイズの変更] を選択して変更することができます。
ツールバーまたはデスクトップ上の Ch アイコンを
クリックすると、図 3 のようなChコマンドシェルが起動されます。
ウィンドウの左上隅角にあるChアイコンを右クリックし、[プロパティ] メニューを選択すると、
シェルウィンドウのウィンドウおよびフォントサイズと同様に、そのテキストと背景の色も変更可能です。
なおWindows Vista上でこのような変更を行う場合、ChIDEを管理者権限で実行する必要があります。
このコマンドシェル内で、MS-DOSとUnixコマンドを実行することができます。C/Ch/C++
プログラムと同様に、CまたはC++ステートメントもまた、図 3
に示すように実行可能です。
図 3: Ch コマンドシェル
例題1 - 出力をともなうC/Ch/C++プログラムの作成と実行
ChIDEにおけるテキスト編集作業は、[メモ帳] に自動書式スタイリング機能を追加したような、
ほとんどのWindowsまたはMacintoshエディタでの作業と類似しています。
ChIDEは一度に複数のファイルをメモリ上に保持することが可能ですが、表示されるのは、
1つのファイルのみです。ChIDEは最大20個のファイルまでをメモリに保持可能です。
ChIDEには、編集ウィンドウ、デバッグウィンドウ、アウトプットウィンドウの3つのウィンドウがあります
デバッグウィンドウは、編集ウィンドウの下または右に配置されています。
このウィンドウのサイズは起動時にはゼロになっていますが、
編集ウィンドウとの境界をドラッグすることにより、拡大することができます。
同様に、アウトプットウィンドウもデバッグウィンドウの下または右に配置されていて、
起動時にはゼロになっていますが、
デバッグウィンドウとの境界をドラッグすることにより、拡大することができます。
[オプション] → [左右に分割] を選択すると、デバッグウィンドウを編集ウィンドウの右に
移動し、アウトプットウィンドウをデバッグウィンドウの右に移動することができます。
ChIDEで編集済みのC/Ch/C++プログラムは、コンパイルすることなしに、
すぐにChインタープリタでデバッグまたは実行可能です。
また編集済みのプログラムは、Microsoft Visual Studio .NETのようなC/C++コンパイラを用いて
コンパイル、リンクし、ChIDEで実行することも可能です。
プログラムからの出力は、直接アウトプットウィンドウに表示されます。
たとえば、新規ドキュメントを開き、以下のプログラム
#include
int main() {
printf("Hello, world!\n");
return 0;
}
を入力します。
同じプログラム hello.c は CHHOME/demos/bin/hello.c に含まれています。
ここで、CHHOMEはChのホームディレクトリで、Windows上では、
C:/Ch/demos/bin/hello.c のようになり、
[ファイル] → [開く] コマンドロードすることができます。
このプログラムは、
図 4 のように、書式が色付きで強調されて表示されます。
図 4: プログラム hello.c
このドキュメントを
図 5 のように、hello.c として保存します。
図 5: プログラム hello.c の保存
プログラム hello.c を実行するには、
図 6 のように、[実行] ボタン、
または [ツール] → [実行] メニュを選択します。
図 6: プログラム hello.c の実行とその出力
[実行] ボタン、または [ツール] → [実行] を選択する代わりに、
ファンクションキーF2を押すことにより、同じようにプログラムを実行することができます。
アウトプットウィンドウがまだ表示されていない場合は、これが表示され、以下の実行結果
>ch -u hello.c
Hello, world!
>Exit code: 0
が
図 6 のように出力されます。
ChIDEから出力された1行目の青字の行は、ChIDEがプログラムを起動した際に使用した
コマンドを示しています。黒字の行は、Chプログラムの実行結果です。
ChIDEから出力された最後の青字の行は、プログラムが終了し、
その終了コードを表示したことを示しています。終了コードがゼロであることは、実行が
正常に終了したことを意味しています。
ChIDEは、Chが発生したエラーメッセージを正しく受け取ることができます。
このことを確かめるには、Chソースファイルに意図的に誤りを追加します。たとえば、
printf("Hello, world\n");
の行を、
printf("Hello, world\n";
のように変更してから、プログラムを実行します。結果は以下のようになります。
>ch -u hello.c
ERROR: missing ')'
ERROR: syntax error before or at line 4 in file hello.c
==>: printf("Hello, world\n";
BUG: printf("Hello, world\n"; <== ???
ERROR: cannot execute command 'hello.c'
>Exit code: 1
実際の実行画面は、
図 7 のようになります。
図 7: プログラム hello.c 実行時のエラー出力
図 7 におけるアウトプットウィンドウ内の赤字の行をクリックすると、
不正な書式を含んだ行が
図 8 のように強調表示されます。
図 8: プログラム hello.c 実行出力からのエラー行の検索
この単純なケースでは、問題がどこにあるかを見つけるのは簡単ですが、大きなファイルの場合、
[ツール] → [次のメッセージ] コマンドを使用して、レポートされたエラー個所を表示すること
ができます。[ツール] → [次のメッセージ] を実行すると、
アウトプットウィンドウ内の最初のエラーメッセージと、編集ウィンドウ内の該当する行が、
黄色い背景で強調表示されます。
文字カーソルがこの行に移動し、必要な場合は編集ウィンドウがスクロールします。
ChIDEは、
図 8 のようになります。
ほとんどの場合ChIDEは、エラーメッセージのファイル名と行番号を検知し、
エラーが(ヘッダファイルのような)外部のファイルで発生した場合には、
そのファイルを開きます。この機能は、空白または ".." を含んだ複雑なファイル名
に対しては、動作しません。
コマンドの実行が失敗し、終了に非常に時間がかかる場合は、
[プログラムの強制終了] ボタン、またはデバッグツールバーの [実行の停止] コマンド
を使用します。
Windows環境においてChIDEは既定では、ツールをコマンドラインプログラムとして実行します。
このモードでGUIプログラムを実行すると、ウィンドウを表示せずにプログラムが実行されます。
プログラムを実行せずにその書式チェックのみを行うには、[文法解析] ボタン、
または [ツール] → [文法解析] コマンドを使用します。
Chにおけるパスの設定とコマンドの検索
コマンドを実行する目的で、コマンドシェルのプロンプトに入力すると、
コマンドシェルがそのコマンドを、前もって指定されたディレクトリ内で検索します。
Chシェルでは、文字型のシステム変数
_path
は、そのコマンド検索のディレクトリを含んでいます。
各ディレクトリは、文字列 _path 内でセミコロンで区切られています。
Chコマンドシェルが起動されると、システム変数 _path はいくつかの既定の
検索パスを含みます。
文字型の引数を追加してそれを新規の文字列として返す文字関数 stradd()
を用いて、コマンドシェル用の検索パスに新たなディレクトリを追加することができます。
たとえば、ディレクトリ
C:/Documents and Settings/Administrator/c99
は、コマンドの検索パスではありません。
プログラム hello.c を実行しようとしたときに、現在の作業ディレクトリが
C:/Documents and Settings/Administrator
である場合、Chシェルはこのプログラムを探すことができずに、以下の
2つのエラーを発生します。
C:/Documents and Settings/Administrator> hello.c
ERROR: variable 'hello.c' not defined
ERROR: command 'hello.c' not found
Chが起動されるか、またはChプログラムが実行された場合、既定では、
ユーザのホームディレクトリ(が存在すれば)上で設定ファイル .chrc
(Unix)または _chrc(Windows)が実行されます。
このドキュメントでは、これ以降、ホームディレクトリ上に
設定ファイル _chrc があるWindows環境でChが使用されるものと仮定します。
この設定ファイルは、通常コマンド、関数、ヘッダファイルなどの検索パスを設定します。
Windows上では既定の設定での設定ファイル _chrc は、Chのインストール中に
ユーザのホームディレクトリ上に作成されます。
しかしながら、Unixでは、既定でユーザのホームディレクトリ上に設定ファイルはありません。
システム管理者はこのような設定ファイルを、
ユーザのホームディレクトリに追加することが可能です。
しかしながら、ホームディレクトリ上に設定ファイルがまだない場合に、
サンプルの設定ファイルを CHHOME/config/ ディレクトリから
このユーザのホームディレクトリにコピーするために、ユーザは、
Chを以下のようにオプション -d 付きで実行することができます。
ch -d
CHHOME は文字列 "CHHOME" ではなく、
Chがインストールされるファイルシステムのパスであることに注意してください
たとえばChは、既定でWindowsでは C:/Chに、Unixでは /usr/local/ch
にインストールされます。
Windows上では、Chシェルにおけるコマンド
C:/Documents and Settings/Administrator> ch -d
は、ユーザのホームディレクトリ
C:/Documents and Settings/Administrator.
上の設定ファイル _chrc を上書きしようとします。
このローカルのCh初期化設定ファイル
_chrc
は、
図 9 に示されるように、
ChIDEエディタで、検索パスの編集用に開かれます。
図 9: ローカルのCh初期化設定ファイルを編集用に開く
ディレクトリ C:/Documents and Settings/Administrator/c99
をコマンドの検索パスに含ませるには、コマンド
_path = stradd(_path, "C:/Documents and Settings/Administrator/c99;");
をユーザのホームディレクトリ上の設定ファイル _chrc 追加して、
このディレクトリ上のコマンド hello.c が
現在の作業ディレクトリに関係なく起動できるようにする必要があります。
ディレクトリ
C:/Documents and Settings/Administrator/c99
を検索パス _path に追加後は、Chコマンドシェルを再起動する必要があります。
これ以降は、このディレクトリ上のプログラム hello.c を
以下のように起動可能になります。
C:/Documents and Settings/Administrator> hello.c
Hello, world
コマンドに対する _path と同様に、
Chにおけるヘッダファイルは、システム変数 _ipath で指定される
ディレクトリ内で検索されます。
各パスは、同様にセミコロンで区切られます。
たとえば、ステートメント
_ipath = stradd(_ipath, "C:/Documents and Setting/Administrator/c99;");
は、ディレクトリ
C:/Documents and Setting/Administrator/c99
をヘッダファイルの検索パスに追加します。
以下のステートメントを用いて、このディレクトリに関数ファイル
検索パスも追加することができます。
_fpath = stradd(_fpath, "C:/Documents and Setting/Administrator/c99;");
例題2 - 入力を伴うサンプルの実行
この例題では、ユーザによるデータ入力を必要とするC/Ch/C++プログラム/スクリプト
の実行方法を示します。
図 10 のようなコードを入力します。
同じプログラム C:/Ch/demos/bin/scanf.c
は、[ファイル] → [開く] を用いてロードすることもできます。
実行中に、このコードは "Please input a number" とユーザに問い合わせ、そして、
"Yout input number is" と入力された数字をシステムに出力させます。
図 10: 入出力を伴うプログラム
このプログラムの実行中に、
図 10 のように、ユーザは数字の入力を求められます。
ユーザは入アウトプット用の同じウィンドウ内に数字を入力する必要があります。
入力された数字56とアウトプットは、
図 10 のように表示されます。
例題3 - プロットの実行
この例題では、グラフをプロットするC/Ch/C++プログラム/スクリプトの実行方法を示します。
図 11 のようなコードを入力します。
図 11
で示されるプログラムと同じもの C:/Ch/demos/bin/fplotxy.cpp
は、[ファイル] → [開く] コマンドを用いてロードすることもできます。
このプログラムが実行されると、
図 12 のようなグラフがプロットされます。
プロット関数 fplotxy() は、ChまたはSoftIntegration Graphical Libraryで提供されます。
図 11 で示されるプログラムは、
関数 fplotxy() を使用して、関数 func() の値をxが0から360の範囲について37個の点でプロットします。
ヘッダファイル chplot.h でのプロット機能を用いてプログラムをコンパイルするには、
このプログラムをファイル拡張子 .cpp 付きのC++プログラムとして扱い、SIGL C++ プロット
ライブラリとリンクする必要があります。
C++コンパイラを用いてC++プログラムをコンパイルする方法については、あとで説明されます。
図 11: fplotxy() を用いたプロットプログラム
図 12: プロットプログラムの出力
プロット関数 plotxy() は、C配列内のデータのプロットに使用することができます。
図 13
で示されるプログラム C:/Ch/demos/bin/fplotxy.cpp
は、通常のC配列を用いて、プロットで使用されるデータを格納します。
図 13
で示されるプログラム
C:/Ch/demos/bin/plotxy.cpp
がロードされ、実行されると、
図 12 と同じグラフがプロットされます。
図 13: plotxy() を用いたプロットプログラム
プロット関数 fplotxyz() は、
図 14 に示されるように
2つの変数を伴った三次元関数のプロットに使用されます。
このプログラムは、-3から3の範囲のxの値と-4から4の範囲のyの値に対して、
関数 cos(x)sin(y) をプロットします。
このプロットには、xとyの両方に対して80個の点が使用されます。
図 14のプログラム
C:/Ch/demos/bin/fplotxyz.cpp
がロードされ、実行されると、
図 15 に示されるような
グラフがプロットされます。
図 14: fplotxyz() を用いたプロットプログラム
図 15: fplotxyz() を用いたプロットプログラムの出力
例題4 - コマンド引数を伴った実行
ChIDEには、変更可能な引数をもつコマンドの実行に使用できる、
4つのプロパティ $(1) .. $(4) があります。これらの引数値を設定するには、
[表示] → [引数] コマンドを用いて、これらの現在の値を表示して
新規の値の設定を許可する、モードレスの[引数] ダイアログを表示します。
メインウィンドウのショートカットキーは、このダイアログ表示中にも有効ですので、
コマンドを異なる引数で迅速に複数回実行する際に、
このダイアログを使用することができます。
これを使う代わりに、'*' で始まるコマンド(そうでない場合は無視されます)
を実行する際に、そのコマンドに形式上の引数ダイアログを表示させることができます。
このモードレスの [引数] ダイアログがすでに表示されている場合、'*' は無視されます。
図 16 のプログラムは、コマンド引数を伴った
C/Ch/C++プログラム/スクリプトの実行方法を示します。
このプログラムは、コマンド引数を受け入れて、これを出力します。
引数は、[表示] → [引数] メニュー
図 17
および 図 18
のように、[表示] → [引数] メニューで設定されます。
このコマンド引数を伴ったプログラムの実行結果は、
図 19 のようになります。
図 16: コマンド引数を扱うプログラム
図 17: コマンド引数の設定
図 18: コマンド引数の設定
図 19: コマンド引数を伴ったプログラムの実行結果
C/Ch/C++ プログラムのデバッグ
Ch IDE は、バイナリCプログラム用の典型的なデバッガで利用可能なすべての
機能を備えています。「開始」と「(ブレークポイントの)解除」のようなデバッグ
インターフェースコマンドは、
図 20 のようになっています。
図 20: [デバッグ] メニュー
これらは、図 21 のように、デバッグバー上で直接
使用することもできます。
デバッグ中の任意の時点で使用可能なデバッグバー上のコマンドは、クリック可能になっています。
クリックできないコマンドは、グレーアウトされています。
図 21: ブレークポイントの設定
デバッグモードでは、[開始] コマンドにより、編集ウィンドウ内のプログラムを実行することができます。
プログラムの実行は、ブレークポイントにヒットすると停止します。
プログラムを1行ずつ実行するには、[シングルステップ] または [次へ] を使用します。
[シングルステップ] コマンドは関数の中にステップインします。一方、[次へ] は
関数をステップオーバーして、次の行を実行対象にします。
デバッグ中に [続行] コマンドをクリックすると、プログラムは、
ブレークポイントにヒットするか、あるいは最後まで実行されます。
プログラムの実行前またはデバッグ中に、新規のブレークポイントを追加して、
これにヒットしたときにプログラムの実行を停止させるようにすることができます。
ある行に対するブレークポイントは、図 21 のように、
その行の左余白([表示] → [余白] をクリックして表示させる)をクリックして設定します。
このブレークポイントを解除するには、この行の左マージンにある赤い丸印をクリックします。
デバッガのブレークポイントは、図 21 のように、
デバッグウィンドウの上の [ブレークポイント] タブをクリックして、調べることができます。
デバッグウィンドウは、各ブレークポイントに対するブレークポイント番号とその場所を表示します。
現在の行に対するブレークポイントは、[ブレークポイントを現在行に設定] メニュー
をクリックしても設定可能です。
これを解除する方法として、[現在行のブレークポイントを解除] メニューを選択することもできます。
しかしながら、ブレークポイントは以下のような初期化をともなう宣言文には設定できません。
int i = 10;
実行中およびデバッグ中のプログラムを編集すべきではありませんが、
あえてそうしようとすると、警告メッセージ
「警告:デバッグ中にこのファイルに加えられた変更は
現在のデバッグセッションには反映されません。」
が表示され、そのプログラムの実行が終了し、編集可能になります。
コードの追加/削除によりプログラムが編集されると、
そのプログラムに対するブレークポイント設定が自動的に更新されます。
デバッグウィンドウ内で [debug] コマンドを用いると、
あとで説明されているように、ブレークポイントを関数と変数制御に対して設定することもできます。
デバッグモードでプログラムが実行されると、標準入出力とエラーストリームが、
図 22 のように、独立した [Debug Console Window] にリダイレクトされます。
既定では、このコンソールウィンドウは常に他のウィンドウの上に表示されます。
この既定の動作は、[表示] → [Debug Command Windowを常に最前面に表示] コマンド
により、オン/オフの切り換えを行うことができます。
このコンソールウィンドウは、[表示] → [Debug Command Window] コマンド
により、開いたり閉じたりすることができます。
このコンソールウィンドウの内容をクリアするには、
[デバッグ] → [デバッグコマンドウィンドウを消去] コマンドを使用します。
この「コンソールウィンドウ」のウィンドウおよびフォントサイズはもちろん、
背景と文字の色は、このウィンドウの左上隅の ChIDE アイコンを右クリックし、
[プロパティ] メニューを選択して変更することができます。
なおWindows Vista上でこのような変更を行う場合、ChIDEを管理者権限で実行する必要があります。
図 22: デバッグ時の入出力用 Debug Console Window
プログラムの実行が失敗し、終了に非常に時間がかかる場合、[中断] コマンド
を用いてこのプログラムを停止することができます。
[シングルステップ] または [次へ] コマンドにより、プログラムが1行ずつ実行された場合、
現在のスタック内の変数名とその値は、デバッグウィンドウ上で、その上部の [ローカル変数] タブ
をクリックすることにより、調べることができます。
プログラムの実行制御が関数内にあるときに、[locals] コマンドを入力すると、
その関数のローカル変数と引数の値が表示されます。
プログラムの実行制御がスクリプトの関数内にないときに、[locals] コマンドを入力すると、
そのプログラムのグローバル変数の値が表示されます。
図 23 のように、
CHHOME/demos/bin ディレクトリにあるプログラム func.c が
9行目を実行対象にし、緑色でハイライトされているとき、
ローカルの整数 i と n は 1 と 10 に、一方double型の配列 a は、1、2、3、4、5を含んでいます。
図 23: 現在呼び出されている関数内のローカル変数名と値の表示
デバッグ中に関数スタックを変更することができます。
このスタックは、そのスコープ内の変数がデバッグウィンドウ内で表示され、アクセスされるように、
呼び出し関数の [上へ] 移動するか、または呼び出された関数の [下へ] 移動することができます。
たとえば、図 23 で [上へ] コマンドをクリックすると、
プログラムの制御フローは、図 24 で緑色にハイライトされているように、
呼び出し関数 main() の15行目に移動します。
図 23 では、[下へ] メニューはクリック不可になっていますが、
このメニューは、現在のスタックが上に移動させられた際、
図 24 ではクリック可能になっています。
この時点でのデバッグウィンドウは、唯一の定まった変数である、呼び出し関数main()内の変数 i の名前と値を表示します。
図 24: 呼び出し関数内のローカル変数名と値の表示
デバッグウィンドウ上部の [スタック] タブは、各スタック内の、
関数、メンバ関数、またはプログラム名および対応するスタックレベルを表示します。
たとえば 図 25 に示されているように、関数func()は、
C:\Ch\demos\bin\func.c ディレクトリにあるプログラム func.c により起動された
関数main()により、呼び出されます。
図 25: 実行点に対する異なるスタックの表示
全スタック内の変数名の名前とその値は、デバッグウィンドウ上部の [変数] タブ
で、図 26 のように表示されます。
このケースでは、プログラムは9行目で停止します。
関数func()とmain()内のグローバル変数はもちろん、
ローカル変数の名前と値もデバッグウィンドウ内に表示されます。
おわかりのように、9行目の実行前のグローバル変数 g の値は 200 になっています。
図 26: 全スタック内のすべての変数の名前と値の表示
図 20 で表示されている、デバッグメニュー内の
コマンド [デバッグウィンドウに特別な変数の値を表示する] をクリックすると、
__func__ のような特殊な変数の名前と値がデバッグウィンドウの [ローカル変数] と [変数] タブ
内に表示されます。
デバッグウィンドウ内での [debug] コマンドの使用
プログラムのデバッグ中には、多くのデバッグコマンドが使用可能です。
デバッグウィンドウ上部の [コマンド] をクリックすると、プロンプト
debug>
が表示され、デバッガがデバッグコマンドを受け付け可能になったことを示します。
[help] コマンドを入力すると、図 27 のように、
使用可能なすべてのコマンドが表示されます。
図 27: デバッグウィンドウ上のデバッグコマンド
コロン(:)の左側のメニューはコマンドを示し、その右側は
そのコマンドの動作について説明しています。
デバッグコマンドウィンドウ内では、デバッグバー上の全コマンドを使用することができます。
さらに、デバッグコマンドウィンドウ内でしか使用できない機能がいくつかあります。
[start] コマンドは、プログラムのデバッグを開始します。
[start] と [run] コマンドのオプションの引数は処理されて、
main()関数に対する引数に渡されます。
たとえば、図 19 のプログラム
C:\Ch\demos\bin\commandarg.cを実行するため、デバッグコマンド
debug> start -o option1 -v option2 option3 option4
は、文字列
"C:\Ch\demos\bin\commandarg.c"、"-o"、"option1"、"-v"、"option2"、"option3"、および "option4"
を、Chスクリプト commandarg.c のmain関数
int main(int argc, char *argv[])
の引数 arv のエレメント
argv[0]、argv[1]、argv[2]、
argv[3]、argv[4]、argv[5]、
および argv[6]
にそれぞれ割り当てます。
[Debug Console Window] の出力は、図 19 のアウトプットウィンドウ
に表示された内容と同様です。
空白文字を含んだオプションの引数は、以下のように二重引用符で囲む必要があります。
debug> start opt1 "opt2 with space" opt3
プログラムはブレークポイントにヒットすると停止します。
[run] コマンドを入力すると、プログラムは、ブレークポイントを無視し、
デバッグされることなしに実行されます。
[step] または [next] コマンドにより、デバッグバー上のコマンドと同様に、
プログラムを1行ずつ実行することができます。
[step] コマンドは、関数にステップインし、一方 [next] コマンドは、
関数をステップオーバーして次の行を実行対象にします。
デバッグ中に [cont] コマンドを起動して、プログラムをブレークポイントに
ヒットするか、または最後まで実行させることができます。
デバッグ中に関数スタックを変更することが可能です。
[up] および [down] コマンドにより、関数スタックのスコープ内の変数に
デバッグコマンドウィンドウ内でアクセスできるように、
それぞれ関数スタックを、その呼び出し関数の上に移動させるか、
または呼び出された関数の下に移動させることができます。
すべてのスタック内の関数またはプログラム名を表示させるには、[stack] コマンドを使用します。
現在のスタック内の変数の名前とその値を表示させるには、[locals] コマンドを使用します。
[variables] コマンドを入力すると、各スタック内のスコープにあるすべての変数の
名前と値が表示されます。
[watch] コマンドは、シングル変数を含む式をウォッチ式のリストに追加します。
ウォッチ式は、プログラムの実行前にも実行中にも追加することが可能です。
[remove expr] コマンドを使用すると、ウォッチ式のリストから式を削除することができます。
また、[remove] コマンドは、ウォッチ式リスト内のすべての式を削除します。
たとえば、デバッグコマンドウィンドウ内で以下のコマンド
debug> watch 2*g
debug> i
を実行すると、図 28 のように、
式 2*g と変数 i がウォッチ式のリストに追加されます。
図 28: デバッグウィンドウ内でのウォッチ式と変数の設定
プログラムがブレークポイントで停止するか、または次のステートメントにステップイン
すると、デバッグウィンドウ上部の [ウォッチ] タブをクリックすることにより、
図 29 のように、
これらのウォッチ式の値がデバッグウィンドウ内に表示されます。
図 29: デバッグウィンドウ内でのウォッチ式と変数の表示
プログラム実行前またはデバッグ中に、新規のブレークポイントを追加して、
プログラムの実行を停止させることができます。
ブレークポイントは、次の3項目の指定、すなわち、
ファイル名と行番号、関数、および制御変数、により設定されます。
ブレークポイントが関数内に設定されると、プログラムは関数の最初の実行可能な行
で停止します。ブレークポイントが変数に対して設定されると、
プログラムは、その変数値が変更されたときに停止します。
各ブレークポイントには、オプションの条件式があります。
ブレークポイントの場所に到達すると、条件式があればその条件式が評価されます。
ブレークポイントは、式(ブレークポイント設定時に指定する必要があります)
が真かまたは変更された場合のみ、ヒットします。
既定では、ブレークポイントは、式が真の場合のみヒットします。
[stopat] コマンドは、引数としてファイル名と行番号を指定することにより、
新規のブレークポイントを設定します。
プログラムがこの場所に到達すると、実行が停止されます。
[stopin] コマンドは、関数に対して新規のブレークポイントを設定します。
プログラムがこの関数の最初の実行可能行に到達すると、実行が停止されます。
[stopvar] コマンドは、制御変数に対して新規のブレークポイントを設定します。
この変数は、プログラム実行中に評価されます。
プログラムは、この変数の値が変更されると、実行を停止します。
これらのコマンドのいずれかが起動されると、ブレークポイントがブレークポイント
リストに追加されます。各ブレークポイントに対するオプションの条件式とトリガ手段は、
これらのコマンドの最後の2つの引数として渡されます。
たとえば、ブレークポイントを完全なパスと行番号を用いて、ファイル内に設定
する場合は、以下のようになります。
debug> stopat filename #
debug> stopat filename # condexpr
debug> stopat filename # condexpr condtrue
ブレークポイントの場所に到達すると、オプション式 [condexpr] が評価されます。
引数 [condtrue] が真であるか、またはない場合、
ブレークポイントは、この式の値が真である場合にヒットします。
そうでない場合、ブレークポイントは、この式の値が変更された場合にヒットします。
たとえば、コマンド
debug> stopat C:/Ch/demos/bin/func.c 6
は、C:/Ch/demos/bin ディレクトリにあるファイル func.c 内の
6行目にブレークポイントを設定します。
コマンド
debug> stopat C:/Ch/demos/bin/func.c 6 i+j 1
も、ファイル func.c の6行目にブレークポイントを設定しますが、次のような違いがあります。
すなわち、ファイル func.c の6行目の位置のブレークポイントに到達すると、
式 i+j が評価され、この式の値が真のときに、ブレークポイントがヒットします。
上記の式は、以下の式と同等です。
debug> stopat C:/Ch/demos/bin/func.c 6 i+j
コマンド
debug> stopat C:/Ch/demos/bin/func.c 6 i+j 0
もやはりファイル func.c の6行目にブレークポイントを設定します。
この場合、ファイル func.c の6行目の位置のブレークポイントに到達すると、
式 i+j が評価され、この式の値が変更されたときに、ブレークポイントがヒットします。
逆に、適切な引数をともなって、コマンド
[clearline]、
[clearfunc]、および
[clearvar]
を実行すると、リスト内のそれぞれ、行、関数、および変数型が削除されます。
[clear] コマンドは、デバッガ内のすべてのブレークポイントを削除します。
変数、式、および関数は、[assign]、[call]、[print] コマンドで扱われます。
[assign] コマンドは値を変数に割り当て、[call] は関数を起動し、
[print] は変数または関数を含む式の値を出力します。
void型の式を出力することは、void型を返す関数の場合も含めて、無効な操作です。
式をタイプするだけで、その式の値が表示されます。
その式がvoidの型を返す関数である場合、その関数のみが呼び出されます。
たとえば、コマンド
debug> assign i=2*10
debug> call func()
debug> print i
20
debug> 2*i
40
debug>
は、変数 i に値 10 を割り当て、関数func()を呼び出し、
変数 i がそのスコープ内で有効な場合には、式 2*i の値を出力します。
他の例として、図 29 のように、プログラム func.c が
実行され、9行目で停止した場合、式 2*g とともに変数 a と i の値は、
デバッグコマンドウィンドウ上で対応するコマンドを入力することにより、表示されます。
図 30: デバッグウィンドウ内でのデバッグコマンドの使用
プログラムの実行が失敗し、終了に時間がかかり過ぎる場合は、
[abort] コマンドを用いて、プログラムを停止させることができます。
デバッグコマンドウィンドウは、図 20 で表示されているような、
[デバッグ] メニュー内の デバッグコマンドウィンドウを消去 コマンド
をクリックすることにより、消去できます。
C/C++プログラムのコンパイルとリンク
ChIDEは、編集ウィンドウ内の編集済みのC/C++プログラムを、CおよびC++
コンパイラを用いてコンパイル、リンクすることもできます。
既定では、ChIDEは、Windows上にインストールされている最新の
Microsoft Visual Studio .NETをCおよびC++プログラムのコンパイルに使用します。
Visual Studioコンパイラ用の環境変数とコマンドは、ユーザのホームディレクトリにあり、
図 9 のメニューで開いて編集できる、
別個のスタートアップ構築ファイル _chrc 内で修正可能です。
Linux上では、ChIDEは、CおよびC++プログラムのコンパイルに、
それぞれgccおよびg++コンパイラを使用します。
既定のコンパイラは、[オプション] メニュー内ののコマンドで開くことができる
C/Ch/C++プロパティファイル cpp.properties を編集することにより変更可能です。
図 31 で表示されている、[ツール] → [コンパイル]
コマンドは、プログラムのコンパイルに使用することができます。
図 31: C/C++ プログラムのコンパイル
CまたはC++プログラムのコンパイル時に発生したエラーメッセージは、
ChIDEのアウトプットウィンドウ内に表示されます。
[ツール] → [コンパイル] コマンドを実行する代わりに、
F3キーを押すと、プログラムのコンパイルと同じ効果が実現されます。
Windows上では、プログラムをコンパイルすると、拡張子 .obj をもった
オブジェクトファイルが生成されます。このオブジェクトファイルは、
[ツール] → [リンク] コマンドまたはF4キーを用いてリンクされ、
実行可能なプログラムが作成されます。
Windows上で実行可能なプログラムは、拡張子 .exe をもちます。
カレントディレクトリ上でMakefileが使用可能であれば、
[ツール] → [ビルド] コマンドを実行するか、または
F5キーを押すことにより、Makefileが起動されて、アプリケーションがビルドされます。
[ツール] → [実行] コマンドを実行するか、または
F6キーを押すことにより、作成された実行可能プログラムが実行されます。
ChIDE におけるバッファ
ChIDEには、それぞれがファイルを含んだ20個のバッファがあります。
ファイル名を選択するか、または
[前] (F6) および [次] (Shift+F6) コマンドを使用するかのいずれかの方法により、
[ウィンドウ] メニューを使用して各バッファを切り換えることができます。
全バッファがファイルを含んでいる場合に新規のファイルを開くと、
ファイルの保存が要求可能なバッファが再利用されます。
このケースではアラートが表示され、ユーザにこのファイルの保存を促します。
ChIDE におけるセッション
セッションとは、ファイル名のリストです。現在開いているバッファのすべてを、
将来の迅速なバッチロードのためにセッションとして保存することができます。
セッションは、拡張子 ".ses" をもったプレーンテキストファイルとして保存されます。
セッションをロードまたは保存するには、[ファイル] → [セッションをロード]
または [ファイル] → [セッションを保存] を使用します。
ChIDEのプロパティ変数 "save.session" を用いて、
「自動的にロードした最後のセッション」をオンまたはオフにすることができます。
既定では、セッション管理はオンになっています。
直前に保存されたセッションをロードすると、現在開いているバッファ
が閉じられます。しかしながら、この場合には保存していないバッファを
最初に保存するように促されますので、編集内容が破棄されることは避けられます。
コマンドラインから特定のファイルを開くと、"save.session" 変数
の状態が上書きされます。ChIDE上で、
コマンドラインからの特定のファイルのロードを開始する際には、
"save.session" 変数が "1" に設定されていても、最後のセッションには戻りません。
これにより、"save.session" を安全に使用することができます。
すなわち、ただ1つの特定のファイルを開こうとする際に、2つのファイルを
開くようなことは決してありません。
ChIDEで解釈可能な文書
ChIDEは現在のところ、以下の文書に対して、書式のスタイリングが可能です
(* は折りたたみ表示に対応していることを示しています)。
- C/Ch/C++*
- CSS*
- HTML*
- Make
- SQL および PLSQL
- TeX および LaTeX
- XML*
文書の設定は、ファイルの拡張子から決定されますが、この設定は [言語向き表示]
メニューから他の文書を選択することにより、変更可能です。[言語向き表示]
メニューは、menu.language プロパティを用いて変更することができます。
ChIDE における検索と置換
ChIDEは、単語、正規表現、大文字/小文字の区別、検索方向、文書の最後まで、
の検索が可能なオプションを備えています。
コマンドライン引数セクションの一覧にあるCスタイルのバックスラッシュの
エスケープは、制御文字の検索および置換に使用することができます。
置換は、現在の選択範囲または文書全体にわたって個別に行うことが可能です。
正規表現を使用すると、タグ付きの副表現をテキスト置換に使用することができます。
正規表現は、行末を越えてヒットすることはありません。
ChIDEは、
タグ付きの基本正規表現
に対応しています。
ChIDE におけるキーボードコマンド
ChIDEは、Scintillaで定めた既定のキーバインディングを使用しています。
したがって、ChIDEにおけるキーボードコマンドは、共通のWindowsおよび
GTK+規則にほとんど準拠しています。
すべての移動キー(矢印、Page Up/Down、Home、End)に対して、
Shiftキーを押した際のストリーム選択、
およびShiftとAltキーを押した際の長方形領域選択の切り換えが可能です。
いくつかのキーは、GTK+でのウィンドウマネージャなどのようなシステムに取られているために、
あるローカルキーボードでは使用できないことがあります。
user.shortcuts 設定を使用すると、キーに機能を割り当てることができます。
Homeキーの動作は、vc.home.key オプションにより変更されることに注意してください。
メニューコマンドのキーボードショートカットは、メニュー内に記載されています。
メニューショートカットをもたない、あまり一般的でない、コマンドは以下のとおりです。
| ヘルプ情報の参照 | F1 |
| Ch上でC/Ch/C++プログラムを実行 | F2 |
| C/C++プログラムをコンパイル | F3 |
| C/C++プログラムをリンク | F4 |
| Makefileを用いてC/C++プログラムをビルド | F5 |
| コンパイル済みのC/C++プログラムを実行 | F6 |
| C/C++プログラムの実行を停止 | F7 |
| アウトプットウィンドウを閉じる/開く | F8 |
| デバッグコマンドウィンドウを閉じる/開く | F9 |
| Debug Console Windowを閉じる/開く | F10 |
| 全画面表示 | F11 |
| Debug Console Windowを常に最前面に表示 | F12 |
| テキストサイズを拡大 | Ctrl+キーパッド+ |
| テキストサイズを縮小 | Ctrl+キーパッド- |
| テキストを通常のサイズに戻す | Ctrl+キーパッド/ |
| 開いているファイルを順に選択 | Ctrl+Tab |
| ブロックを挿入 | Tab |
| ブロックを削除 | Shift+Tab |
| 単語の先頭まで削除 | Ctrl+BackSpace |
| 単語の最後まで削除 | Ctrl+Delete |
| 行の先頭まで削除 | Ctrl+Shift+BackSpace |
| 行の最後まで削除 | Ctrl+Shift+Delete |
| 文書の先頭に移動 | Ctrl+Home |
| 文書の先頭まで選択 | Ctrl+Shift+Home |
| 表示行の先頭に移動 | Alt+Home |
| 表示行の先頭まで選択 | Alt+Shift+Home |
| 文書の最後まで移動 | Ctrl+End |
| 文書の最後まで選択 | Ctrl+Shift+End |
| 表示行の最後に移動 | Alt+End |
| 表示行の最後まで選択 | Alt+Shift+End |
| 表示の展開と折りたたみの切り換え | Ctrl+キーパッド* |
| ブックマークの作成または削除 | Ctrl+F2 |
| 次のブックマークまで選択 | Alt+F2 |
| 選択項目を検索 | Ctrl+F3 |
| 選択項目を後方に検索 | Ctrl+Shift+F3 |
| スクロールアップ | Ctrl+Up |
| スクロールダウン | Ctrl+Down |
| 行の切り取り | Ctrl+L |
| 行のコピー | Ctrl+Shift+T |
| 行の削除 | Ctrl+Shift+L |
| 直前の行と順序を入れ替え | Ctrl+T |
| 行を複製 | Ctrl+D |
| 合致するプリプロセッサ条件を検索し、ネストされている部分をスキップ | Ctrl+K |
| 合致するプリプロセッサ条件まで選択 | Ctrl+Shift+K |
| 合致するプリプロセッサ条件を後方に検索し、ネストされている部分をスキップ | Ctrl+J |
| 合致するプリプロセッサ条件まで後方に選択 | Ctrl+Shift+J |
| 直前のパラグラフ。Shiftキー併用でその個所まで選択 | Ctrl+[ |
| 次のパラグラフ。Shiftキー併用でその個所まで選択 | Ctrl+] |
| 直前の単語。Shiftキー併用でその個所まで選択 | Ctrl+Left |
| 次の単語。Shiftキー併用でその個所まで選択 | Ctrl+Right |
| 直前の単語部分。Shiftキー併用でその個所まで選択 | Ctrl+/ |
| 次の単語部分。Shiftキー併用でその個所まで選択 | Ctrl+\ |
ChIDE における折りたたみ表示
ChIDEは、多くの種類の文書(詳細については、「ChIDEで解釈可能な文書」の一覧を参照)
に対して、折りたたみ表示をサポートしています。
折りたたみポイントは、Cに対してはインデント、他の文書に対してはかっこ
のカウントに基づいています。
折りたたみポイントのマーカーをクリックすると、
展開と折りたたみの状態を切り換えることができます。
折りたたみ余白内で Ctrl+Shift+クリックを行うと、
最上位レベルの展開と折りたたみが実行されます。
折りたたみの切り換えを行い、同じ操作をすべての子の階層に対して行うには、
Ctrl+クリックを折りたたみポイントで実行します。
すべての子の階層を表示するには、Shift+クリックを折りたたみポイントで実行します。
ChIDE におけるエンコーディング
ChIDEは、Byte Order Mark (BOM) で始まるUnicodeファイルで使用されている
エンコーディングスキームを自動的に検知します。
UTF-8とUCS-2エンコーディングは、リトルエンディアンとビッグエンディアンの両方のUCS-2
も含めて認識可能です。
UTF-8ファイルが最初の2行いずれかにcoding cookieを含んでいる場合、このファイルもまた認識可能です。
coding cookieは、"coding: utf-8" ("coding" に ':' または '=' が続き、オプションで
空白、引用符、"utf-8") に類似していて、通常次のようなコメントに含まれています。
# -*- coding: utf-8 -*-
XMLでの宣言は、以下のようになります。
<?xml version='1.0' encoding='utf-8'?>
その他のエンコーディングに対しては、code.page と character.set プロパティを設定してください。
(注)
ChIDE は、Embedded Ch および Scintilla/SciTE を用いて開発されています。
Scintilla/SciTE の著作権(1998-2003)は、Neil Hodgson が所有しています。
完全な Scintilla/SciTE ライセンスは、Chインストールディレクトリ内の
license_Scintilla に含まれています。
|