(57)【要約】【課題】デバッグ装置にミスアライン検出機能を付加することなく、実行時ミスアラインを検出可能にする。【解決手段】言語処理装置は、プログラムのソースファイルを参照した際に、プログラム中に、２ｂｙｔｅ以上のデータへのポインタ型の変数がある場合、ミスアラインを検出するためのミスアラインチェックライブラリを呼び出す処理を自動的に追加し、オブジェクト・ファイルを生成する。デバッグ装置は、オブジェクト・ファイルに基づいて命令実行し、ミスアラインチェックライブラリ内のエラールーチン処理に到達すれば、ブレークが発生するため、ミスアラインを検出する。【選択図】図３
2010117808.tif 000002
【特許請求の範囲】
【請求項１】
プログラムのソースファイルを参照し、プログラム中に、２ｂｙｔｅ以上のデータへのポインタ型の変数がある場合、ミスアラインを検出するためのミスアラインチェックライブラリを呼び出す処理を自動的に追加し、オブジェクト・ファイルを生成する言語処理装置と、
前記オブジェクト・ファイルに基づいて命令実行し、前記ミスアラインチェックライブラリ内のエラールーチン処理に到達すれば、ブレークを発生し、ミスアラインを検出するデバッグ装置と
を含む
ミスアライン検出システム。
【請求項２】
請求項１に記載のミスアライン検出システムであって、
前記言語処理装置は、
前記ソースファイルの構文を解析する構文解析部と、
前記ソースファイルの構文に基づいて、シンボルコードを解析するシンボル解析部と、
前記ソースファイルに対し、２ｂｙｔｅ以上のデータへのポインタ型の変数がある箇所を検出するミスアライン検出部と、
前記検出された箇所に前記ミスアラインチェックライブラリを挿入するミスアラインチェックラブラリ挿入部と、
前記ミスアラインチェックライブラリが挿入されたソースファイルに基づいて、コード生成を行い、前記オブジェクト・ファイルを生成するコード生成部と
を具備する
ミスアライン検出システム。
【請求項３】
請求項２に記載のミスアライン検出システムであって、
前記ミスアライン検出部は、
関数の開始にある２ｂｙｔｅ以上のポインタ型の引数を検出する関数の開始検出部と、
関数の戻り値にある２ｂｙｔｅ以上のポインタ型の戻り値を検出する関数の戻り値検出部と、
２ｂｙｔｅ以上のポインタ型の変数の初期化を検出する変数初期化検出部と、
２ｂｙｔｅ以上のポインタ型の変数への代入を検出する変数代入検出部と
を具備する
ミスアライン検出システム。
【請求項４】
請求項１乃至３のいずれか一項に記載のミスアライン検出システムであって、
前記デバッグ装置は、前記オブジェクト・ファイルを参照し、前記ミスアラインチェックライブラリのエラールーチンにブレークポイントを設定する
ミスアライン検出システム。
【請求項５】
請求項１乃至４のいずれか一項に記載のミスアライン検出システムで使用される言語処理装置。
【請求項６】
言語処理装置側で、プログラムのソースファイルを参照し、プログラム中に、２ｂｙｔｅ以上のデータへのポインタ型の変数がある場合、ミスアラインを検出するためのミスアラインチェックライブラリを呼び出す処理を自動的に追加し、オブジェクト・ファイルを生成するステップと、
デバッグ装置側で、前記オブジェクト・ファイルに基づいて命令実行し、前記ミスアラインチェックライブラリ内のエラールーチン処理に到達すれば、ブレークを発生し、ミスアラインを検出するステップと
を含む
ミスアライン検出方法。
【請求項７】
請求項６に記載のミスアライン検出方法であって、
前記言語処理装置側で、
前記ソースファイルの構文を解析するステップと、
前記ソースファイルの構文に基づいて、シンボルコードを解析するステップと、
前記ソースファイルに対し、２ｂｙｔｅ以上のデータへのポインタ型の変数がある箇所を検出するステップと、
前記検出された箇所に前記ミスアラインチェックライブラリを挿入するステップと、
前記ミスアラインチェックライブラリが挿入されたソースファイルに基づいて、コード生成を行い、前記オブジェクト・ファイルを生成するステップと
を更に含む
ミスアライン検出方法。
【請求項８】
請求項７に記載のミスアライン検出方法であって、
前記２ｂｙｔｅ以上のデータへのポインタ型の変数がある箇所を検出する際に、
関数の開始にある２ｂｙｔｅ以上のポインタ型の引数を検出するステップと、
関数の戻り値にある２ｂｙｔｅ以上のポインタ型の戻り値を検出するステップと、
２ｂｙｔｅ以上のポインタ型の変数の初期化を検出するステップと、
２ｂｙｔｅ以上のポインタ型の変数への代入を検出するステップと
を更に含む
ミスアライン検出方法。
【請求項９】
請求項６乃至８のいずれか一項に記載のミスアライン検出方法であって、
前記デバッグ装置側で、前記オブジェクト・ファイルを参照し、前記ミスアラインチェックライブラリのエラールーチンにブレークポイントを設定するステップ
を更に含む
ミスアライン検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ミスアライン検出システムに関し、特に、言語処理における実行時ミスアラインを検出するミスアライン検出システムに関する。
【背景技術】
【０００２】
プログラムでは、そのアーキテクチャの仕様から、ワード境界等でデータを配置（アラインメント：ａｌｉｇｎｍｅｎｔ）する必要がある場合がある。変数宣言した場合は、言語処理装置がアラインメントを考慮した処理を行うので問題は無いが、ポインタを使って動的にメモリを確保した場合、データがワード境界をまたいで配置（ミスアラインメント：ｍｉｓａｌｉｇｎｍｅｎｔ）される可能性がある。
【０００３】
ミスアライン検出に関連する技術として、特開２００６−１５５３８６号公報（特許文献１）にコンパイル装置及びデバッグ装置が開示されている。この関連技術では、高級言語で記述されたソースプログラムを機械語命令列に翻訳するコンパイル装置が、機械語命令列の最適化のためのコンパイル装置に対する指示を、ソースプログラム中より検出し、指示に基づいて、ソースプログラムを最適化された機械語命令列に翻訳する。また、コンパイル装置は、検出された指示に基づいて、当該指示が不正か否かを判断可能な機械語命令列上の位置を検出し、指示のソースプログラム中での記述位置と、位置と、指示が不正か否かを判断するために必要な情報とを含むデバッグ情報を生成する。
【０００４】
なお、指示は、関数におけるポインタ型の仮引数の指すメモリ領域のアラインメント値を指定するプラグマ指令である。コンパイル装置は、プラグマ指令で修飾された関数の先頭の命令の位置を検出する。また、指示が不正か否かを判断するために必要な情報は、プラグマ指令で指定されたアラインメント値でも良い。
【０００５】
例えば、図１に示すように、プログラム中にプラグマ指令「＃ｐｒａｇｍａ  ｐｏｉｎｔｉｎｇ＿ａｌｉｇｎ  ＝  ４  ａ」と記述することで、ポインタ型仮引数ａの指すメモリ領域が、関数が呼び出された時点で４ｂｙｔｅアラインメントされていることを、コンパイル装置に知らせることができる。
【０００６】
このとき、プラグマ指令のアラインメント情報が誤っており、ポインタ型仮引数ａの指すメモリ領域が、関数が呼び出された時点で４ｂｙｔｅアラインメントされていない場合は、実行結果が不正なものとなる。この関連技術のコンパイラ装置では、上記プラグマ指令のエラーチェックを行うために、関数の先頭での仮引数ａ及びｂのアラインメントの情報を生成し、レジスタに格納する。
【０００７】
また、この関連技術のデバッグ装置によるエラーチェックは、図２に示すように、レジスタ値を取得し、４の倍数であるか否かを判断する。判断結果が偽の場合には、エラー表示を行う。
【０００８】
以上のような処理を行うことにより、この関連技術では、誤ったポインタ型の仮引数の指すメモリ領域のアラインメントを指定するプラグマ指令を検出することができる。
【０００９】
しかし、この関連技術では、ポインタを使って動的にメモリを獲得した場合のミスアラインの検出には、ミスアラインを検出する機能をデバッグ装置に付け加えなければならない。
【００１０】
【特許文献１】特開２００６−１５５３８６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
本発明の目的は、デバッグ装置にミスアライン検出機能を付加することなく、実行時ミスアラインを検出するためのミスアライン検出システム、言語処理装置、及びミスアライン検出方法を提供することである。
【課題を解決するための手段】
【００１２】
本発明のミスアライン検出システムは、プログラムのソースファイルを参照し、プログラム中に、２ｂｙｔｅ以上のデータへのポインタ型の変数がある場合、ミスアラインを検出するためのミスアラインチェックライブラリを呼び出す処理を自動的に追加し、オブジェクト・ファイルを生成する言語処理装置と、オブジェクト・ファイルに基づいて命令実行し、ミスアラインチェックライブラリ内のエラールーチン処理に到達すれば、ブレークを発生し、ミスアラインを検出するデバッグ装置とを含む。
【００１３】
本発明の言語処理装置は、ソースファイルの構文を解析する構文解析部と、ソースファイルの構文に基づいて、シンボルコードを解析するシンボル解析部と、ソースファイルに対し、２ｂｙｔｅ以上のデータへのポインタ型の変数がある箇所を検出するミスアライン検出部と、検出された箇所にミスアラインチェックライブラリを挿入するミスアラインチェックラブラリ挿入部と、ミスアラインチェックライブラリが挿入されたソースファイルに基づいて、コード生成を行い、オブジェクト・ファイルを生成するコード生成部とを具備する。
【００１４】
本発明のミスアライン検出方法は、言語処理装置側で、プログラムのソースファイルを参照し、プログラム中に、２ｂｙｔｅ以上のデータへのポインタ型の変数がある場合、ミスアラインを検出するためのミスアラインチェックライブラリを呼び出す処理を自動的に追加し、オブジェクト・ファイルを生成するステップと、デバッグ装置側で、オブジェクト・ファイルに基づいて命令実行し、ミスアラインチェックライブラリ内のエラールーチン処理に到達すれば、ブレークを発生し、ミスアラインを検出するステップとを含む。
【発明の効果】
【００１５】
デバッグ装置にミスアライン検出機能が無くても、ミスアラインを検出でき、ミスアラインチェック漏れによるプログラムの品質低下を防ぐことができる。
【発明を実施するための最良の形態】
【００１６】
以下に、本発明の実施形態について添付図面を参照して説明する。
図３に示すように、本発明におけるミスアライン検出システムは、言語処理装置１０と、デバッグ装置２０を含む。
【００１７】
言語処理装置１０は、構文解析部１１と、シンボル解析部１２と、ミスアライン検出部１３と、ミスアラインチェックライブラリ挿入部１４と、コード生成部１５を備える。
【００１８】
構文解析部１１は、読み込んだソースファイル１に記述されたソースプログラムの構文を解析する。ソースファイル１には、ソースプログラムのソースコードが記述されている。シンボル解析部１２は、解析されたソースプログラムの構文に基づいて、シンボルコードを解析する。ミスアライン検出部１３は、解析されたソースプログラムの構文、及び解析されたシンボルコードに基づいて、ミスアラインが発生しうる箇所を検出する。ミスアラインチェックライブラリ挿入部１４は、検出された箇所にミスアラインチェックライブラリ３を挿入する。コード生成部１５は、ミスアラインチェックライブラリ３が挿入されたソースプログラムに基づいて、コード生成を行い、オブジェクト・ファイル２を出力する。
【００１９】
ミスアライン検出部１３は、関数の開始検出部１３１と、関数の戻り値検出部１３２と、変数初期化検出部１３３と、変数代入検出部１３４を備える。
【００２０】
関数の開始検出部１３１は、関数の開始にある２ｂｙｔｅ以上のポインタ型の引数を検出する。関数の戻り値検出部１３２は、関数の戻り値にある２ｂｙｔｅ以上のポインタ型の戻り値を検出する。変数初期化検出部１３３は、２ｂｙｔｅ以上のポインタ型の変数の初期化を検出する。変数代入検出部１３４は、２ｂｙｔｅ以上のポインタ型の変数への代入を検出する。
【００２１】
言語処理装置１０で生成されたオブジェクト・ファイル２は、ミスアラインチェックライブラリ３内のエラールーチンにブレークポイントを設定しておくことで、ミスアライン箇所を発見することができる。ミスアラインチェックライブラリ３は、ミスアラインチェック用のライブラリである。ここでは、オブジェクト・ファイル２は、ミスアラインチェックライブラリ３を有する。
【００２２】
図４に示すように、言語処理装置１０は、ソースファイル１中のミスアラインチェックを行うために、関数の開始にある２ｂｙｔｅ以上のポインタ型の引数の箇所、関数の戻り値にある２ｂｙｔｅ以上のポインタ型の戻り値の箇所、２ｂｙｔｅ以上のポインタ型の変数を初期化している箇所、及び、２ｂｙｔｅ以上のポインタ型の変数を代入している箇所に、ミスアラインチェックライブラリ３（ｃｈｅｃｋ＿ｍｉｓａｌｉｇｎ（））を挿入してオブジェクト・ファイル２を生成する。
【００２３】
また、図５に示すように、デバッグ装置２０は、言語処理装置１０で生成されたオブジェクト・ファイル２を取得し、オブジェクト・ファイル２に対するミスアラインチェックの実行時に、ミスアラインチェックライブラリ３（ｃｈｅｃｋ＿ｍｉｓａｌｉｇｎ（））内のエラールーチン（ｅｒｒｏｒ（））に到達すれば、ミスアラインを検出したと判断する。
【００２４】
ここでは、言語処理装置１０及びデバッグ装置２０の例として、ＰＣ（パソコン）、シンクライアント端末／サーバ、ワークステーション、メインフレーム、スーパーコンピュータ等のコンピュータを想定している。なお、言語処理装置１０及びデバッグ装置２０は、端末やサーバに限らず、中継機器や周辺機器でも良い。また、言語処理装置１０及びデバッグ装置２０は、コンピュータに搭載される拡張ボードやソフトウェアでも良い。更に、言語処理装置１０及びデバッグ装置２０は、コンピュータに搭載された仮想マシン（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ（ＶＭ））環境でも良い。但し、実際には、これらの例に限定されない。
【００２５】
また、構文解析部１１、シンボル解析部１２、ミスアライン検出部１３、ミスアラインチェックライブラリ挿入部１４、及びコード生成部１５の例として、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）やマイクロプロセッサ（ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ）等の処理装置、又は同様の機能を有する半導体集積回路（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ（ＩＣ））等が考えられる。なお、構文解析部１１、シンボル解析部１２、ミスアライン検出部１３、ミスアラインチェックライブラリ挿入部１４、及びコード生成部１５は、各々の機能をコンピュータに実行させるためのプログラムでも良い。但し、実際には、これらの例に限定されない。
【００２６】
図６を参照し、本発明の言語処理装置の動作について説明する。
なお、図中では、記載の簡略化のため、「ポインタ型の変数」を、「ポインタ変数」や「ポインタの変数」等のように記載している。
【００２７】
（１）ステップＳ６０１
言語処理装置１０にソースファイル１が入力される。すなわち、構文解析部１１は、ソースファイル１を取得する。ここでは、構文解析部１１は、入力装置や通信用インタフェース等を介して、ソースファイル１を取得する。なお、構文解析部１１は、外部のコンピュータからソースファイル１を受け取っても良い。或いは、構文解析部１１は、外部の記憶装置や記憶媒体（メディア）からソースファイル１を読み出しても良い。
【００２８】
（２）ステップＳ６０２
構文解析部１１は、ソースファイル１に対して、ソースプログラムの構文解析を行う。このとき、シンボル解析部１２は、解析されたソースプログラムの構文に基づいて、シンボルコードを解析する。
【００２９】
（３）ステップＳ６０３
ミスアライン検出部１３は、ソースプログラムの構文解析時に、ソースプログラムの各々のプログラムステップ毎に、ミスアラインチェックライブラリ３の挿入箇所か確認する。まず、ミスアライン検出部１３は、関数の先頭かどうか確認する。ここでは、関数の開始検出部１３１は、関数の先頭かどうか確認する。
【００３０】
（４）ステップＳ６０４
ミスアライン検出部１３は、関数の先頭である場合、２ｂｙｔｅ以上のポインタ型の仮引数が存在するか確認する。ここでは、関数の開始検出部１３１は、２ｂｙｔｅ以上のポインタ型の仮引数が存在するか確認する。
【００３１】
（５）ステップＳ６０５
ミスアライン検出部１３は、関数の先頭で無い場合、又は、２ｂｙｔｅ以上のポインタ型の仮引数が存在しない場合、関数の戻り値を確認する。ここでは、関数の戻り値検出部１３２は、関数の戻り値を確認する。
【００３２】
（６）ステップＳ６０６
ミスアライン検出部１３は、関数の戻り値が存在する場合、関数の戻り値において２ｂｙｔｅ以上のポインタ型の戻り値が存在するか確認する。ここでは、関数の戻り値検出部１３２は、２ｂｙｔｅ以上のポインタ型の戻り値が存在するか確認する。
【００３３】
（７）ステップＳ６０７
ミスアライン検出部１３は、関数の戻り値が存在しない場合、又は、関数の戻り値において２ｂｙｔｅ以上のポインタ型の戻り値が存在しない場合、ポインタ型の変数の初期化が行われる箇所か確認する。ここでは、変数初期化検出部１３３は、ポインタ型の変数の初期化が行われる箇所か確認する。
【００３４】
（８）ステップＳ６０８
ミスアライン検出部１３は、ポインタ型の変数の初期化が行われる箇所である場合、２ｂｙｔｅ以上のデータへのポインタ型の変数が存在するか確認する。ここでは、変数初期化検出部１３３は、２ｂｙｔｅ以上のデータへのポインタ型の変数が存在するか確認する。
【００３５】
（９）ステップＳ６０９
ミスアライン検出部１３は、ポインタ型の変数の初期化が行われる箇所でない場合、又は、２ｂｙｔｅ以上のデータへのポインタ型の変数が存在しない場合、ポインタ型の変数の代入が行われる箇所か確認する。ミスアライン検出部１３は、ポインタ型の変数の代入が行われる箇所でない場合、処理を終了する。ここでは、変数代入検出部１３４は、ポインタ型の変数の代入が行われる箇所か確認し、ポインタ型の変数の代入が行われる箇所でない場合、処理を終了する。
【００３６】
（１０）ステップＳ６１０
ミスアライン検出部１３は、ポインタ型の変数の代入が行われる箇所である場合、２ｂｙｔｅ以上のデータへのポインタ型の変数が存在するか確認する。ミスアライン検出部１３は、２ｂｙｔｅ以上のデータへのポインタ型の変数が存在しない場合、処理を終了する。ここでは、変数代入検出部１３４は、２ｂｙｔｅ以上のデータへのポインタ型の変数が存在するか確認し、２ｂｙｔｅ以上のデータへのポインタ型の変数が存在しない場合、処理を終了する。
【００３７】
（１１）ステップＳ６１１
ミスアラインチェックライブラリ挿入部１４は、２ｂｙｔｅ以上のポインタ型の仮引数が存在する場合、関数の戻り値において２ｂｙｔｅ以上のポインタ型の戻り値が存在する場合、ポインタ型の変数の初期化において２ｂｙｔｅ以上のデータへのポインタ型の変数が存在する場合、又は、ポインタ型の変数の代入において２ｂｙｔｅ以上のデータへのポインタ型の変数が存在する場合、それぞれの箇所に、ミスアラインチェックライブラリ３を挿入する。ここでは、ミスアラインチェックライブラリ挿入部１４は、ソースプログラムの該当箇所に、ミスアラインチェックライブラリ３を挿入する。
【００３８】
（１２）ステップＳ６１２
コード生成部１５は、その他の言語処理を行う。ここでは、コード生成部１５は、ミスアラインチェックライブラリ３が挿入されたソースプログラムに対応するコードを生成し、生成されたコードに基づいてオブジェクト・ファイル２を作成し、出力する。
【００３９】
図７は、ソースファイル１に記述されたソースプログラムの一例を示す図である。
このソースプログラム中では、２ｂｙｔｅ以上のポインタ型を持つ関数（ｆｕｎｃ（））の仮引数（ｓｈｏｒｔ  ＊ｐｂ）と、戻り値（ｒｅｔｕｒｎ  ＊ｒｅｔ）で、ミスアラインが発生する可能性がある。
【００４０】
上記の箇所に、図８で示すように、コード生成時に自動的にミスアラインチェックライブラリ３（ｃｈｅｃｋ＿ｍｉｓａｌｉｇｎ（））を挿入する。このとき、ソースプログラムに記述されていた原文のソースコードは変更しない。
【００４１】
図９に、ミスアラインチェックライブラリ３（ｃｈｅｃｋ＿ｍｉｓａｌｉｇｎ（））が挿入されたプログラムの一例を示す。仮引数の先頭アドレスとサイズを用いて、先頭アドレスが指定したサイズの値の倍数でなければエラールーチン処理（ｅｒｒｏｒ（））を行う。
【００４２】
次に、図１０を参照して、生成されたオブジェクト・ファイル２を使って、ミスアラインチェックを行う手順について説明する。
【００４３】
（１）ステップＳ１００１
デバッグ装置２０は、言語処理装置１０で生成されたオブジェクト・ファイル２をダウンロードする。すなわち、デバッグ装置２０は、オブジェクト・ファイル２を取得する。ここでは、デバッグ装置２０は、言語処理装置１０からオブジェクト・ファイル２を取得する。なお、デバッグ装置２０は、言語処理装置１０から直接にではなく、間接的に、オブジェクト・ファイル２を受け取っても良い。例えば、デバッグ装置２０は、外部の記憶装置や記憶媒体（メディア）に格納されたオブジェクト・ファイル２を読み出すようにしても良い。
【００４４】
（２）ステップＳ１００２
デバッグ装置２０は、オブジェクト・ファイル２を参照し、ミスアラインチェックライブラリ３のエラールーチンにブレークポイントを設定する。
【００４５】
（３）ステップＳ１００３
デバッグ装置２０は、ブレークポイントを設定した後、オブジェクト・ファイル２に対して、ミスアラインチェックの実行を開始する。
【００４６】
（４）ステップＳ１００４
デバッグ装置２０は、ミスアラインチェックの実行時に、オブジェクト・ファイル２に含まれるソースコードに基づいて、プログラムステップ毎に命令実行する。
【００４７】
（５）ステップＳ１００５
デバッグ装置２０は、ミスアラインチェックライブラリ３（ｃｈｅｃｋ＿ｍｉｓａｌｉｇｎ（））内のエラールーチン処理（ｅｒｒｏｒ（））が実行されたか確認する。ここでは、デバッグ装置２０は、ミスアラインチェックライブラリ３（ｃｈｅｃｋ＿ｍｉｓａｌｉｇｎ（））内のエラールーチン処理（ｅｒｒｏｒ（））に到達したか確認する。
【００４８】
（６）ステップＳ１００６
デバッグ装置２０は、ミスアラインチェックライブラリ３（ｃｈｅｃｋ＿ｍｉｓａｌｉｇｎ（））内のエラールーチン処理（ｅｒｒｏｒ（））に到達しなければ、ブレークが発生しないため、ミスアラインを検出できない。この場合、デバッグ装置２０は、ミスアラインに非該当と判断する。
【００４９】
（７）ステップＳ１００７
デバッグ装置２０は、ミスアラインチェックライブラリ３（ｃｈｅｃｋ＿ｍｉｓａｌｉｇｎ（））内のエラールーチン処理（ｅｒｒｏｒ（））に到達すれば、ブレークが発生するため、ミスアラインを検出する。すなわち、デバッグ装置２０は、ブレークを発生した際に、ミスアラインを検出する。
【００５０】
このように、デバッグ装置２０は、特別なミスアライン検出機能が無くても、ミスアラインを検出できる。
【００５１】
以上のように、本発明のミスアライン検出システムでは、言語処理装置は、２ｂｙｔｅ以上のデータへのポインタ型の変数がある場合に、ミスアラインを行うライブラリを呼び出す処理を自動的に追加する。デバッグ装置は、そのライブラリを実行することで、自身にミスアラインチェック機能を持っていなくても、ミスアライン箇所を検出することが可能になる。
【００５２】
具体的には、言語処理装置は、構文解析の結果を用いて、関数の開始にある２ｂｙｔｅ以上のポインタ型の引数、関数の戻り値にある２ｂｙｔｅ以上のポインタ型の戻り値、２ｂｙｔｅ以上のポインタ型の変数の初期化、２ｂｙｔｅ以上のポインタ型の変数への代入している箇所を見極めて、ミスアラインをチェックするライブラリを挿入する。
【００５３】
これにより、デバッグ装置側で、ミスアラインしているポインタ型の仮引数や、ポインタ型の戻り値や、ポインタ型の変数への初期化や、ポインタ型の変数への代入を検出することができる。また、デバッグ装置に、別途、特別なミスアライン検出機能を付加することなく、ミスアラインを検出でき、ミスアラインチェック漏れによるプログラムの品質低下を防ぐことができる。
【００５４】
以上、本発明の実施形態を詳述してきたが、実際には上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
【図面の簡単な説明】
【００５５】
【図１】図１は、プラグマ指令が記述されたプログラム例を示す図である。
【図２】図２は、デバッグ装置によるエラーチェックの処理フローを示す図である。
【図３】図３は、本発明におけるミスアライン検出システムの構成例を示す図である。
【図４】図４は、本発明の言語処理装置でオブジェクト・ファイルを生成する動作を説明するための図である。
【図５】図５は、本発明の言語処理装置で生成されたオブジェクト・ファイルをデバッグ装置に入力してミスアラインを検出する動作を説明するための図である。
【図６】図６は、本発明の言語処理装置による言語処理例のフローチャートを示す図である。
【図７】図７は、ソースプログラム例を示す図である。
【図８】図８は、本発明の言語処理装置によるライブラリ追加例を示す図である。
【図９】図９は、追加ライブラリの内容例を示す図である。
【図１０】図１０は、本発明の言語処理装置で生成されたオブジェクト・ファイルに対するデバッグ装置での処理のフローチャートを示す図である。
【符号の説明】
【００５６】
１…  ソースファイル
２…  オブジェクト・ファイル
３…  ミスアラインチェックライブラリ
１０…  言語処理装置
１１…  構文解析部
１２…  シンボル解析部
１３…  ミスアライン検出部
１４…  ミスアラインチェックライブラリ挿入部
１５…  コード生成部
２０…  デバッグ装置
【図１】
2010117808.tif 000003
【図２】
2010117808.tif 000004
【図３】
2010117808.tif 000005
【図４】
2010117808.tif 000006
【図５】
2010117808.tif 000007
【図６】
2010117808.tif 000008
【図７】
2010117808.tif 000009
【図８】
2010117808.tif 000010
【図９】
2010117808.tif 000011
【図１０】
2010117808.tif 000012