JP2010061234A - デバッガ装置、デバッグ方法およびプログラム - Google Patents
デバッガ装置、デバッグ方法およびプログラム Download PDFInfo
- Publication number
- JP2010061234A JP2010061234A JP2008224017A JP2008224017A JP2010061234A JP 2010061234 A JP2010061234 A JP 2010061234A JP 2008224017 A JP2008224017 A JP 2008224017A JP 2008224017 A JP2008224017 A JP 2008224017A JP 2010061234 A JP2010061234 A JP 2010061234A
- Authority
- JP
- Japan
- Prior art keywords
- program
- debugging
- correction processing
- page
- instruction
- 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.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
【課題】デバッグ作業時に修正処理を実行させても、デバッグ作業に支障をきたさないデバッグ方法を提供すること
【解決手段】仮想記憶技術による複数のアドレス空間を介してメモリにアクセスするコンピュータ装置と、コンピュータ装置に用いるデバッグ装置とを備えるデバッグシステムにおけるデバッグ方法において、コンピュータ装置が、例外事象が発生した際に行う例外処理の最後に停止し、前記デバッグ装置を起動させる第1の過程と、デバッグ装置が、第1の過程にて起動されると、例外事象を発生した命令が記憶されているのと同じアドレス空間に、コンピュータ装置を修正処理部として機能させる修正処理プログラムを配置する第2の過程とを備えること。
【選択図】図1
【解決手段】仮想記憶技術による複数のアドレス空間を介してメモリにアクセスするコンピュータ装置と、コンピュータ装置に用いるデバッグ装置とを備えるデバッグシステムにおけるデバッグ方法において、コンピュータ装置が、例外事象が発生した際に行う例外処理の最後に停止し、前記デバッグ装置を起動させる第1の過程と、デバッグ装置が、第1の過程にて起動されると、例外事象を発生した命令が記憶されているのと同じアドレス空間に、コンピュータ装置を修正処理部として機能させる修正処理プログラムを配置する第2の過程とを備えること。
【選択図】図1
Description
本発明は、デバッガ装置、デバッグ方法およびプログラム、特に仮想記憶技術を用いたコンピュータ装置のデバッグに用いるデバッグ方法、デバッガ装置およびプログラムに関する。
物理メモリは、一般的に半導体記憶素子を用いた記憶装置であり、高速で読書きが行えることを特徴としている。物理メモリ上のある記憶領域を指定する際には、物理アドレスを用いる。物理アドレスで指定できる記憶領域全体を、物理アドレス空間と呼ぶ。
補助記憶装置は、一般的にハードディスク装置、フレキシブルディスク装置、またはフラッシュメモリ装置を用いた記憶装置であり、物理メモリよりも大容量であるが、読書きの速度が遅いことを特徴としている。
補助記憶装置は、一般的にハードディスク装置、フレキシブルディスク装置、またはフラッシュメモリ装置を用いた記憶装置であり、物理メモリよりも大容量であるが、読書きの速度が遅いことを特徴としている。
デバッガ装置は、プログラムの修正作業(以下、「デバッグ作業」という)を支援する装置である。デバッガ装置は一般に、コンピュータ装置の中央演算部(Central Processing Unit;CPU)の動作を一時的に中断させたり、CPUの内部状態を調査したり、CPUに1命令ずつプログラムを実行させたりするなど、CPUがプログラムを実際に実行する際の動作を細かく解析するための機能を持つ。作業者はこれらの機構を用いてプログラム実行時のCPUの動作を観察し、プログラムのどの部分の処理がプログラム製作者の意図と違うのかを解析することにより、プログラムの誤りを見つけ出す手掛かりとする。
メモリ管理部(Memory Management Unit;MMU)は、一般的に半導体素子を用いたメモリアクセスを処理する装置で、仮想記憶技術における仮想アドレス空間のアドレスと物理アドレス空間のアドレスとを対応付け、アドレスの変換を行うことを特徴としている。メモリ管理部MMUはCPUと一体の半導体素子として実現される場合があるが、その処理はCPUとは独立している。
仮想記憶技術とは、情報を補助記憶装置と物理メモリとに分散させて記憶し、記憶された情報の配置を必要に応じて入れ替えることにより、実際に装備されているよりも大きなサイズの物理メモリがシステムに装備されているかのように見せかける技術である。
仮想記憶技術によって作り出された大きなサイズのアドレス空間を仮想アドレス空間と呼ぶ。また仮想記憶技術で使用する補助記憶装置上の記憶領域を、スワップ領域と呼ぶ。
CPUが仮想アドレス空間のあるアドレス(以下、「仮想アドレス」という)に対して読書きを行う場合、まず、補助記憶装置と物理メモリ装置の制御を行っているメモリ管理部MMUがアドレス変換処理を行う。
仮想記憶技術によって作り出された大きなサイズのアドレス空間を仮想アドレス空間と呼ぶ。また仮想記憶技術で使用する補助記憶装置上の記憶領域を、スワップ領域と呼ぶ。
CPUが仮想アドレス空間のあるアドレス(以下、「仮想アドレス」という)に対して読書きを行う場合、まず、補助記憶装置と物理メモリ装置の制御を行っているメモリ管理部MMUがアドレス変換処理を行う。
メモリ管理部MMUは、仮想アドレス空間、物理アドレス空間、およびスワップ領域を、ページという一定の大きさの記憶領域を単位として管理している。メモリ管理部MMUは、ある仮想アドレスを含むページが物理メモリ上に存在しているかどうかの情報を保持している。アクセスの対象の仮想アドレスを含むページが物理メモリ上に存在している場合、メモリ管理部MMUは、当該仮想アドレス空間上のアドレス(以下、「仮想アドレス」という)を実際の物理メモリ上、すなわち物理アドレス空間のアドレス(以下、「物理アドレス」という)に変換し、読書きを行う。対象の仮想アドレスを含むページが物理メモリ上に存在していない場合、すなわち、補助記憶装置に退避されている場合、補助記憶装置に格納されている当該ページを、物理メモリ上の未使用のページへ転送する処理が行われる。
この処理をページインと呼ぶ。ページインは、メモリ管理部MMUがCPUに対して要求を発し、CPUはページインプログラムを起動して補助記憶装置から読み出した当該ページを物理メモリ上に転送する。ページインプログラムは、スワップ領域に含まれる全てのページの情報を保持しており、メモリ管理部MMUから要求されたページをスワップ領域から読出し、メモリ管理部MMUへ渡す。メモリ管理部MMUは、あるページが物理メモリ上に存在しているかどうかの情報を更新した後、受取ったページ内容を物理メモリ上に書き込む。転送後、対象の仮想アドレスを含むページが物理メモリ上に存在している場合と同様に、メモリ管理部MMUは当該仮想アドレス空間上のアドレスを実際の物理メモリ上のアドレスに変換し、読書きを行う。
タスクとは、プログラムやデータ、及び実行中のCPUの状態を管理する単位である。ひとつのタスクは、ひとつの仮想アドレス空間を持ち、タスク間では仮想アドレス空間は互いに独立している。
CPUは定期的に、または不定期に、プログラムの実行を一時中断し、その時のプログラム、データ、CPUの状態(タスク)を保存して、その代わりに以前に中断された別のタスクの状態を復元、あるいは新たにまったく別のタスクを生成し、実行を再開(あるいは開始)させることができる。この動作をタスク切り替えと呼び、このとき実行を再開(開始)されたタスクを実行中のタスクと呼ぶ。
この切り替えを定期的かつ高速に行うことにより、あたかも複数のCPUが複数のプログラムを同時に実行しているかのような状況を作りだす。このように複数プログラムを並行実行することをマルチタスクと呼ぶ。
CPUは定期的に、または不定期に、プログラムの実行を一時中断し、その時のプログラム、データ、CPUの状態(タスク)を保存して、その代わりに以前に中断された別のタスクの状態を復元、あるいは新たにまったく別のタスクを生成し、実行を再開(あるいは開始)させることができる。この動作をタスク切り替えと呼び、このとき実行を再開(開始)されたタスクを実行中のタスクと呼ぶ。
この切り替えを定期的かつ高速に行うことにより、あたかも複数のCPUが複数のプログラムを同時に実行しているかのような状況を作りだす。このように複数プログラムを並行実行することをマルチタスクと呼ぶ。
タスクの中には、カーネルタスクという特別なタスクが存在する。これは個々のタスクの管理をする唯一のタスクであり、システム動作中は必ず一つだけ常に存在している。
前述のタスク切り替えを行うタスク切替えプログラムやタスクの生成や消滅の処理は、このカーネルタスクの実行中に行われる。また、前述のページインプログラムや後述する例外処理プログラムも、このカーネルタスクの実行中に行われる。カーネルタスクが動作する際の仮想アドレス空間を、カーネル空間と呼ぶ。
前述のタスク切り替えを行うタスク切替えプログラムやタスクの生成や消滅の処理は、このカーネルタスクの実行中に行われる。また、前述のページインプログラムや後述する例外処理プログラムも、このカーネルタスクの実行中に行われる。カーネルタスクが動作する際の仮想アドレス空間を、カーネル空間と呼ぶ。
一方、カーネルタスク以外の個々のタスクを、ユーザタスクと呼ぶ。ユーザタスクが動作する際の仮想アドレス空間を、ユーザ空間と呼ぶ。ユーザ空間は、ユーザタスクの個数分、存在する。スタックは、コンピュータで用いられる基本的なデータ構造の1 つで、データを後入れ先出しの構造で保持するものである。スタックは現代のコンピュータシステムで非常に広範囲に使われている。典型的なスタックはコンピュータのメモリ上に固定の基点と可変のサイズを持つ領域である。初期状態ではスタックのサイズはゼロである。「スタックポインタ」はスタック上で最も最近参照された位置を指している。多くのCPUはスタックポインタとして使用可能なレジスタを持っている。
スタックに対する主な操作は、つぎの2種類である。プッシュ(Push)操作は、スタックポインタが指す場所にデータを格納し、そのデータのサイズのぶんだけスタックポインタをずらすものである。ポップ(Pop)操作は、スタックポインタが指している現在位置にあるデータを取り出し、スタックポインタをそのデータのぶんだけ(プッシュとは逆方向に)ずらすものである。また、スタックポインタの値を直接修正する操作も可能である。
スタックは、プログラム内でサブルーチンの処理を呼出す際に利用される。サブルーチンを呼出す側の処理では、サブルーチンへ渡すデータ(引数)をスタックへプッシュ操作で格納する。サブルーチンを呼出す側の処理へ戻る必要があるため、戻り先のアドレスをスタックへプッシュ操作で格納した後、サブルーチンへ処理を移行する。サブルーチン側から呼出し側へ戻る際には、戻り先のアドレスをスタックからポップ操作で取り出し、そのアドレスへ処理を移行する。また、戻り先のアドレスをスタックからポップ操作で取り出した後、ポップ操作と同じ方向に、スタックへ格納されている引数の分だけスタックポインタをずらす処理を一緒に行う命令がある。この命令は、呼出し側に戻った後で、不要となった引数をスタックから取り除く処理を省略することを目的とする。加えて、もしこの処理を2つの個別の命令で実行した場合、それらの命令の間でタスク切り替えが発生すると、タスク切替え処理によってスタックの状態が変化する虞がある。その結果、呼出し元へ戻れなくなる危険を防ぐためにも、この処理は1つの命令で一緒に行う必要がある。
例外とは、プログラムの実行中にCPUが検知した「特別な処理が必要な事態」のことである。例えば、「除算を実行しようとしたら除数が0だった」、「メモリの読み書きをしようとしたらその領域が読み書き禁止に設定されていた」、等の事象がこれに相当する。
例外が発生すると、サブルーチン呼び出しの際と同様に、例外発生時に処理を行っていたアドレスをスタックへプッシュ操作で格納する。次に、マルチタスクコンピュータシステムでは、CPUは実行中のタスクを直ちに中断し、タスクをカーネルタスクに切り替え、例外処理プログラムを実行させる。例外処理プログラムは例外事象を解析し、その要因に応じた対応、例えばエラーの処理等を行った後、タスク切替えプログラムに制御を移す。タスク切替えプログラムは、各々のタスクの状態に基づいて実行させるべきタスクを一つ選択し、そのタスクへのタスク切り替えを行う。
また、例外を発生させる「ブレーク命令」と呼ばれる命令がある。CPUは、このブレーク命令を実行すると、上述の「除算を実行しようとしたら除数が0だった」などの場合と同様に、例外を発生させて、スタックへのプッシュ、タスクの切り替えを行い、例外処理プログラムを実行する。
例外が発生すると、サブルーチン呼び出しの際と同様に、例外発生時に処理を行っていたアドレスをスタックへプッシュ操作で格納する。次に、マルチタスクコンピュータシステムでは、CPUは実行中のタスクを直ちに中断し、タスクをカーネルタスクに切り替え、例外処理プログラムを実行させる。例外処理プログラムは例外事象を解析し、その要因に応じた対応、例えばエラーの処理等を行った後、タスク切替えプログラムに制御を移す。タスク切替えプログラムは、各々のタスクの状態に基づいて実行させるべきタスクを一つ選択し、そのタスクへのタスク切り替えを行う。
また、例外を発生させる「ブレーク命令」と呼ばれる命令がある。CPUは、このブレーク命令を実行すると、上述の「除算を実行しようとしたら除数が0だった」などの場合と同様に、例外を発生させて、スタックへのプッシュ、タスクの切り替えを行い、例外処理プログラムを実行する。
デバッガ装置を用いて、CPUの動作を一時的に中断させ、作業者がCPUの動作を解析できる状態にすることをデバッガ装置の起動と呼ぶ。
CPUは、上述の「ブレーク命令」を複数種類備えており、それらのうち、特定のものを実行すると、デバッガ装置の起動を行う。よって、一般的にデバッガ装置を使ってデバッグ作業を行う場合、作業者が手動でCPUを強制的に停止させ、解析したいプログラムの解析したい箇所の命令をブレーク命令に書き換えた後、CPUの実行を再開させる。CPUがそのブレーク命令を実行するとデバッガはその実行を検知してCPUを停止させ、作業者にデバッグ作業の開始を促す。これにより、作業者はブレーク命令を設定した箇所の周辺をCPUが実行する際の挙動を詳しく解析することが可能になる。
CPUは、上述の「ブレーク命令」を複数種類備えており、それらのうち、特定のものを実行すると、デバッガ装置の起動を行う。よって、一般的にデバッガ装置を使ってデバッグ作業を行う場合、作業者が手動でCPUを強制的に停止させ、解析したいプログラムの解析したい箇所の命令をブレーク命令に書き換えた後、CPUの実行を再開させる。CPUがそのブレーク命令を実行するとデバッガはその実行を検知してCPUを停止させ、作業者にデバッグ作業の開始を促す。これにより、作業者はブレーク命令を設定した箇所の周辺をCPUが実行する際の挙動を詳しく解析することが可能になる。
また、前述の例外処理プログラムの内部処理にて、ブレーク命令を実行することで、例えば、「除算を実行しようとしたら除数が0だった」などの不正な処理による例外が発生した場合も、同様にデバッガ装置の起動を行い、不正な処理の発生原因を調査するといったデバッグ作業を行うことができる。このように、例外処理プログラムの内部処理にてデバッガ装置の起動を行う場合は、特定のブレーク命令でデバッガ装置の起動を行うのではなく、例外処理プログラムの内部処理にてブレーク命令を実行すると、デバッガ装置の起動を行うようにしているものもある。
仮想記憶技術を用いたマルチタスクシステムにおいては、複数のタスクで物理アドレス空間を分割し、個々のタスクについては実行中のアドレスを含むページなど一部のページのみが物理メモリ上に存在している。
つまり、デバッガ装置を起動してデバッグ作業を開始した際に、実行中だったタスクのプログラムは、その全てが物理メモリ上に存在していない場合がある。一部のページのみが物理メモリ上に存在している状態でデバッグ作業を行うと、物理アドレス空間に存在していないページにアクセスした場合に、作業者が予期しないタイミングでページインが発生する。このページインにより、コンピュータのハードウェアの状態がデバッガを起動した際の状態から変化してしまい、デバッグ作業に支障をきたす虞がある。
デバッグ作業時には、デバッグ作業のために、あるいはデバッグ作業が可能なように一時的に通常の処理の流れの中に挿入される修正処理を用いる場合がある。この修正処理を行うための修正処理プログラムを書き込む領域は、新規に用意する必要があるが、この際に任意の領域を使用すると、前述のようにデバッグ作業時のハードウェア状態が変化してしまう虞がある。
つまり、デバッガ装置を起動してデバッグ作業を開始した際に、実行中だったタスクのプログラムは、その全てが物理メモリ上に存在していない場合がある。一部のページのみが物理メモリ上に存在している状態でデバッグ作業を行うと、物理アドレス空間に存在していないページにアクセスした場合に、作業者が予期しないタイミングでページインが発生する。このページインにより、コンピュータのハードウェアの状態がデバッガを起動した際の状態から変化してしまい、デバッグ作業に支障をきたす虞がある。
デバッグ作業時には、デバッグ作業のために、あるいはデバッグ作業が可能なように一時的に通常の処理の流れの中に挿入される修正処理を用いる場合がある。この修正処理を行うための修正処理プログラムを書き込む領域は、新規に用意する必要があるが、この際に任意の領域を使用すると、前述のようにデバッグ作業時のハードウェア状態が変化してしまう虞がある。
このような問題に対処するため、従来は次の方法を取っているものがある(例えば、特許文献1の段落0009、0010を参照)。予め、プログラム内部に追加領域を用意しておき、何も処理を行わないノーオペレーション命令で満たしておく。通常の実行時には、その追加領域が呼出されることは無いが、デバッグ作業時には必要な修正処理プログラムを追加領域に書き込んだ後、その領域上の修正処理プログラムを一時的に呼出して、修正処理を実行する。
特開平5−341981号公報
しかしながら、特許文献1に示す方法では、仮想記憶技術を用いたコンピュータ装置においてデバッグ作業を行う際に、追加領域に書き込まれた修正処理プログラムを呼び出して修正処理を実行すると、追加領域が物理メモリ上に存在しているとは限らないため、修正処理を実行したときにページイン処理が発生するなど、コンピュータ装置のハードウェア状況が変化してしまい、デバッグ作業に支障をきたすことがあるという問題がある。
本発明は、このような事情に鑑みてなされたもので、その目的は、デバッグ作業時に修正処理を実行させても、デバッグ作業に支障をきたさないデバッグ方法、デバッガ装置およびプログラムを提供することにある。
この発明は上述した課題を解決するためになされたもので、本発明のデバッグ方法は、仮想記憶技術による複数のアドレス空間を介してメモリにアクセスするコンピュータ装置と、前記コンピュータ装置に用いるデバッグ装置とを備えるデバッグシステムにおけるデバッグ方法において、前記コンピュータ装置が、例外事象が発生した際に行う例外処理の最後に停止し、前記デバッグ装置を起動させる第1の過程と、前記デバッグ装置が、前記第1の過程にて起動されると、前記例外事象を発生した命令が記憶されているのと同じアドレス空間に、前記コンピュータ装置を修正処理部として機能させる修正処理プログラムを配置する第2の過程とを備えることを特徴とする。
また、本発明のデバッグ方法は、上述のデバッグ方法であって、前記コンピュータ装置は、前記仮想アドレス空間を介してアクセスする領域の記憶内容が補助記憶装置に退避されているときは、該退避されている記憶内容を補助記憶装置から読み出して主記憶装置に書き込むページインを行い、前記過程において前記修正処理プログラムを配置する領域は、前記ページインが発生しない領域であることを特徴とする。
また、本発明のデバッグ方法は、前記修正処理プログラムを配置する、前記ページインが発生しない領域は、前記例外事象を発生した命令を含むタスクのスタックであることを特徴とする。
また、本発明のプログラムは、仮想記憶技術による複数のアドレス空間を介してメモリにアクセスするコンピュータ装置に用いるデバッグ装置のコンピュータを、前記コンピュータ装置が例外事象を発生した際に、前記例外事象を発生した命令が記憶されているのと同じアドレス空間に、前記コンピュータ装置を修正処理部として機能させる修正処理プログラムを配置するプログラム転送部として機能させる。
この発明によれば、例外事象が発生した際に、前記例外事象を発生した命令が記憶されているのと同じ仮想アドレス空間に、当該コンピュータ装置を修正処理部として機能させるプログラムを配置するので、デバッグ作業時に修正処理を実行しても、デバッグ作業に支障をきたさない。
以下、図面を参照して、本発明の実施の形態について説明する。図1は、本実施形態におけるデバッグシステムの構成を示す概略ブロック図である。本実施形態におけるデバッグシステムは、コンピュータ装置100とデバッガ装置102とを備える。コンピュータ装置100は、中央演算装置(CPU)101、物理メモリ103、メモリ管理装置(MMU)104、補助記憶装置105を具備し、デバッガ装置102が接続される。中央演算装置101は、物理メモリ103から命令を表す情報を読み出して、該命令に従い動作するCPUである。物理メモリ103は、RAM(Random Access Memory)などの半導体記憶素子を用いた読み書き可能なメモリである。
メモリ管理装置104は、仮想アドレス空間106と物理アドレス空間111との対応付けを管理しており、中央演算装置101がメモリアクセスのために指定した仮想アドレスを物理アドレスに変換し、物理メモリ103の該当物理アドレスをメモリアクセスする。また、中央演算装置101がメモリアクセスのために指定した仮想アドレスに対応付けられた物理アドレスがないとき、すなわち該仮想アドレスに割り当てられた物理メモリ103の領域がないときは、メモリ管理装置104は、該当仮想アドレスを含むページのページインを中央演算装置101に要求する。このように、中央演算装置101は、メモリ管理装置104を介して、物理メモリ103の記憶領域を、物理アドレス空間111を用いて管理している。補助記憶装置105は、例えば、ハードディスク装置、フレキシブルディスク装置、またはフラッシュメモリ装置を用いた物理メモリ103より大容量で読み書き可能な記憶装置である。また、中央演算装置101は、補助記憶装置105の記憶領域を、スワップ領域110を用いて管理する。
デバッガ装置102は、コンピュータ装置100のデバッグに用いられるJTAG(Joint Test Action Group)エミュレータなどのオンチップエミュレータ、または、インサーキットエミュレータであり、作業者による中央演算装置101の強制停止を指示する操作を受けて、中央演算装置101を強制的に停止させることと、中央演算装置101がブレーク命令を実行すると、その実行を検知して中央演算装置101を停止させ、中央演算装置101の内部状態の表示、変更をすることができる。デバッガ装置102は、修正処理プログラム115を記憶する記憶部120およびプログラム転送部116を備える。
プログラム転送部116は、中央演算装置101が例外処理中のブレーク命令を実行した際に、すなわち例外事象が発生した際に、例外事象が発生した命令が記憶されているのと同じアドレス空間に、修正処理プログラム115を配置する。好ましくは、プログラム転送部116は、修正処理プログラム115をページインが発生しない領域、特に本実施形態では、例外事象を発生した命令を含むタスクのスタックに配置する。なお、中央演算装置101のブレーク命令が複数種類あり、中央演算装置1010が、それら複数種類のブレーク命令のうちの特定の種類を実行した際にプログラム転送部116が動作するようにしてもよい。この場合、上述の特定の種類のブレーク命令を、例外処理のプログラムに記載しておく。
修正処理プログラム115は、コンピュータ装置100の中央演算装置101が実行可能なプログラムであり、コンピュータ装置100を修正処理部として機能させる。そして、この修正処理部が行う修正処理は、デバッグ作業時に、デバッグ作業の一部を行う場合、あるいはデバッグ作業を実施可能なように一時的に通常の処理の流れの中に挿入される処理であり、特定のタイミングでアクセスしなければならないハードウェアの操作や、ハードウェアの状態を表す情報の取得を行う。また、修正処理プログラム115は、多くのデータを扱わなければならない場合などにも用いられる。なお、デバッガ装置102がインサーキットエミュレータの場合は、デバッガ装置102が中央演算装置101を兼ねており、中央演算装置101を取り外して、中央演算装置101の代りにデバッガ装置102をコンピュータ装置100の物理メモリ103、メモリ管理装置104、補助記憶装置105に接続する
中央演算装置101上で動作するプログラムは、仮想アドレス空間106で動作する。仮想アドレス空間106には、1個のカーネル空間107と複数のユーザ空間(図1ではユーザタスクAのユーザ空間108とユーザタスクBのユーザ空間109)が存在する。図1ではユーザ空間は2個のみだが、3個以上のユーザ空間が存在している場合も同様である。カーネル空間107には、タスク切替えプログラム112、ページインプログラム113、例外処理プログラム114が存在する。
タスク切替えプログラム112は、一定時間毎に、中央演算装置101にて動作するタスクを切り替えるプログラムであるが、この切り替えは、この態様に限定されない。ページインプログラム113は、メモリ管理装置104からのページインの要求を受けると中央演算装置101が動作させるプログラムであり、該プログラムを実行した中央演算装置101は、補助記憶装置105のスワップ領域110からページインするページの記憶内容を読出し、物理メモリ103に書き込む。中央演算装置101は、このページインプログラム113を実行することにより、ページイン処理部として動作する。例外処理プログラム114は、中央演算装置101において、例外分岐命令を実行する、あるいは「除算を実行しようとしたら除数が0だった」などの不正な処理による例外事象が発生した場合に実行されるプログラムである。例外処理プログラム114の詳細については、後述する。
図2は、あるユーザタスクA(以下、「タスクA」という)を実行中のユーザ空間108の状態例を示す図である。タスクAの仮想アドレス空間であるユーザ空間108は、その全てが物理メモリ103上に存在しておらず、ユーザ空間108で現在実行中のアドレスを含むページなど、一部分のページのみが物理メモリ103上に存在している。
ユーザ空間108で実行中のタスクAは、ページa201、ページb202、ページc203、ページd204、ページe205、ページf206、の6個のページからなる。
このうち、ページb202、ページc203、ページf206はそれぞれ物理メモリ103上に、ページb207、ページc208、ページf209として存在している。それ以外の、ページa201、ページd204、ページe205はそれぞれ補助記憶装置105上に、ページa210、ページd211、ページe212として存在している。
中央演算装置101がユーザ空間108のページb202、ページc203、ページf206にアクセスすると、メモリ管理装置104がそのアクセスのアドレスを変換するので、中央演算装置101は、それぞれに対応する物理メモリ103のページb207、ページc208、ページf209にアクセスすることになる。
ユーザ空間108で実行中のタスクAは、ページa201、ページb202、ページc203、ページd204、ページe205、ページf206、の6個のページからなる。
このうち、ページb202、ページc203、ページf206はそれぞれ物理メモリ103上に、ページb207、ページc208、ページf209として存在している。それ以外の、ページa201、ページd204、ページe205はそれぞれ補助記憶装置105上に、ページa210、ページd211、ページe212として存在している。
中央演算装置101がユーザ空間108のページb202、ページc203、ページf206にアクセスすると、メモリ管理装置104がそのアクセスのアドレスを変換するので、中央演算装置101は、それぞれに対応する物理メモリ103のページb207、ページc208、ページf209にアクセスすることになる。
図3は、タスクAの実行中に、仮想アドレスa0の命令コード301を実行した際に例外が発生した状態を表している。例外が発生すると、中央演算装置101は実行中のタスクAを直ちに中断し、タスク切替えプログラム112によってカーネル空間107で動作するカーネルタスクに切替え、例外処理プログラム114を実行させる。
このとき、中央演算装置101は、例外を発生した命令コード301の仮想アドレスa0をタスクAの仮想アドレス空間であるユーザ空間108にあるスタックにPush操作で格納する。このスタックはスタックポインタ302が指示している。Push操作で格納した結果、ここでは、スタックポインタ302が指示するアドレス303に仮想アドレスa0が格納される。併せて、タスク切替えプログラム112により中央演算装置101は、カーネルタスクからタスクAへ切替える以外の、他のユーザタスクへの切り替えを停止する。
このとき、中央演算装置101は、例外を発生した命令コード301の仮想アドレスa0をタスクAの仮想アドレス空間であるユーザ空間108にあるスタックにPush操作で格納する。このスタックはスタックポインタ302が指示している。Push操作で格納した結果、ここでは、スタックポインタ302が指示するアドレス303に仮想アドレスa0が格納される。併せて、タスク切替えプログラム112により中央演算装置101は、カーネルタスクからタスクAへ切替える以外の、他のユーザタスクへの切り替えを停止する。
その後、中央演算装置101は、例外処理プログラム114の末尾にあり、デバッガ装置102を起動させるブレーク命令を実行すると、停止し、デバッガ装置102を起動する(デバッグ作業可能な状態となる)。これにより、作業者がデバッガ装置102を用いて例外発生原因の調査などのデバッグ作業を行うことができるようになる。デバッグ作業の際にプログラムの修正処理が必要な場合は、作業者は修正処理プログラム115をデバッガ装置102の記憶部120に予め格納しておき、デバッガ装置102が起動したときに、デバッガ装置102のプログラム転送部116が動作するように予め設定しておく。なお、ここでは、デバッガ装置102が起動したときにプログラム転送部116が動作するとして説明したが、デバッガ装置102の起動後に、作業者の指示操作に従い、プログラム転送部116が動作するようにしてもよい。
図4は、デバッガ装置102のプログラム転送部116およびコンピュータ装置100の動作を説明するフローチャートである。デバッガ装置102のプログラム転送部116は、まずステップS401で、中央演算装置101のレジスタを参照し、例外が発生したタスクのスタック、すなわち例外が発生したタスクの仮想アドレス空間にあるスタックから仮想アドレスa0をPop操作で取得する。次に、ステップS402で、プログラム転送部116は、タスクAのユーザ空間108にあるスタックに、修正処理プログラム115を転送する。転送元の修正処理プログラム115はデバッガ装置102の記憶部120に格納されている。プログラム転送部116は、修正処理プログラム115自体をPush操作でスタックに格納することで、転送を行う。この転送の後にステップS403で、プログラム転送部116は、ステップS401にて取得した仮想アドレスa0を、スタックにPush操作で格納する。
図5(a)〜(c)は、上述のステップS402の修正処理プログラム115を転送する際の、スタックの状態変化を示したものである。図5(a)は、プログラム転送部116が動作を開始した時点でのスタックの状態を表している。ここで、タスクAはページf206にスタックを設定している。よってスタックポインタ504は、ページf206内の仮想アドレス505を指示しており、命令コード301を実行した際に、命令コード301がある仮想アドレスa0の値がスタックに格納されている。
図5(b)は、ステップS401の処理を実行した時点でのスタックの状態を表している。命令コード301がある仮想アドレスa0の値がスタックから取り出され、スタックポインタ506が指示すアドレスもPop操作により仮想アドレスa0を取り出した分だけ変化している。
図5(b)は、ステップS401の処理を実行した時点でのスタックの状態を表している。命令コード301がある仮想アドレスa0の値がスタックから取り出され、スタックポインタ506が指示すアドレスもPop操作により仮想アドレスa0を取り出した分だけ変化している。
図5(c)は、ステップS403の処理を実行した時点でのスタックの状態を表している。ステップS402の処理により、カーネル空間107上に格納されている修正処理プログラム115は、スタックに格納され、修正処理プログラム509となる。そしてステップS403の処理により、取得した命令コード301の仮想アドレスa0が、仮想アドレス508に格納されている。これらの処理に伴い、スタックポインタ507が指示するアドレスは仮想アドレス508に変化している。
図4に戻り、ステップS403の次にステップS404で、中央演算装置101は、動作を再開し、タスクAのユーザ空間108にある修正処理プログラム509(図5(c))の処理開始アドレスへ分岐を行う。処理開始アドレスは、スタックの位置を示すスタックポインタ507が指示するアドレスから求める。この分岐は、カーネル空間107からタスクAのユーザ空間108へ、処理が移行するものである。よって、中央演算装置101は、タスク切替えプログラム112によってカーネルタスクからタスクAに切替をおこなう。その後、タスクAのユーザ空間108にある修正処理プログラム509を実行する。
修正処理プログラム509の最後には、「スタックポインタを指定サイズだけずらした後、サブルーチンから復帰する命令」(以下、「リターン命令」という)が記述されており、中央演算装置101はこのリターン命令を実行する。このリターン命令に指定する、スタックポインタをずらすサイズは、修正処理プログラム509のサイズを元に設定する。すなわち、このリターン命令を実行後に、スタックにPush操作で格納されていた修正処理プログラム509が、スタックから全て取り除かれるようなサイズを予め設定しておく。このリターン命令として、例えばCPU(中央演算装置101)がインテル(登録商標)社のIA32の場合は、「RET命令」を用いることが出来る。具体的には、サブルーチンから復帰するアドレス(仮想アドレスa0)をPop操作で取り出した後、Pop操作と同じ方向にスタックポインタをずらすサイズを、RET命令のオペランド(引数)に指定する。なお、中央演算装置101が、他のCPUであっても(例えばMIPS(登録商標)であれば「JALR命令」を用いて)同様の処理を行うことが出来る。
図6は、リターン命令702を実行する際の、スタック上の状態を表す。図6(a)のユーザ空間503は、リターン命令702の実行前のユーザ空間108の状態であり、図6(b)のユーザ空間701は、リターン命令702の実行後のユーザ空間108の状態である。中央演算装置101は、リターン命令702を実行すると、まずスタックポインタ507が指示する仮想アドレス508からアドレスa0を取出す。続けて、中央演算装置101は、リターン命令702に指定した、スタックポインタをずらすサイズに基づき、スタックポインタの指示するアドレスをスタックポインタ703の位置まで移動する。
更に、中央演算装置101は、このリターン命令702を実行すると、スタックにPush操作で格納されていた仮想アドレスa0に、処理が移行する。その仮想アドレスa0は、先に例外を発生した命令コード301のアドレスである。よって中央演算装置101は、命令コード301の実行を再開する。
このように、デバッガ装置102を起動させる例外事象が発生したときに、例外事象が発生した命令が記憶されているのと同じ仮想アドレス空間、すなわち例外事象が発生したときに実行中のタスクの仮想アドレス空間であるスタックに、修正処理用プログラムを配置して実行することで、修正処理用プログラムの実行時にページインが発生しないようにし、デバッグ作業時に修正処理を実行しても、デバッグ作業に支障をきたさないようにすることができる。
ここで、ページインが発生しないのは、図3の説明で述べたように、このスタック領域には、例外が発生した際にPush操作で書き込みが行われており、既に物理メモリが割り当てられているためである。すなわち、本発明では、デバッガ装置102のプログラム転送部116が、コンピュータ装置100のアドレス空間のうち、ページインが発生しない領域に、記憶部120から読み出した修正処理用プログラムを配置して実行することで、デバッグ作業に支障をきたさないようにしている。
なお、デバッガ装置102には、周辺機器として入力装置、表示装置等(いずれも図示せず)が接続されるものとする。ここで、入力装置とはキーボード、マウス等の入力デバイスのことをいう。表示装置とはCRT(Cathode Ray Tube)や液晶表示装置等のことをいう。
また、本実施形態では、本発明をコンピュータ装置100に適用する例を挙げて説明したが、携帯電話、テレビ受像装置、テレビ録画装置といった家電製品など、コンピュータを具備するその他の装置に適用してもよい。
また、本実施形態では、本発明をコンピュータ装置100に適用する例を挙げて説明したが、携帯電話、テレビ受像装置、テレビ録画装置といった家電製品など、コンピュータを具備するその他の装置に適用してもよい。
なお、図1におけるタスク切替えプログラム112、ページインプログラム113、例外処理プログラム114、修正処理プログラム115各々を中央演算装置101が実行することにより行われる処理は、専用のハードウェアにより実現されるものであってもよい。
また、本実施形態において、中央演算装置101が、例えば、周辺機器からの割り込みなどの不正な処理以外の例外が発生したときにも、例外処理プログラム114を実行するようになっている場合は、例外処理プログラム114を実行することにより中央演算装置101が、例外の発生要因がデバッガ装置102を起動すべき発生要因であるか否かを判定し、起動すべき発生要因のときのみ、本実施形態における例外処理プログラム114の処理を行うようにしてもよい。
また、本実施形態において、デバッガ装置102を起動するのは、不正な処理が起きた場合としたが、プログラムの特定の箇所でデバッガ装置102を起動させたいときには、該当箇所にソフトウェア割込み命令を書いておき、該ソフトウェア割込み命令を実行した中央演算装置101が、例外処理プログラム114を実行するようにしておいてもよい。
また、本実施形態において、デバッガ装置102を起動するのは、不正な処理が起きた場合としたが、プログラムの特定の箇所でデバッガ装置102を起動させたいときには、該当箇所にソフトウェア割込み命令を書いておき、該ソフトウェア割込み命令を実行した中央演算装置101が、例外処理プログラム114を実行するようにしておいてもよい。
以上、この発明の実施形態を図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計変更等も含まれる。
本発明は、携帯電話、テレビ受像装置、テレビ録画装置などのコンピュータ装置を備えた家電製品のデバッガ装置に用いて好適であるが、これらに限らない。
100…コンピュータ装置 101…中央演算装置 102…デバッガ装置 103…物理メモリ 104…メモリ管理装置 105…補助記憶装置 106…仮想アドレス空間 107…カーネル空間 108…ユーザ空間(タスクA) 109…ユーザ空間(タスクB) 110…スワップ領域 111…物理アドレス空間 112…タスク切替えプログラム 113…ページインプログラム 114…例外処理プログラム 115…修正処理プログラム 116…プログラム転送部
Claims (5)
- 仮想記憶技術による複数のアドレス空間を介してメモリにアクセスするコンピュータ装置と、前記コンピュータ装置に用いるデバッグ装置とを備えるデバッグシステムにおけるデバッグ方法において、
前記コンピュータ装置が、例外事象が発生した際に行う例外処理の最後に停止し、前記デバッグ装置を起動させる第1の過程と、
前記デバッグ装置が、前記第1の過程にて起動されると、前記例外事象を発生した命令が記憶されているのと同じアドレス空間に、前記コンピュータ装置を修正処理部として機能させる修正処理プログラムを配置する第2の過程と
を備えることを特徴とするデバッグ方法。 - 前記コンピュータ装置は、前記仮想アドレス空間を介してアクセスする領域の記憶内容が補助記憶装置に退避されているときは、該退避されている記憶内容を補助記憶装置から読み出して主記憶装置に書き込むページインを行い、
前記過程において前記修正処理プログラムを配置する領域は、前記ページインが発生しない領域であること
を特徴とする請求項1に記載のデバッグ方法。 - 前記修正処理プログラムを配置する、前記ページインが発生しない領域は、前記例外事象を発生した命令を含むタスクのスタックであることを特徴とする請求項2に記載のデバッグ方法。
- 仮想記憶技術による複数のアドレス空間を介してメモリにアクセスするコンピュータ装置に用いるデバッガ装置であって、
前記コンピュータ装置が例外事象を発生した際に、前記例外事象を発生した命令が記憶されているのと同じアドレス空間に、前記コンピュータ装置を修正処理部として機能させる修正処理プログラムを配置するプログラム転送部
を備えることを特徴とするデバッガ装置。 - 仮想記憶技術による複数のアドレス空間を介してメモリにアクセスするコンピュータ装置に用いるデバッグ装置のコンピュータを
前記コンピュータ装置が例外事象を発生した際に、前記例外事象を発生した命令が記憶されているのと同じアドレス空間に、前記コンピュータ装置を修正処理部として機能させる修正処理プログラムを配置するプログラム転送部
として機能させるプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008224017A JP2010061234A (ja) | 2008-09-01 | 2008-09-01 | デバッガ装置、デバッグ方法およびプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008224017A JP2010061234A (ja) | 2008-09-01 | 2008-09-01 | デバッガ装置、デバッグ方法およびプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2010061234A true JP2010061234A (ja) | 2010-03-18 |
Family
ID=42187985
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008224017A Pending JP2010061234A (ja) | 2008-09-01 | 2008-09-01 | デバッガ装置、デバッグ方法およびプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2010061234A (ja) |
-
2008
- 2008-09-01 JP JP2008224017A patent/JP2010061234A/ja active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7000225B2 (en) | Method for inserting global breakpoints | |
US7950001B2 (en) | Method and apparatus for instrumentation in a multiprocessing environment | |
US8856742B2 (en) | Distributed debugging | |
EP2548115B1 (en) | Apparatus and method for handling exception events | |
US7774636B2 (en) | Method and system for kernel panic recovery | |
US8245002B2 (en) | Call stack protection | |
EP1626338B1 (en) | System and method for providing exceptional flow control in protected code through watchpoints | |
US8453121B2 (en) | Managing the tracing of the execution of a computer program | |
US7523446B2 (en) | User-space return probes | |
EP1369787A2 (en) | Processor device and information processing device, compiling device, and compiling method using said processor device | |
US20120236010A1 (en) | Page Fault Handling Mechanism | |
GB2388447A (en) | Performing a data access from low-level code | |
US20100205477A1 (en) | Memory Handling Techniques To Facilitate Debugging | |
US8612720B2 (en) | System and method for implementing data breakpoints | |
US20040122834A1 (en) | Apparatus and method for switching mode in a computer system | |
JP3764405B2 (ja) | デバッグ装置及びデバッグ方法 | |
US6895583B1 (en) | Task control block for a computing environment | |
WO2007002889A2 (en) | Debugging using watchpoints | |
US7934073B2 (en) | Method for performing jump and translation state change at the same time | |
JP2009175960A (ja) | 仮想マルチプロセッサシステム | |
US7890740B2 (en) | Processor comprising a first and a second mode of operation and method of operating the same | |
JP2010061234A (ja) | デバッガ装置、デバッグ方法およびプログラム | |
JP2008310487A (ja) | プログラム、例外処理方法、コンピュータ、携帯電話およびテレビ受像装置 | |
US20080072009A1 (en) | Apparatus and method for handling interrupt disabled section and page pinning apparatus and method | |
JP2001142737A (ja) | メモリ管理装置 |