特別記事 : 魔夜隆史 、協力 / インプライズ ( 株 ) 和市 0 Debugger 55 入門 本稿では 7 月 18 日に無償で公開された Tu 市 0 Debugger 5 るのインストール 方法から BorIand C 十十 CompiIer 5.5 と組み合わせた実際の使い方までを解 説します。 はじめに 76 C MAGAZINE 2 0 9 r lnterface) スタイルのアプリケーションで Turbo Debugger は , CUI (Character Use ッガとして紹介されました。 月号 ) では Turbo Debugger が画期的なデバ 日本語版は ' 89 年 ) 。本誌の創刊号 ( ' 89 年 10 登場したのは 11 年前です ( 英語版は ' 88 年 , Turbo Debugger の歴史は古く , 最初に TurbO Debugger の背景 な選択肢だといえるでしよう。 あれば , BCC55 と Turbo Debugger は安価 ようが , C + + の学習などを目的とするので のような市販ソフトのほうが好ましいでし プリケーションを作成するには C + + Builder ことになります。最新の環境に対応するア の基本的な段階をすべて無償で入手できる を開始しました。これで , プログラム開発 Debugger 5.5 の無償ダウンロードサービス インプライズは , BCC55 に続いて Turbo きることは , ほとんどありませんでした。 プログラムのデノヾッグ機能を無償で入手で されているものもあります。これに対し , し , プログラミング用途向けに無償で提供 めのエデイタはメモ帳でもかまいません ればなりません。プログラムを作成するた も , これ以外のツールは自前で用意しなけ ンパイラやリンカが無償で提供されていて いうのは素晴らしいことです。しかし , コ ルのコンパイル環境が無償で入手できると が , ANSI C/C + + をサポートする市販レベ するのはコマンドラインツールだけです 大きな反響を呼びました。 BCC55 が提供 の無償ダウンロードが開始されたことは , BorIand C + + Compiler 5.5 ( 以下 BCC55 ) あり , ほかの Windows アプリケーション のような GUI (Graphical User lnterface) で はありません。しかし , 常に新しい技術を 取り込み , 長年にわたって多くの開発者に 愛用されてきました。 Windows 95 では誰 もがマウスの右ボタンをクリックして , そ の場に応じたポップアップメニューを表示 できます。 Turbo Debugger は 11 年も前か ら , この機能を「ローカルメニュー」と呼ん で組み込んでいました。これは , 当時普及 し始めていたオプジェクト指向という考え 方を取り入れたものでもあります。いまで は , Turbo Debugger の見かけは古くさく 感じられるかもしれませんが , その機能の いくつかは最新の開発ツールでも提供され ていないものです。 Turbo Debugger は , 一部制約はあるも のの BorIand C + + Builder や Borland Delphi で開発したアプリケーションでも利用でき ます [ 注 1 ] 。これらのツールをお使いの方も , ぜひこの機会に Turbo Debugger を使って みてください。 [ 注 1 ] なお , 残念ながら最新のデノヾッグ情報に 対応していない部分があるようで , コンパイラ の最適化や機能の強化に対応していない部分で は , シンポルの検索やソースコードの対応が期 待どおりに機能しないことがあります。 Turbo Debugger 5.5 のインストールファ イル (freeturbodebugger. exe) は , BCC55 とともに本誌付録 CD - ROM に収録されて います。また , 同じものがインプライズの Web サイトでも提供されています。どち らのものを利用する場合でも , TurboDe bugger をインストールするためには , イ ンプライズの Web サイトでの使用者登録 が必要です。 Turb0 Debugger 5.5 のインストール ・ Turb0 Debugger ダウンロードサービス http://www.inprise. CO. jp/cppbuilder/ freecompiler/turbodebugger. html ・ Turbo Debugger 使用者登録 http://www.inprise. CO. jp/cppbuilder/ freecompiler/debuggersurvey. html Web プラウザで使用者登録ページにア クセス , 必要な項目を入力してください。 使用者登録を行うと , インストールに必要 なパスワードを含むメールが返信されてき ます。工クスプローラなどから freeturbod ebugger. exe を実行すると , パスワードの入 力を促されるので , 返信されたパスワード を入力します。 次に使用許諾契約が表示されるので , 内 容に同意されたら一ボタンを押して 次に進みます ( 同意しない場合はインスト ールできない ) 。最後にインストール先の ディレクトリを指定して , 町ボタンを押 します。このときのディレクトリには BC C55 をインストールした場所と同じ場所を 指定してください。 BCC55 を使うための環境変数 ( PATH ) な どが設定されていれば , そのまま TurboD ebugger が使えるようになっているはずで す。なお , Turbo Debugger のインストー ラは , BCC55 と同じく [ スタート ] メニュ ーに項目を追加しません。必要ならば , デ バッガ本体 ( TD32. EXE ) を呼び出せるショ ートカットをメニューなどに追加しておく とよいでしよう。 ・関連ファイル インストールされるファイルは , 以下の ものです。 ・ TD32READ. TXT ・・ BIN ディレクトリには次のファイルがイ ンストールされます。 ・・リリースノート
Turb0 Debugger 5 る入門 特別記事 制終了させることになり , 警告が発せられ ラクタ画面で構成されたウインドウシステ ・・テパッガ本体 ・ TD32. EXE ・・ヘルプファイル ムです。 ます。 ・ TD32HELP. TDH ・・ Turbo Debugger が , いわゆる DOS 画面 Turbo Debugger の動作に関する設定は , ・・カスタマイズツ ・ TD321NST. EXE ・ を使っていることから , ほかのアプリケー TD321NST ユーティリティを使って変更す ションのようにウインドウを任意のサイズ ることもできます。 TD321NST を使うと , デバッグのための準備 に変更できないことに注意してください。 ウインドウの配色や起動時のデフォルト設 Turbo Debugger のウインドウの大きさは , 定などを細かく設定できます。通常は , デ DOS プロンプトに割り当てているフォン Turbo Debugger でデバッグしたいプロ フォルト設定のまま使うことをお薦めしま トの大きさに依存します。 [Options] → [Di グラムは , BCC32 のコマンドラインオプ す。 splay options] で [Screen lines] ラジオボタ ションで - v オプションを指定します。コン ・プログラムの読み込み パイラとリンカをべつべつに呼び出す場合 ンを CExtended] にすれば , 画面が縦方向 は , リンク時にも -v オプションを指定しま に伸びて 43 行モードになります。デバッ プログラムは前述したデバッグオプショ す。また , Delphi で作成したプロジェクト グ中に多くの情報を表示したい場合は , ン (-v) を使ってコンパイルしておきます。 をデバッグする場合は , [ プロジェクト ] → DOS プロンプトを使っている場合は , Tur のモードにしておくことをお薦めします。 [ オプション ] の [ リンカ ] ページに [ TD32 デ また , [Quick reference] を CJapanese] に設 bo Debugger を起動するときに直接対象と バッグ情報を含める ] チェックポックスを なるプログラムを指定できます。 定しておくと画面下部のステータスパーに たとえば , チェックしておきます。 C + + BuiIder では 表示される機能の短い説明が日本語になり [ デバッグ情報を作成 ] チェックポックスを ます。通常 , これ以外の設定は変更しない >TD32 test とすれば , Turbo Debugger を起動して test チェック状態にします。 ほうがよいでしよう。 . exe を読み込みま呶グレーの部分を入力 ) 。 Turbo Debugger のユーザインタフェイ スは , 通常の Windows アプリケーション このとき , プログラム名に続いて引数を指 定すれば , それが対象プログラムの引数と に似ていますが , メニューの左端にある二 本線はキーによるショートカットでは 工クスプローラで TD32. EXE をダブルク なります。 表示できません。これは + ーキ リック , または [ スタート ] メニューに登録 Turbo Debugger を起動した状態からプ ログラムを読み込む場合は [File] → [Open] した Turbo Debugger を呼び出すと , Fig. 1 ーに対応するものでしたが , Windows 上 ではシステムメニューが表示されます。 メニューを使って , 対象となるプログラム のような画面が表示されます。 Windows Turb0 Debugger を終了する場合は , CFil を指定します。このとき , 引数を指定する 環境しか使ったことがない方は , このよう e ] → [ Quit ] メニューや + 区キーを使っ ためには [Run] → [Arguments] メニューを な画面を見慣れないかもしれません。これ てください。 DOS プロンプトのクローズ 使います。 は , Windows が普及していなかったころ , シンポル情報付きの実行ファイルを読み DOS プロンプトで表示されるようなキャ ポックスを使うと , TurboDebugger を強 Fig. 2 対象プログラムの読み込み Fig. 1 Tu 「 bo Debugger 5.5 の起動画面 iew 、 1 ・ rea it View - . 「 ints 新 TurbO Debugger の起動 TD32 「新厂 ・ - T い 3 ・材を d 引 e : 5 司 eb lle: sa eb ェ 00 34 ー・ main(int 3 「 gc , char xxargv) ー猷儀約「 d : 0 , 「題 1 Ⅱ「総ニ 0 : ⅲを tot 引冊「 d ニ 0 , to ねⅡ i : 0 : for (int i i く argc;, i + + ) printf("File: Zs . , argv i]); FILE 新 0 : f 味ー arzv[i], ()p : : MIL) printf ("can't openVn") , i 「庇に ; ( トヨ「」 f[g-FSIZ]: hhi 是 (fgets(b 」 f . sizeof (p)) { 「 d + : 0 朝ェは一冊「 d ( ト」 f ) : を . e 「 32-bit VersiTl 5.5 ⅵ (c) 1988 , 2000 18 「 i % 「 PO 「 a い 特別記事 Turbo Debugger 5.5 入門 77
和市 0 Debugger 5.5 入門 たアドレスまで実行させるというもので す。デバッグしたい関数名を入力すると , わざわざソースコードから関数名を探さな くても , 自動的にその関数にたどり着くま で実行されます。 [ ⅱ mate ] はソースコー ドを 1 行ずつ一定時間間隔 ( 0.1 秒単位 ) で実 行してくれるというものです。 [ ] + ] キー (Back trace) は Turbo Debu gger の特徴的な機能です。文字どおりプ ログラムを逆実行できるのです。この機能 を実現するため , Turbo Debugger は命令 を 1 ステップ実行するたびに , 命令を実行 する前の状態を記憶しています。 命令の逆実行にはいくつか条件がありま す。まず , CView] → [Execution History] で ローカルメニューを呼び出し ( マウスの右 クリック ) , [Full history] を [Yes] にしま す。 1 ステップごとに命令の状態を記憶す ると若干パフォーマンスが遅くなるため , デフォルトでは [No] になっています。命令 を記憶できるのはトレース実行 ( [ 亘 ] キー ) だけです。新キーでフルスピードで実行 させたり , ステップ実行した場合は , 実行 した命令の記録はとられず , 逆実行もでき ません。トレース実行したときでも , 関数 呼び出しに入り込んだり , 分岐命令などで 命令を記録できない場合があります。 記録された命令は , [V1ew] → [Executio n History] ウインドウで確認できます (Fig. ' こに表示されている内容が逆実行 できる命令です。ソースコード上で + 画キーを押せば , 1 行ずつ逆実行されま すが , このウインドウでは CPU の 1 命令ず つ逆実行できます。 デバッグの実例 こで実際にデノヾッグを体験してみまし よう。 List 1 のプログラムをデバッグしま す。プログラムは次のようにコンパイルし ておきます。 > BCC32 -v sampleb. cpp またⅱ st2 のような test. ⅸ t を用意します。 sampleb プログラムは , 引数として渡さ れたファイル名に含まれる英単語の数と行 数を数えるようにプログラムされています が , 意図的にノヾグが残されています。 test. txt は , 40 個の単語が含まれる 7 行のテキス トです。試しに次のように入力してみまし よう。 > sampleb test. txt 行数は正しく評価されますが , 表示され る単語の数は間違っているはずです。この プログラムをデバッグするために , 次のよ うに入力し , Turbo Debugger でのデノヾッ グを開始します。 > TD32 sampleb test. txt Turbo Debugger を起動すると , sampleb (unsigned char)ptr[i] 第町デ三 s 爪皿 ( 。 fo て (int i = 0 , num = ptr[i]; i 十十 ) 土 n む num を bo 引引 n 聞 , last = false; int count—word(char *ptr) #include <ctype. h> #include く stdio. h> プログラムの例 (sampleb. cpp) if (!last & & alnum) num 十 last = alnum; 今 tu てれ nu 叫 3 ( 4 ) 地 ( 辷 g ch 釭矼 gv ツ三イ if (argc く 2 ) ( puts( "usage: sampleb <filename>"); return FILE *fp = fopen(argv[l] , ”て” puts("can't open%nn return 土 n し numword = 0 , numline = char buf[BUFSIZ]; while (fgets(buf, sizeof buf , (p) ) { return 0 ー fclose(fp); numword, numline); printf("%d WO て d %d num ー ine 十十一 numword 十 = count—word(buf); the application at runtime ・ and tO view the different aspects Of 32 bit Windows application execution TurbO Debugger can be used tO control developers 0 て wide. stand-alone debugger セ 00 ー with C and C 十十 FO て years' Debugger was a favorite テキストファイルの例 (test. txt) のスタートアップコードが実行され , 実行 カーソル ( →記号 ) はソースコードの最初に 実行される行 ( main 関数の先頭 , List1-(1)) に位置します。このプログラムはコンソー ルプログラムなので , 同時にプログラムが 出力に使うコンソール画面も表示されます。 プログラムをいっきに実行させるなら , こでキーを押します。プログラムが 終了すると「 Process terminated 」というダ イアログボックスが表示されます。ューザ 画面を見ると , やはり間違った結果が表示 されているはずです ( 意図しないメッセー ジが表示されるときは , 引数に間違いがな いか確認してください ) 。 いったんプログラムの実行が完了する と , 再たびデバッグを開始するにはプログ ラムをリセットしなければなりません。 れには , [Run] → [program reset] カヨ + 區キーを使います。プログラムのリセッ トは , デバッグの途中で最初からやり直し たい場合にも使えます。なお , プログラム のリセットは多少時間がかかる場合があり ます。 Turbo Debugger が時間のかかる処 理をしている間は , 画面右上に「 W. 用 T 」と いうメッセージが表示され , 完了すると「 R EADY 」に変わります。 今回のプログラムでは , 単語を数えてい るところに問題があるので , 単語を数える 関数を呼び出している List 1- ( 2 ) にプレー クポイントを設定します。この行でキ ーを押すか , この行の左端をマウスでクリ ックしてプレークポイントを設定します。 国」キーを押してプログラムを実行させる と , 実行はプレークポイントで停止します。 こで , [ は司 + [ 豆 ] キーを押してくださ い。これはローカルメニューの [Watch] コ マンドを呼び出すのと同じです。監視式 ( ウォッチ ) の入力が促されるので , 「 buf 」 と入力します。同じようにして「 numword 」 も入力します (Fig. 4 ) 。 buf を見ると , には七つの単語が含まれていることがわか ります。そこで , 廰 ] キーを押して count ー word 関数をステップ実行させ , 結果を確 認することにします。 特別記事 Turbo Debugger 5.5 入門 79
和市 0 Debugger 5 る入門 特別記事 count ー word は与えられたバッフアに含 まれる単語の数を数える関数なので , num word は 0 から 7 に増えるはずです。しかし , 実際にはそうなりません。つまり , count_ word が正常に機能していないということ がわかります。 もう一度 , キーを押して再たびプレ ークポイントまで実行させます。 buf を見 ると , 次の行が読み込まれており , 8 個の 単語があることがわかります。 今度はキーを押して関数のなかに人 るようトレース実行します。 count_word 関数のなかでは , 先ほど監視式に指定した buf や numword はスコープから外れるため 「 ? ? ? ? 」と表示されています。ここで , 単語 の数を表す変数「 num 」と「 i 」を監視式とし て追加します。 繰り返し文のなかを確認するために List 1- ( 3 ) にプレークポイントを設定し , キ ーで何度か実行させてみます。すると , 単 語の数をカウントアップしていくべき変数 num の値が正常に機能していないようすが わかります ( 動作は , コンパイラのバージ ョンによって変わります ) 。 そこで , List 1- ( 3 ) のプレークポイント を解除し , 関数の最後の行 ( List1- ( 4 ) ) に カーソルを移動して亘キーを押します。 監視式を見ると , num の値が単語の数「 8 」 になっていないことがわかります。なお , 実行位置が関数の最後にあるときは , [Data] → [Function return] で戻り値を正確 に把握できます。 つまり , この関数のなかで num が正常に 単語の数をカウントアップしていないとい うことです。プログラムをよく見ると , nu m 変数は関数の先頭で定義されています が , for 文には , for(int i = 0 , num = 0 ; … ) という記述があります。これは , for 文の 初期化部で , i とⅡ um という変数を定義し て , それぞれを 0 で初期化するという文に なります。 f 。 r 文で宣言された変数は for 文 のプロック内のスコープを持っため , for 文の外側と内側で同名の num という変数が 80 C MAGAZINE 2000 9 修正後の count ー wo 「 d 関数 定義されていたのです。 for 文内部のデバッグで , int count—word(char *ptr) bo alnum, last = false; int num; for ( 土 = 0 , num = の pt ては 土十十 ) 変数 num の値 が不定になっていたのは , for 文内の num が最終的に使われないため , 最適化によっ て変数そのものの操作が取り除かれてしま っていたためです。 問題がわかったので , Turbo Debugger を終了させますにのプログラムには , れ以外のバグはありません ) 。見つけたバ グを修正するには , count_word 関数内の 変数の定義を for 文の初期化部から , 関数 の先頭に移します ( List3 ) 。 ・アセンブリレベルのデバッグ 今回のような問題は , count_word 内部 をデバッグする際に [ Ⅵ ew ] → [ CPU ] で表 示される [CPU] ビューによってアセンプ リレベルでコード生成を確認すれば , より 的確に原因を探ることができるでしよう。 こうした高度なデバ Turbo Debugger は , ッグを必要とする場合に , より威力を発揮 します。インプライズの Delphi や C + + Build er にも [CPU] ビューという似たような機能 があります ( このビューのレイアウトは , まぎれもなく Turbo Debugger が元になっ ているといえます ) 。 Turbo Debugger の特徴として , [CPU] ウインドウにアセンプル機能が付いていま す。生成されたコードに問題があって , ア センプリ言語で修正できそうならば , その 場で入力して変更できるのです。ただし , プログラムをリセットすると , 変更した結 果が失われることに注意してください。 これ以外にもデータの変更や実行位置 ( E (P) の変更など , アセンプリレベルで細か く制御する機能が提供されています。 アセンプリレベルでプログラムの動作を 理解することはそれなりの知識を要求され ますが , その見返りとして CPU の動作を完 全に把握できるという利点があります。 [View] メニューには , プログラムの動 作をさまざまな側面から確認できるウイン ドウを表示するためのコマンドがありま す。 [View] → [VariabIes] は変数だけでな く , 関数名の情報も確認できます。 [View] → [Windows messages] は , Win dows メッセージを処理するウインドウブ ロシージャを指定して , そこに送られるメ ッセージを監視できます。 [View] → [Breakpoints] では , 設定した プレークポイントについて , 詳細な条件を 設定できます。プレークポイントで常に停 止するのか , 指定したメモリが変更された り評価した式が成立するときだけ停止する のか , 停止する代わりに式を実行したり , ログを記録させるということもできます。 [Breakpoints] → [Hardware breakpoint] を使うと , 通常のプレークポイントでは仕 掛けられないような条件でプレークポイン トを設定できます。たとえば , プログラム のどこかで特定のメモリアドレスにアクセ スした場合に停止させることができます。 おわりに Delphi や C + + Builder のような開発ツール のデバッグ機能は , 大きな進歩を遂げてい ます。しかし , とくにアセンプリレベルの 高度なデバッグなどにおいて , この Turbo D ebugger はこれらの開発ツールの内蔵デバ ッグ機能にはない利便性を提供してくれま す。 BCC55 をお使いの方には , Turbo Debug ger によって「大量の p ⅱ n ばを組み込む」とい うデバッグ手法から大きな飛躍を果たすこ とができます。それはまた , コンパイル技 術以外のインプライズの技術力を知る機会 にもなるでしよう。 そのほかの機能
られており , + キーで即座にその 込むと , Fig. 2 のようにソースウインドウ が表示されます。コンソールアプリケーシ ウインドウをアクテイプにできます。 なお , 前述したとおり , マウスの右クリ ョンをデバッグする場合は , プログラムを ックを使うと , そのウインドウに固有のメ 読み込んだ時点で自動的にコンソールウィ キャラクタベースで構成されていますが ニュー ( ローカルメニュー ) がポップアップ ンドウが表示されます。 基本的な操作はほかの Windows アプリケ ーションと同じです。キーを押しなが Turbo Debugger がプログラムを読み込 表示されます。ローカルメニューの項目は , ウインドウがアクテイプなときに + むと , スタートアップ部分が自動的に実行 らメインメニューの先頭の文字を押せば , ーキーを押すことでも呼び出せ され , ソースコードのある最初の部分に実 そのメニューがプルダウン表示されます。 行位置を示す力ーソルが移動します。これ 通常のソースレベルデバッグであれば , ます。たとえば , ソースモジュールを表示 する [Module] ウインドウで + 国キー デフォルトで表示される [ModuIe] ウイン は , DeIphi や C + + Builder の内蔵デバッガと は異なる部分なので注意してください。ス ドウと [Watches] ウインドウで十分なこと を押せば , インスペクト ( 監視 ) する変数を タートアップ部分を自動的に実行させない も多いでしよう。しかし , Turbo Debugger 入力できます。また , それぞれのウインド ようにするには , Turbo Debugger を起動 は , これ以外にも多くの情報を表示するウ ウで英数字を入力すると , そのウインドウ するときに -1 オプションを指定します。 [Fi インドウを提供しています。これらは [Vie でもっともよく使われるコマンドが呼び出 le ] → [ Open ] メニューを使うときは [ Execu w] メニューから参照できます。 されて入力できます。たとえば , CPU ウ testartupcode] チェックを外しておきます。 複数のソースモジュールを持っプログラ インドウでは 1 行アセンプリ機能が呼び出 このとき , スタートアップ部分に対応する ムの場合 , [View] → CModule] で複数のフ されます。 ァイルを選択しても , ひとつの CModuIe] ソースコードはないので CPU ウインドウ ・実行方法 が表示されます。 ウインドウの中身が置き換えられるだけだ なお , プログラムを読み込んだときに ということに注意してください。表示中の [Run] メニューを表示させると , さまざ 「 Program has no symbol ね ble 」と表示され , [Module] ウインドウを残したまま , 新し まな実行方法があることがわかります。 [CPU] ウインドウが表示された場合は , デ いモジュールを表示するときは [View] → フルスピードでそのまま実行させるので あれば , キーを押します。このときは , [Another] → [Module] を使います。 バッグ情報がなかったことを示しています。 また , 「 Not enough memory to load symbo 個々のウインドウのサイズを変更すると [Breakpoint] → CToggle] メニュー ( または 亘キー ) で設定したプレークポイントに 1 table 」と表示されたときは , デバッグ情 きは , 右下の二重線の部分をマウスでドラ 報が古くなっている可能性があります。古 遭遇しないかぎり , プログラムは停止しま ッグします。ウインドウを移動するときは せん。新 , 新キーを使うと , プログラ いデバッグ情報が残ったまま , デバッグオ タイトル部分 ( ウインドウの上部 ) をドラッ ムを 1 行ずつ実行できます。新キーでは プションを指定せずにプログラムをコンパ グします。ウインドウを閉じるときは , 左 イルしていないかどうかを確認してくださ 上の [ ・ ] 部分をクリックします。ウインド 関数呼び出しのなかまでトレース実行しま す。 + 亘キー (Execute (o) は , 指定し ウのタイトルバーの右側には「番号」が付け Fig. 4 監視式を追加したところ 操作の基本 Fig. 3 Execution History ウインドウ 3 TD32 こ T032 : s 訓司 Fi 降 : 騨 L 田 . cpp 35 0 f (a 「 gc く 2 ) [ 0 puts("usage; sarvleb く f ilename>"); 0 return 0 : 0 ILE Xfp : fo; 1 ( a 「 gv [ 1 ] , 0 f ()p : : 羅廴 L ) { 0 puts("can't open\n"); 0 retu 「 0 1 ; 降 : sanpleb File: sanpleb.cpp 10 物Ⅳ : にく diö. h > # i 「 cl リく ctype. h> int cot 飛」担 rd ( cl ) a 「ネ鰄「 ) 0 bo 引 a い , : 0 +iile ( t 「 ) [ 孖 (!\ast & & 引 : 引 gn , ・ 004n 變心 rea 。 ー雪 Ct 、丁 On を「 nwo 「 d : 0 , 儀 i : 0 ; 朝「い f [ 望下引 Z 上 0 hile (fgets(b 」 f, sizeof buf, (p)) { 物』 1 「 d + : ca - wo 「 d ( f) : 0 n flli + + ; 78 C MAGAZINE 2000 9
CD-RO e 前 t 5 2000 年 9 月号特別付録 CD - ROM には , 次 のプログラムが収録されています。ご使用 にあたっては , 各プログラムに添付されて いるドキュメントファイル , および付録 CD - ROM のルートディレクトリに収録されてい る index. html をご覧ください。 Microsoft Visual Studio 6.0 Service Pack 4 「 Microsoft VrsuaI Studio 6.0 」は , Wmdo ws アプリケーションの総合開発環境です。 マイクロソフト ( 株 ) のご協力により , この Visual Studio 6.0 に含まれる既知の問題に 対する修正モジュール「 se Ⅳ ice Pack 4 ( 以 下 SP4 ) 」を WS6SP4 ディレクトリに収録し ました。 SP4 には , SPI ~ SP3 のすべての修正内容 が含まれています。さらに今回の修正では , 以下のⅥ sual Studio ファミリ製品のすべて のエディションについてのアップデートが Microsoft Visual J + + 6.0 Microsoft VisuallnterDev 6.0 Microsoft VisuaI C ℃ + + 6.0 Microsoft Visual Basic 6.0 Microsoft VisuaI Studio 6.0 含まれています。 188 C MAGAZINE 2000 9 コマンドなどをご利用ください。また , c するには , Wmdows に含まれる Extract. exe て圧縮されています。このファイルを抽出 ください。再配布モジュールは CAB 形式に 録されている新しいファイルを再配布して ップデートされている場合 , 必ず SP4 に収 配布可能なランタイムファイルが SP4 でア たユーザアプリケーションが必要とする再 VisuaI Studio 6.0 ファミリ製品で作成され ・再配布モジュールの使用方法 Microsoft VisuaI SourceSafe 6.0 AB 形式からのファイル抽出方法について はマイクロソフト ( 株 ) の Web サイトにサポ ート技術情報として公開されているのでご 覧ください。 J052951 Ⅳ S60 ] SP4 : 再配布ファイルを C AB から抽出する方法 ・修正事項詳細 現在までに報告され , 日本語環境で調査 が進められている障害についての詳細は , SP4 の ReadMe. htm をご確認ください。また 製品に関する最新の情報がⅥ sual studio の Web サイトに記載されています。 SP に関す る最新情報は , 以下の Web サイトにありま す。あわせてご覧ください。 http://www.asia.microsoft.com/japan/ developer/vstudio/techinfo/sp/ インストール方法や詳細については , 料ー S6SP4 ディレクトリにある ReadMe. htm を ご覧ください。 TurbO Debugger 5.5 日本語版 「 Turbo Debugger 5.5 日本語版」は , 強力 なデバッグ専用ツールです。 C / C + + やアセンプリ式の評価 , 例外処理 , プログラムの実行制御 , レジスタ処理など の機能によって実行時のプログラム出力 , ソースコード , データ構造 , 変数の値など さまざまな側面を表示させることができま す。インプライズ ( 株 ) のご協力により , Yin priseYBCC55 ディレクトリに収録しました。 また , TurboDebugger 5.5 日本語版は「あ るがまま」で提供されます。インプライズ ( 株 ) はいっさいの保証・サポートを提供し ません。また , このツールに関するバグレ ポートの受け付けや将来の修正なども予定 されていません。 あわせて , Turbo Debugger 5.5 日本語版 を利用するには , lnprise Japan OnIine で 「使用者登録」が必要です。 インストール方法や詳細については , }in prise ディレクトリにある index. html ファイ ルをプラウザなどでご覧ください。 「 Ruby 1.4.5 」は , 純国産のオプジェクト 指向スクリプト言語です。 Windows(DOS プロンプト ) や Lin をはじめとした多くの プラットホームに対応しています。まつも とゆきひろ氏のご協力により , 最新版の Ru byl. 4.5 を \ Ruby ディレクトリに収録しまし インストール方法や詳細については , ru by-l. 4.5. tar. gz を展開後に生成される READ ME ファイルをご覧ください。また , 本誌 連載「伝授 ! 極めよ Ruby 道」および Ruby の Webz< ージ (http://www.rubylang.org/ja / ) もあわせてご覧ください。 BIuette 1. OJ 評価版 「 Bluette 1. OJ 」は , Java 言語を採用した R AD ツールです。 RAD の開発効率に加え , 軽 快な動作が特徴です。 ( 株 ) サンのご協力に より , Ysan ディレクトリに評価版を収録し ました。 インストール方法や詳細については , }s an ディレクトリにある readme. ⅸ t をご覧く ださい。あわせて , 159 ページからの本誌 最新開発レポート「 Bluette 」もご覧くださ い。 WILLWARE Components 評価版 「 WILLWARE Components 」は , TCP/IP による通信機能を中心に , ネットワークを 実用的に活用する機能をアプリケーション に提供するコンポーネント集です。 ( 株 ) ウイルのご協力により , 評価版を \ wi Ⅱディ レクトリに収録しました。 インストール方法や詳細については , Ywi Ⅱディレクトリにある readme. txt または inst a Ⅱ . ⅸ t をご覧ください。あわせて , 本誌 MO NTHLY HEADLINE の紹介記事もご覧くだ Ruby 1.4.5
MAGAZINE 2000 年 9 月 1 日発行 ( 毎月 1 回 1 日発行 ) 第 12 巻第 9 号通巻 132 号 1990 年 2 月 2 日弟 3 種郵便物認可 プログラミング技術情報誌・ C マガジン PubIishing SEP. 2000 定価 1 , 200yen 0 0 Turbo Debugger 5.5 , C + + BuiIder 5 Ente 「 p ⅱ seT ⅱ飜収録 / 特集 2 & 短期連載モニタ募集 【特集 1 】 【短期連載】 WonderWitch Programming Tech Lab. 30 動きの刃しゴリスム レポート・・・・・・ >Bo nd C + + BuiIder ビジュアル開発のアーキテクチャ >Turb0 Debugger 5.5 入門軽快な Java 統合開発環境「引 uette 」 【特集 2 】携帯端末を使いこなす PDA プログラミンクのコツ 【付録 CD-ROM 】・ Visual Studio 6.0 SP4 ・ BorIand C + + Builder5 EnterpriseTriaI ・ Tu 市 0 Debugger5.5 ・ BorIand C + + CompiIer5.5&SuppIement Pack ・ BIuetteTriaI 【新連載】 Linux ProgrammingTips 【特別小冊子】 C + + による真のビジュアル開発 ~ B and C + + B ⅶ de 「のご紹介
BOC PowerT001s シリーズ トライアル版 「 BOC PowerTools シリーズ」は , さまざ まな目的別のコンポーネントを提供し , 手 軽に機能と開発効率の向上を実現するシリ ーズです。文化オリエント ( 株 ) のご協力に より , トライアル版を oc ディレクトリに 収録しました。 インストール方法や詳細については , 新 oc ディレクトリにある readme. ⅸ t をご覧く ださい。あわせて , 本誌 MONTHLYHEAD LINE の紹介記事もご覧ください。 Java 2 SDK Standard Edition Ver. 1.3.0 Windows 版 「 Java2 SDK Standard Edition 」は , Java の アプリケーション開発の基礎となるキット です。日本サン・マイクロシステムズ ( 株 ) のご協力により , 最新版のバージョン 1.3.0 を YJDK ディレクトリに収録しました。ま た , あわせて日本語ドキュメントも収録し ました。 今回ご提供するモジュールは , 7 月 20 日 現在日本サン・マイクロシステムズ ( 株 ) の Web サイトより提供されているものと同じ です。ご利用にあたっては , Web からのダ ウンロードと同様 , ライセンス条項に同意 する必要があります。付録 CD-ROM のルー トディレクトリにある index. html , もしく は }JDK ディレクトリにある license. txt をご 覧いただき , 同意した場合にのみご利用く ださい。 ・特別付録 CD ー ROM のディレクトリ構成 CD - ROM 収録プログラムの紹介 ( HTML ファイル ) index. html VS6S P4 Microsoft VisuaI Studio 6.0 Service Pack 4 rise CB5TRlAL ・・ ・・ Borland C + + BuiIder 5 Enterprise トライアル版 TurbO Debugger 5.5 日本語版 BCC55 BorIand C + + CompiIer 5.5 & BorIand C + + CompiIer 5.5 SuppIement Pack ・・ BIuette 1. OJ 評価版 san ・ BOC PowerTooIs シリーズトライアル版 boc 、一 ~ ~ ・・ ~ ・・ ~ ・ , ・・ W に LWARE Components 評価版 will ・ Java2 SDK Standard Edition Ver. 1.3.0 Windows 版 JDK Open Motif 2.1 .30 Open MOtif ・ LSI C -86 Ver 3.30C 試食版 LS ℃ T00 ・ lzh/zip 解凍ツール "Lhasa ” Lhasa BorIand C + + CompiIer 5.5 インストール支援ツール Ver. 1 , 3 SETBCC CMAGA 特集 1 「 3D 動きのアルゴリズム」 TO ku 1 特集 2 「携帯端末を使いこなす PDA プログラミングのコツ」 丁 oku2 ・ , ・特別記事「 Bo and C + + BuiIder ビジュアル開発環境の Bcb ・ アーキテクチャ」 特別記事「 Tu 「 bo Debugger 5.5 入門」 プログラミング相談室 Borland C + + Compiler 5.5 Q&A 集 Qa_bcc C 言語プログラミング学習塾 Cpp ・・、、・・・・・ ~ ”・どな ~ 0 てククのパワーアップ C + + Pe 日プログラミングの楽しみ 翻訳記事「 Standard C / C + + 」 Stdcpp ・・・新連載「伝授い極めよ Ruby 道」 Ruby ・ Java プログラミングリファレンス Java ref ・・画像処理を極める一一アルゴリズムラボ ・新連載「 Linux prog 「 amming Tips 」 Linux Wi nTips Windows Programming Tips Javatips ・ ・・ Java Programming Tips ・・・ VCL 解体新書 Vcl ・・・ローテク講座 L tech ・・ ・、・恥ずかしながらドジりました DOji ・ ・・・学問のススメ千言万語 Lang ・・フィンローダのあつばれご意見番 Appare ・・・ C マガ電脳クラブ Puzzle ・・ ・ lhasa, 0 竹村嘉人 ・ Microsoft VisuaI StudiO 6.0 Service Pack 4 、⑥ 2000 Microsoft CO 甲 0 「 ation. ・ TurbO Debugger 5.5 日本語版 , Borland C + + Builder 5 Enterprise トライアル版 , BorIand C + + BorIand C + + CompiIer 5.5 8 インストール支援ツール CompiIer 5.5 & Supplement Pack, ( 02000 INPRISE Corporation. ・ Ruby 1.4.5. 01993-2000 Yukihiro Matsumoto. ・ BIuette 1. OJ 評価版 , 02000 SAN c. 「 Borland C + + Compiler 5.5 インストール ・ WILLWARE Components 評価版 , 01997-2000 WILL CORPORATION. ・ BOC PowerTools シリーズトライアル版 , ( 02000 Bunka Orient Co 「 p. 支援ツール」は , Borland C + + CompiIer 5.5 ・ Java2 SDK Standard Edition Ver. 1.3.0 Windows 版 , ◎ 2000 $un Microsystems, 抦 c. をインストールする際に必要な環境をウィ ・ LSI C -86 Ve 「 . 3.30C 試食版 , ( 01993 LSIJAPAN CO. ,LTD. ザード形式で設定するツールです。 このプログラムは Borland C + + Builder 4 変を自由に行うことのできるフリーウェア インストール方法や詳細に関しては , }to ProfessionaI で作成しました。また , このプ olsysetbcc ディレクトリにある readme. txt を として公開します。ご意見・ご要望を寄せ ログラム ( ソースコードも含む ) は配布や改 られたみなさまに感謝いたします。 ご覧ください。 189 CD-ROM Contents
なかったお前が悪いのだ。こんなもの , バ グではない ! 」というバグ否認の回答を出 しませんでした。なぜか ? 私はこの件に JDK 1.2 で java. lang パッケージに導入された 妙なクラス , ThreadLocal が関係している のではないかと邪推いたす次第であります。 まず , 浅く簡単に今回の " バグ認定 " の根 拠を推定してみましよう。第一に考えられ るのは , vola ⅱ le 修飾子を使うべき場合に関 する正しい精密な知識が Java 言語使用者が もつ基本知識の中には一般的にないだろう ということです。私が提出したバグレポー トに参考資料として添付した C のプログラ ムは , 構造的には Emp Ⅳ .java とほぼ同じで すが変数に volatile 修飾子を付けなくてもプ ログラムの動作は正常です。そもそも C 言 語の場合も , プログラマが volatile 修飾子の " 正しい使い方 " を理解しマスターするのは 難しいといえます。この私自身も , あまり setvisible( true eSwitch = false; button = new JButton( "ln the beginning God" button. addActionLi stener ( new Experience ( ) button. setBackground( C 引 0 て . ye Ⅱ ow getContentPane( ) . add( button, BorderLayout.CENTER public static VOid main( String args[ ] void vnop( ) { / / non-static nop static VOid snop( ) { / / static nop show( int //continue; / / doesn't work / / { } / / empty block doesn't work / / empty statement doesn't work whi 厄 ( ! eSwitch ) Empty et = new Empty( / / a nonsensical statement doesn't work / / 十十 理解していませんしマスターしてもいませ ん。ただ , かねてからオプティマイジング コンパイラの問題点 , というより無能を補 うための不格好なクラッジではないかとい う印象を持っています。 もうーっの考えられる根拠は , ループ本 文のタイプ ~ 種類によって振る舞いが一定 でなく , しかも振る舞いが一定でないこと に対して合理的な理由が思い当たらないこ とです。この Sun に提出した Empty. java で は , 「何もしないループ = 待機ループ」の本 文として , Fig. 5 のものを試しています。 X 印はだめだったもの , 〇印は正常に使え たものです。 Fig. 5 の結果をどう眺めても , 納得のできる状況は何も頭に浮かんできま せん。 Thread. sleep() は static メソッドですから , static メソッドはだめだという命題も成り立 ちません。仮に static メソッドがだめなら , その理由も思い浮かびません。しかも以前 見たように , javac がコンパイルした結果で あるところの JVM'S イトコード自体は , オ プティマイジングをやっていませんから , そのぶん " 犯人の雲隠れ " に貢献してしまっ ています。 ・・ちゅうことは、 javac の " ではなくて JVM 本体の " 変数アクセスに関するオプテ イマイジングの実装に論理的一貫性がなく 無茶苦茶である。と今回 Sun は認めたのか もしれません。私の意見は , 「 Java ほどの 高級言語ともなると , 言語側で勝手なオプ ティマイジングをやるのではなく , それは プログラマ側の完全な制御事項にせよ ! 」 であります。言い換えると , 「 volatile のよ うな低レベルな ( & 分かりづらい & 使いづ らい ) 修飾子は廃止せよ ! 」であります。 この件に関する理解を助けるため , また は混乱を助長するために Fig. 6 に JI から / / another nonsens ica ー statement a 0 doesn ' t work //snop( / / static nop method doesn't work (why?? ) / / e しⅧ叩 ( / / non-static nop method mES work! //{try{Thread. sIeep(10) ;)catch( InterruptedException e) {)) et. button. C引0て . pink et. button. setText( "created the heaven and the earth. ” et. button. setEnabled( true class Experience implements ActionListener public void actionperformed( ActionEvent e ) ( / / mES or JButton button = (JButton) (). getSource( ) button. setEnabled( false Empty. eswitch = true; / * * * for your reference * * * * * / / * empty. c test the C empty statement * / / * Apr. 2000 hiwa * / / * Compile using Turbo/Borland C/C 十十 fo て lntel 80X86 * / #include く stdio. h> #include <dos . h> #def ine CopyKeyI ntNum 5 int eSwitch ー void interrupt loopEnd( ) eSwitch = 1 ー main( ) void interrupt ( *oldCopyKeyHandler) ( eSwitch = puts( "press [COPY] key tO exit on an old PC ー 98. puts( "press [Sys Rql key 社 0 て a while* in a Win-PC's X)S-Prompt." puts( [Sys RqJ is [Shiftl 十 [Print screenl . ” puts( empty statement is normal, thank you. setvect( CopyKeyIntNum, oldCopyKeyHandler whil e ( eSwitch = setvect( CopyKeyIntNum, loopEnd ); oIdCopyKeyHandIer = getvect( CopyKeyIntNum C 言語フォーラム 155
ONTH HEADLINE 米 Sun/StarOffice をオープンソース化 米 Sun が無償で配布しているワープロ , 表計算 , 電子メール , スケジューラ , プレゼンテーションソフトウェアなどを統合し たアプリケーションスイート「 StarOffice 」を 10 月 13 日に GPL の もと , オープンソース化すると発表。また , これらを扱うコミ ュニティのために OpenOffice. 0「g Foundation が独立組織とし て設立された。 ・ http://www.sun.com/developers/openoffice/ 文化庁メディア芸術祭で作品を募集中 文化庁が行っている「第 4 回文化庁メディア芸術祭」では , ゲ ームや Web など動きのある作品を募集する「デジタルアート / イ ンタラクティブ」をはじめ , 4 部門でプロ / アマチュアを問わず 広く作品を募集している。募集期間は 8 月 1 日 ~ 10 月 31 日まで。 入賞した作品は 2001 年 3 月 12 日に東京都写真美術館で贈呈式が 行われ , 3 月 13 日 ~ 18 日に同館で作品展などが行われる。詳し くは下記の Web サイトを参照のこと。 ・ http:″www.cgarts.or.jp/festival/ 米レッドハット / 米アルテラの組み込み開発環境に対応 した GNUPro ツールを発表 6 月 29 日に米レッドハットがプログラマブル論理テパイス ( PLD) の主要メーカーである米アルテラと開発ツールに関する ライセンスに合意。米アルテラのプロセッサ製品「 Exca ⅱ bar 」 の開発に GNUPro の各種開発環境が利用可能になるもよう。 ・ http://www.redhat.com/ ターボリナックスジャパン ( 株 ) / 第 1 回ターボリナックスソフトウェアコンテスト 「 PENGUINS@Work! 」を開催 Linux の大手ディストリビュータのひとつであるターポリナ ックスジャパン ( 株 ) は , Linux の普及と Linux 業界全体の活性 化を目的とし、さまざまな Linux 向けソフトウェアを募集する 「第 1 回ターポリナックスソフトウェアコンテスト「 PENGUINS @Wo 「 k ! 」」を開催する。このコンテストには「個人」 , 「企業」 , 「グループ」 , 「年齢」 , 「国籍」を問わず , 誰でも参加できる。応 募する作品は同社の TurboLinux 製品で動作するソフトウェア であれば , オープンソースかどうか , 発表 / 未発表を問わない ( ただし著作権など各権利を侵害するものは除く ) 。審査は団体 / 個人の部門に分けて行われ , それぞれで最優秀賞を授賞した ソフトウェアの作者には , 米ニューヨークへの旅行がペアでプ レゼントされる。また , ソフトウェアは Tu rbOLi n ux 製品にバ ンドルされ , ターポリナックスジャパン ( 株 ) が各国語対応を 含めて開発を助け , そのためのメーリングリストを開設するな ど , 普及プロモーションが行われる。ほかにもさまざまな副賞 が予定されており , これら授賞した作品の一部は , 協賛してい る各誌に掲載される。 参加申し込みには , 同社の web サイトより「エントリ」を行 い , 「エントリ番号」を取得することが必要となる。 8 月 31 日ま での締め切りまでに応募した参加者には , もれなく特製 T シャ ツがプレゼントされる。工ントリ番号を取得後 , 1 0 月 31 日ま でに郵送にて応募書類やソフトウェアの概要 , 作品自体を収録 した各種メティア ( FD , MO, CD - R のいずれか ) を事務局宛に 送付する。審査は , 実用性や Li n ux という特性をどれだけ利用 しているかなど , 各種項目ごとにポイントが加えられる。審査 発表は 1 2 月 25 日を予定している。応募規定など詳しくは下記 の Web サイトを参照のこと。 ・ URL http://www.turbolinux.co ・ jp/ Topic 176 C MAGAZINE 2000 9 Prod ucts GPL 準拠の Pasca13 ンバイラが公開 Turbo Pascal 7.0 / Delphi で使われている言語仕様をサポート し , GPL に準拠したフリーソフトの 32 ビット Pascal コンパイ ラ「 Free PascaIJ の Ver 1 .00 が 7 月に公開。 Linux, DOS, AmigaOS, OS / 2 , Win32 の各環境で利用でき , インテルの i386 以上 , モトローラの 680X0 シリーズの各プロセッサに対応 している。下記の Web サイトより入手可能。 ・ http://www.freepascal.org/ 日本電子工業振興協会 / 「 XML フォーマットのイエローベージ」を公開 日本電子工業振興協会 ( J 曰 DA ) は , XML に関する情報の登録 と蓄積による共有化を行うことで XML と中小企業向けインタ ーネットビジネス普及のための情報を提供する Web サイト「 X ML フォーマットのイエローベージ」を公開。 XML の最新情報な ども得られ , XML 関連のポータルサイトを目指すという。 ・ http://jnetwww.jeida.or.jp/japanese.com/ittee/SOL/XML/ サン・マイクロシステムズ ( 株 ) / Forte DeveIoper 6 日本語版を発表 サン・マイクロシステムズ ( 株 ) は So ぬ「 is 2.6 , 7 , 8 で利用で きる統合開発環境「 Fo 「 te DeveIoper 6 日本語版」を発表。これ は現行の Sun WorkShop より名称が変更されたもの。それぞれ C, C + + , Fo 市 an の各言語が用意されている。 64 ビットアプリ ケーションを作成することができ , 最新の C + + と OpenMP がサ ポートされている。 Forte TeamWare というチーム開発管理ツ ールもある。 7 月 22 日現在のところ , 下記の Web/X ージより 30 日間限定ライセンスの評価版が入手できる。 ・ http://www.sun.co.jp/forte/ ( 株 ) FFC / キー操作を制御する FInfoBarrier 」を発売 ( 株 )FFC は , 同社の GKitOCX シリーズの関連製品として , Wi ndows アプリケーションのキー操作やメニュー操作を抑止 するツール日 nfoBarrie 「」を発売。各種メニューの制限以外にも タスク切り替え , デスクトップアイコンの名称変更などに制限 を行うことも可能。また , professional 版には , Java アプレッ トや VBScript などから制御できるプログラムインタフェイスが 付属する。このツールを使うことで , 展示用などプログラムで ユーザに一部の機能を操作されたくないときやさまざまな機能 の制限に使うことができる。 2000 年 9 月より出荷開始。 Standa rd 版 9 , 800 円 , P 「 ofession 版 19 , 800 円。 ・ http://www.ffc. CO. jp/ 住商工レクトロニクス ( 株 ) / 「 D 耐 pac 灯を発売 住商工レクトロニクス ( 株 ) は「 Diffpack 」を発売する。これは 偏微分方程式 ( PDE ) で記述した現象のシミュレータなどを開 発できる C + + べースのオブジェクト指向開発環境。 Fortran な どで記述されたルーチンをリンクすることもできる。 Windows や Linux をはじめとする各種 UN Ⅸ環境に対応。価格は 大学などの教育機関が 2 8 0 , 0 0 0 円 , 国公立の研究機関が 930 , 000 円 , 一般企業が 1 , 990 , 000 円。 ・ http://www2.sse.co.jp/q/diffpack/index.html