JP6119535B2 - トレース方法、処理プログラム、および情報処理装置 - Google Patents
トレース方法、処理プログラム、および情報処理装置 Download PDFInfo
- Publication number
- JP6119535B2 JP6119535B2 JP2013203365A JP2013203365A JP6119535B2 JP 6119535 B2 JP6119535 B2 JP 6119535B2 JP 2013203365 A JP2013203365 A JP 2013203365A JP 2013203365 A JP2013203365 A JP 2013203365A JP 6119535 B2 JP6119535 B2 JP 6119535B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- trace
- function
- execution
- executed
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
Description
〔第1の実施の形態〕
図1は、第1の実施の形態に係る情報処理装置の一例を示す図である。第1の実施の形態に係る情報処理装置10は、プログラム1の実行中に、トレースコード2に基づいてトレース処理を実行する。トレース処理は、例えば、プログラム1実行中の所定の時点でのメモリやレジスタの内容を取得する処理である。情報処理装置10は、トレース処理を実現するために、書き換え手段11、記憶手段12、および実行手段13を有する。情報処理装置10は、例えばプロセッサやメモリを有するコンピュータである。
実行手段13は、関数1a実行中のトレース位置の実行時に、第2の命令5に基づいてトレースコード2を実行する(ステップS3)。例えば第2の命令5が例外命令であれば、実行手段13は、例外ハンドラとして定義されているトレースコード2を呼び出し、呼び出したトレースコード2を実行する。
〔第2の実施の形態〕
次に第2の実施の形態について説明する。第2の実施の形態は、OSで用意されたAPIの実行開始時におけるコンピュータの状態を示す情報をトレース(データ採取)するものである。APIには、OSの機能を利用するための関数などのプログラムが含まれており、アプリケーションプログラムなどを実行中にAPIを呼び出すことで、OSの機能を利用することができる。
コマンド部120は、ユーザから、トレース指示のコマンドの入力を受け付ける。そしてコマンド部120は、トレース要求をドライバ部130に送信する。またコマンド部120は、ドライバ部130からトレース結果を取得し、トレース結果を含むログファイルを出力する。なおコマンド部120は、OSのユーザモードで動作する。
なお、コマンド部120は、例えば「trace.exe」というファイル名の実行形式のファイルをコンピュータ100が実行することで実現する機能である。またドライバ部130は、例えば「TraceDriver.sys」というファイル名の実行形式のファイルをコンピュータ100が実行することで実現する機能である。
図4は、トレースの処理の概要を示す図である。ユーザは、キーボード22などの入力デバイスを操作し、トレースの実行を指示するコマンド31を入力する。コマンド31では、例えばトレース対象のプログラム111が指定される。またコマンド31では、トレースの実行条件が定義されたトレース設定ファイル32が指定される。
図8は、トレース設定ファイルの一例を示す図である。トレース設定ファイル32には、例えばデータバッファサイズやトレースポイントが指定される。図8の例では、[SETTING]の欄に、採取したデータを格納するデータバッファのサイズが設定されている。また[TRACEPOINT]の欄に、トレースポイントが指定されている。トレースポイントは、例えばトレース対象のプログラムの名称(シンボル名)で指定される。トレースポイントがシンボル名のみで示された場合、そのシンボル名に対応するプログラムの先頭の位置がトレースポイントとなる。また、トレースポイントをメモリ内でのアドレスで指定することもできる。
図9は、トレース設定処理の手順の一例を示すフローチャートである。
[ステップS101]ドライバ部130は、トレース管理テーブルを作成する。トレース管理テーブルは、トレースポイントにおける命令と、その命令を実行するためのスタブアドレスとを管理するデータテーブルである。トレース管理テーブル作成処理の詳細は後述する(図11参照)。
このような手順でトレースの実行環境が整えられる。トレースポイントは、トレース管理テーブルに示される。
図11は、トレース管理テーブル作成処理の手順を示すフローチャートである。
[ステップS111]ドライバ部130は、トレース設定ファイル読み込み処理を行う。トレース設定ファイル読み込み処理により、トレース管理テーブル60のトレースアドレスの欄に、トレースポイントのアドレスが設定される。この処理の詳細は後述する(図12参照)。ここで、トレース管理テーブル60に設定されたトレースポイントの数をmとする(mは1以上の整数)。
[ステップS113]ドライバ部130は、iの値がトレースポイント数mと同じか否かを判断する。iの値がトレースポイント数mと同じ場合、トレース管理テーブル作成処理が終了する。iの値がトレースポイント数mと異なる場合、処理がステップS114に進められる。
[ステップS116]ドライバ部130は、スタブの格納領域の先頭のアドレスを、トレース管理テーブル60のi番目のレコードのスタブアドレスの欄に格納する。
次にトレース設定ファイル読み込み処理の手順について説明する。
[ステップS121]ドライバ部130は、トレース設定ファイル32の[SETTING]の欄から、データサイズを読み取る。ドライバ部130は、読み取ったデータサイズ分の記憶領域を、トレースデータ142(図4参照)の格納領域としてメモリ102内に確保する。
[ステップS123]ドライバ部130は、iの値がトレースポイント数mと同じか否かを判断する。iの値がトレースポイント数mと同じ場合、トレース管理テーブル作成処理が終了する。iの値がトレースポイント数mと異なる場合、処理がステップS124に進められる。
[ステップS128]ドライバ部130は、iの値に1を加算し、処理をステップS123に進める。
図13は、IAT書き換え処理の手順の一例を示すフローチャートである。
[ステップS133]ドライバ部130は、IAT134に基づいて、ハンドラ内で使用されているAPIのリスト(APIリスト)を作成する。例えばドライバ部130は、ハンドラ内で使用されているAPIの名前をアドレスに変換し、アドレス順にソートする。
[ステップS134]ドライバ部130は、変数iに0を設定する。
[ステップS135]ドライバ部130は、iの値がAPI数nと同じか否かを判断する。iの値がAPI数nと同じ場合、IAT書き換え処理が終了する。iの値がAPI数nと異なる場合、処理がステップS136に進められる。
このようにしてIATの書き換えが行われる。その後、図9に示すように、ハンドラの置き換えとトレースポイントの命令の置き換えが行われ、トレース設定が完了する。トレース設定が完了した後に、トレース対象のAPIが呼び出されると、例外命令が実行される。その結果、トラップ例外処理が開始される。
[ステップS141]ドライバ部130は、トレースアドレスで発生した例外か否かを判断する。例えばドライバ部130は、トレース管理テーブル60を参照し、例外を発生させた例外命令のアドレスが、トレースアドレスとして登録されている場合、トレースアドレスで発生した例外であると判断する。トレースアドレスで発生した例外の場合、処理がステップS143に進められる。トレースアドレス以外で発生した例外の場合、処理がステップS142に進められる。
[ステップS144]ドライバ部130は、トレース対象の関数に対応するスタブを実行する。例えばハンドラ131bの最後の命令として、スタブ141aの先頭へのジャンプ命令が記載されている。ドライバ部130は、その命令を実行することで、処理対象をスタブ141aに遷移させ、スタブ141aに記述された命令を実行する。
図16は、トレースデータ採取処理の手順の一例を示すフローチャートである。
[ステップS151]ドライバ部130は、ハンドラ131bを呼び出し、ハンドラ131b内の次に実行する命令を解釈する。
[ステップS156]ドライバ部130は、例外発生元の関数の処理が最後まで終了すると、処理がハンドラ131bに戻す。
次に第3の実施の形態について説明する。第3の実施の形態では、APIなどの関数中の任意の箇所をトレースポイントとすることを可能とするものである。以下、第3の実施の形態における、第2の実施の形態と相違する部分について説明する。
図19は、第3の実施の形態におけるトレース設定ファイルの一例を示す図である。トレース設定ファイル32aでは、トレース対象の関数の名称と、その関数中でのトレースポイントの先頭からのオフセット(シンボル名+オフセット)により、トレースポイントを指定可能となっている。この場合、トレース対象の関数中の、先頭からオフセットで指定された位置が、トレースポイントとなる。
図20は、第3の実施の形態におけるトレース設定処理の手順の一例を示すフローチャートである。第3の実施の形態では、トレース管理テーブル作成処理(ステップS201)、例外ハンドラの置き換え処理(ステップS202)、およびトレースポイントの命令の例外命令への置き換え処理(ステップS203)が、ドライバ部130によって行われる。ステップS201〜S203の各処理の詳細は、それぞれ、図9に示した第2の実施の形態におけるトレース設定処理のステップS101,S103,S104と同様である。すなわち、第3の実施の形態におけるトレース設定処理は、第2の実施の形態のトレース設定処理から、IATの書き換え処理(ステップS102)を除いた処理となる。
図21は、第3の実施の形態におけるトラップ例外処理の手順の一例を示すフローチャートである。
[ステップS214]ドライバ部130は、ステップS213により、再帰的に呼ばれたスレッドであると判定されたか否かを判断する。再帰的に呼ばれたスレッドであると判定された場合、処理がステップS217に進められる。再帰的に呼ばれたスレッドではないと判定された場合、処理がステップS215に進められる。
[ステップS218]ドライバ部130は、例外発生元に処理を戻す。これにより、例外発生元の関数を実行しているスレッドにより、例外発生アドレスの次の命令以降の処理が実行される。
図23は、スレッド判別処理の手順の一例を示すフローチャートである。
[ステップS221]ドライバ部130は、TID管理テーブル63から、例外発生元のトレースアドレスを検索する。
[ステップS224]ドライバ部130は、TID管理テーブル63に、例外発生元のトレースアドレスに対応付けて、今回の例外を発生させたスレッドのTIDが登録されているか否かを判断する。該当するTIDが登録されていれば、処理がステップS225に進められる。該当するTIDが登録されていなければ、処理がステップS226に進められる。
次に、第3の実施の形態におけるトレースデータ採取処理の手順について説明する。
[ステップS231]ドライバ部130は、ハンドラ131cを呼び出し、ハンドラ131b内の命令を次に実行する命令を解釈する。
[ステップS236]ドライバ部130は、例外発生元の関数内の次に実行する命令が、例外命令か否かを判断する。例外命令であれば、処理がステップS237に進められる。例外命令でなければ、処理がステップS238に進められる。
[ステップS239]ドライバ部130は、例外発生元の関数(API)の処理が終了したか否かを判断する。処理が終了した場合、処理がステップS240に進められる。処理が終了していなければ、処理がステップS235に進められ、例外発生元の関数中の次に実行する命令が解釈される。
次に、第4の実施の形態について説明する。第4の実施の形態は、第2の実施の形態と第3の実施の形態とを組み合わせたものである。第4の実施の形態では、トレース対象のプログラムである複数の関数にトレースポイントをセットし、各関数内に設定するトレースポイントが1箇所である場合に、トレースポイントが関数の先頭か否かに応じて、トレースデータ採取処理を切り替える。例えば第4の実施の形態では、トレースポイントがトレース対象の関数の先頭であれば、図7に示した第2の実施の形態の処理によりトレースデータを採取する。また第4の実施の形態では、トレースポイントがトレース対象の関数の先頭以外であれば、図18に示した第3の実施の形態の処理によりトレースデータを採取する。
図25は、第4の実施の形態におけるトレース管理テーブルの一例を示す図である。第4の実施の形態におけるトレース管理テーブル64には、トレースアドレス、元の命令、スタブアドレス、およびフラグの欄が設けられている。トレースアドレス、元の命令、およびスタブアドレスの欄には、図10に示した第2の実施の形態のトレース管理テーブル60における同名の欄と同種の情報が設定される。
図28は、トレースアドレス判別処理の手順の一例を示すフローチャートである。
[ステップS341]ドライバ部130は、トレース管理テーブル64から、現在実行している例外処理の発生元のトレースアドレスに対応するフラグを取得する。
1a 関数
2 トレースコード
3 スタブ
4 第1の命令
5 第2の命令
6 第3の命令
7 第4の命令
10 情報処理装置
11 書き換え手段
12 記憶手段
13 実行手段
Claims (8)
- プログラムの実行中に、トレースコードに基づいてトレース処理を実行するための処理プログラムであって、
コンピュータに、
前記プログラムに定義された関数内のトレース位置に記述された第1の命令を、前記トレースコードの実行を指示する第2の命令に書き換えると共に、前記第1の命令を記憶手段に格納し、
前記関数実行中の前記トレース位置の実行時に、前記第2の命令に基づいて前記トレースコードを実行し、
前記トレースコード内に前記関数を呼び出す第3の命令が含まれる場合、前記第3の命令の実行時には、前記関数内の前記トレース位置の前記第2の命令を、前記記憶手段に格納した前記第1の命令に置き換えて、前記関数を実行する、
処理を実行させることを特徴とする処理プログラム。 - 前記トレース位置が前記関数の先頭である場合、
前記第1の命令を格納する際には、前記第1の命令に続けて、前記関数における前記トレース位置の次の命令へのジャンプを指示する第4の命令を、前記記憶手段に格納し、
前記トレースコード実行中の前記第3の命令の実行時には、前記記憶手段に格納された前記第1の命令と第4の命令とを順に実行する、
ことを特徴とする請求項1記載の処理プログラム。 - 前記トレース位置が前記関数の先頭である場合、前記第1の命令を格納する際には、前記第3の命令の呼び出し先となる関数のアドレスを示す情報を、前記第1の命令のアドレスに変更する、
ことを特徴とする請求項2記載の処理プログラム。 - 前記第1の命令を格納する際には、前記第1の命令に続けて、前記関数におけるトレース位置の次の命令へのジャンプを指示する第4の命令を、前記記憶手段に格納し、
前記トレースコードの実行中の前記第3の命令の実行時には、前記第3の命令に基づいて前記関数の先頭から実行を開始し、前記関数の実行位置が前記トレース位置になると、前記記憶手段に格納された前記第1の命令と第4の命令とを順に実行する、
ことを特徴とする請求項1記載の処理プログラム。 - 前記関数の実行位置が前記トレース位置となり、前記トレースコードの実行を開始したときに、前記プログラムを実行している処理単位の識別情報を前記記憶手段に格納し、
前記関数の実行位置が前記トレース位置となったときに、前記プログラムを実行している処理単位の識別情報が既に保存されている場合、前記トレースコードの実行に代えて、前記記憶手段に格納された前記第1の命令と第4の命令とを順に実行することを特徴とする請求項4記載の処理プログラム。 - 前記第1の命令を保存する際には、前記第1の命令に続けて、前記関数における前記トレース位置の次の命令へのジャンプを指示する第4の命令を、前記記憶手段12に格納し、
前記トレースコードの実行を開始する際に、前記トレース位置が前記関数の先頭か否かを判断し、
前記トレース位置が前記関数の先頭の場合、前記トレースコード実行中の前記第3の命令の実行時には、前記記憶手段に格納された前記第1の命令と第4の命令とを順に実行する、
前記トレース位置が前記関数の先頭ではない場合、前記トレースコードの実行中の前記第3の命令の実行時には、前記第3の命令に基づいて前記関数の先頭から実行を開始し、前記関数の実行位置が前記トレース位置になると、前記記憶手段に格納された前記第1の命令と第4の命令とを順に実行する、
ことを特徴とする請求項1記載の処理プログラム。 - プログラムの実行中に、トレースコードに基づいてトレース処理を実行するトレース方法であって、
コンピュータが、
前記プログラムに定義された関数内のトレース位置に記述された第1の命令を、前記トレースコードの実行を指示する第2の命令に書き換えると共に、前記第1の命令を記憶手段に格納し、
前記関数実行中の前記トレース位置の実行時に、前記第2の命令に基づいて前記トレースコードを実行し、
前記トレースコード内に前記関数を呼び出す第3の命令が含まれる場合、前記第3の命令の実行時には、前記関数内の前記トレース位置の前記第2の命令を、前記記憶手段に格納した前記第1の命令に置き換えて、前記関数を実行する、
トレース方法。 - プログラムの実行中に、トレースコードに基づいてトレース処理を実行する情報処理装置であって、
前記プログラムに定義された関数内のトレース位置に記述された第1の命令を、トレースコードの実行を指示する第2の命令に書き換えると共に、前記第1の命令を記憶手段に格納する書き換え手段と、
前記関数実行中の前記トレース位置の実行時に、前記第2の命令に基づいて前記トレースコードを実行し、前記トレースコード内に前記関数を呼び出す第3の命令が含まれる場合、前記第3の命令の実行時には、前記関数内の前記トレース位置の前記第2の命令を、前記記憶手段に格納した前記第1の命令に置き換えて、前記関数を実行する実行手段と、
を有する情報処理装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013203365A JP6119535B2 (ja) | 2013-09-30 | 2013-09-30 | トレース方法、処理プログラム、および情報処理装置 |
US14/483,750 US9612837B2 (en) | 2013-09-30 | 2014-09-11 | Trace method and information processing apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013203365A JP6119535B2 (ja) | 2013-09-30 | 2013-09-30 | トレース方法、処理プログラム、および情報処理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2015069437A JP2015069437A (ja) | 2015-04-13 |
JP6119535B2 true JP6119535B2 (ja) | 2017-04-26 |
Family
ID=52741342
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013203365A Active JP6119535B2 (ja) | 2013-09-30 | 2013-09-30 | トレース方法、処理プログラム、および情報処理装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US9612837B2 (ja) |
JP (1) | JP6119535B2 (ja) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9619214B2 (en) | 2014-08-13 | 2017-04-11 | International Business Machines Corporation | Compiler optimizations for vector instructions |
US10169014B2 (en) | 2014-12-19 | 2019-01-01 | International Business Machines Corporation | Compiler method for generating instructions for vector operations in a multi-endian instruction set |
US9588746B2 (en) | 2014-12-19 | 2017-03-07 | International Business Machines Corporation | Compiler method for generating instructions for vector operations on a multi-endian processor |
US9880821B2 (en) | 2015-08-17 | 2018-01-30 | International Business Machines Corporation | Compiler optimizations for vector operations that are reformatting-resistant |
US9594668B1 (en) * | 2015-09-04 | 2017-03-14 | International Business Machines Corporation | Debugger display of vector register contents after compiler optimizations for vector instructions |
CN111736838A (zh) * | 2019-03-25 | 2020-10-02 | 华为技术有限公司 | 一种跨语言编译方法及设备 |
US11501046B2 (en) * | 2020-03-24 | 2022-11-15 | International Business Machines Corporation | Pre-silicon chip model of extracted workload inner loop instruction traces |
CN113448815B (zh) * | 2020-03-26 | 2022-10-18 | 华为技术有限公司 | 一种采集追踪trace调用链的方法和电子设备 |
CN115242778B (zh) * | 2022-07-21 | 2023-06-27 | 中电金信软件有限公司 | 一种文件传输方法、装置、电子设备及可读存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6182244B1 (en) * | 1997-09-10 | 2001-01-30 | International Business Machines Corporation | System and method for automatically initiating a tracing facility and dynamically changing the levels of tracing currently active |
JP2001147837A (ja) * | 1999-11-18 | 2001-05-29 | Fujitsu Ltd | プログラムトレース装置及び記憶媒体 |
JP2005301382A (ja) * | 2004-04-07 | 2005-10-27 | Kyocera Mita Corp | ファームウェア診断装置 |
JP2006268298A (ja) | 2005-03-23 | 2006-10-05 | Nec Corp | デバッグ方法及びデバッグ装置 |
KR101581001B1 (ko) | 2009-03-30 | 2015-12-30 | 삼성전자주식회사 | 프로그램의 동적 분석 방법 및 그 장치 |
-
2013
- 2013-09-30 JP JP2013203365A patent/JP6119535B2/ja active Active
-
2014
- 2014-09-11 US US14/483,750 patent/US9612837B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US20150095626A1 (en) | 2015-04-02 |
US9612837B2 (en) | 2017-04-04 |
JP2015069437A (ja) | 2015-04-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6119535B2 (ja) | トレース方法、処理プログラム、および情報処理装置 | |
US9459989B2 (en) | Method and apparatus for reverse debugging source code using causal analysis | |
TWI566090B (zh) | Debugging firmware / software to produce tracking systems and methods, recording media and computer program products | |
KR102184436B1 (ko) | 저스트 마이 코드를 이용하는 자바스크립트 디버깅 기법 | |
US20150006961A1 (en) | Capturing trace information using annotated trace output | |
JP6342070B2 (ja) | ジョブ管理装置及びジョブ管理方法及びジョブ管理プログラム | |
CN112732300A (zh) | 一种数据包更新方法、装置、电子设备及可读存储介质 | |
US20140281727A1 (en) | Grouping and analysis of data access hazard reports | |
US20180046563A1 (en) | Exception prediction before an actual exception during debugging | |
US9880925B1 (en) | Collecting structured program code output | |
US8782626B2 (en) | Search suggestions for static code analysis | |
JP2008305019A (ja) | シミュレーション装置及びシミュレーション方法及びプログラム | |
JP2017129970A (ja) | 管理装置,管理方法および管理プログラム | |
CN111258875A (zh) | 界面测试方法及系统、电子设备、存储介质 | |
CN114780409A (zh) | 基于程序运行进程的断点设置方法、电子设备和存储介质 | |
CN111309583B (zh) | 界面过度绘制检测方法、装置、介质及计算设备 | |
WO2016120989A1 (ja) | 管理計算機及びルールの試験方法 | |
JP6688433B2 (ja) | 計算機システム | |
JP2009064125A (ja) | サーバ装置、そのプログラム | |
JP5319643B2 (ja) | ソフトウェアプロダクトライン開発支援装置およびその方法 | |
JP6079868B2 (ja) | エラー分析方法、情報処理装置およびエラー分析プログラム | |
JP2020087087A (ja) | 修正候補特定プログラム | |
CN112286804B (zh) | 系统的调试方法、装置、设备和介质 | |
CN110674622A (zh) | 可视化图表生成方法、系统、存储介质及电子设备 | |
JP7401751B2 (ja) | 情報処理プログラム、情報処理方法及び情報処理システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20160606 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20170217 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20170228 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20170313 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6119535 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |