JPH06161817A - スレッドオンラインデバッグ装置 - Google Patents

スレッドオンラインデバッグ装置

Info

Publication number
JPH06161817A
JPH06161817A JP4308852A JP30885292A JPH06161817A JP H06161817 A JPH06161817 A JP H06161817A JP 4308852 A JP4308852 A JP 4308852A JP 30885292 A JP30885292 A JP 30885292A JP H06161817 A JPH06161817 A JP H06161817A
Authority
JP
Japan
Prior art keywords
thread
debug
debugged
breakpoint
command
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
Application number
JP4308852A
Other languages
English (en)
Inventor
Kazuya Kuriyama
和也 栗山
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yokogawa Electric Corp
Original Assignee
Yokogawa Electric Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Yokogawa Electric Corp filed Critical Yokogawa Electric Corp
Priority to JP4308852A priority Critical patent/JPH06161817A/ja
Publication of JPH06161817A publication Critical patent/JPH06161817A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【目的】スレッドを複数動作させながら一部のスレッド
をオンラインデバッグすることのできるスレッドオンラ
インデバッグ装置を実現する。 【構成】 シングルステップやブレイクポイントなどの
ターゲットマイクロプロセッサユニットに依存した実行
制御とデータアクセス機能を有するアセンブラレベルの
リモート・デバッグ・モニタと、通信で前記リモートデ
バッグモニタに接続して用いられるリモート・ソースコ
ード・デバッガを備えたオンラインデバッグ装置であっ
て、前記リモート・デバッグ・モニタは、スレッドとし
て被デバッグプロセス内で動作すると同時に被デバッグ
プロセスとは独立したプロセスとして扱われ、ブレイク
ポイントヒットの不正命令シグナルを非同期シグナルハ
ンドラを介して受信するように構成する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、デバッグ装置に関し、
詳しくはUNIX(登録商標)の1ユーザプロセス内で
更に並列実行可能な単位であるスレッドをユーザプロセ
スの動作中に個別にデバッグすることを可能にするデバ
ッグ装置に関するものである。
【0002】
【従来の技術】UNIXにおいてはsdbと呼ばれるプ
ロセスデバッガがあり、次のような手法で実現されてい
る。なお、図8はsdbのデバッグ形態を示す図であ
り、図9はsdbの基本処理の流れを示した図(プログ
ラムリスト)である。
【0003】子プロセスの起動 sdbはforkコマンドを用いて被デバッグプロセスを子
プロセスとして生成する。この時sdbは親プロセスに
なる。次に子プロセスの仮コードへ制御が一旦移り(ま
だ子プロセスの実体はない)、ptrace(0,0,0,0) を実行
して自分はデバッグ対象であることをUNIXに知らせ
る。UNIXは被デバッグプロセスの管理テーブルにト
レースフラグをセットする。最後に、被デバッグプロセ
スの実体がロードされ(execコマンド実行)、再びsd
bに制御が移る。sdbは子プロセス待ち(wait)が解
除され、ユーザのコマンド待ちに入る(read)。
【0004】子プロセスの実行制御とデータアクセス 子プロセスの実行制御とデータアクセスのコマンドはす
べてUNIXのptraceシステムコールをブレイクダウン
して実行する。ブレイクポイントも同様にptraceを用い
て、プロセッサ不正命令またはブレイク命令を子プロセ
スの論理空間に書き込むことにより実現している。そし
て実行コマンドにより子プロセスを起動し、sdbはブ
レイクポイントのヒット待ちに入る(wait)。
【0005】ブレイクポイントヒット通知 ブレイクポイントのヒットは、親プロセスであるsdb
に通知される。waitしていたデバッガはwakeup(起床)
され、ブレークポイントを解除して再びコマンド入力待
ちに入る。
【0006】
【発明が解決しようとする課題】ところで、UNIXの
プロセスデバッガでは、ブレイクポイントのヒットで被
デバッグプロセスが停止してしまうため、被デバッグプ
ロセス内にある並行実行可能な単位であるスレッドを複
数動作させながら一部のスレッドをオンラインデバッグ
することは不可能であるという問題がある。これを可能
とするためには以下のような課題を解決する必要があ
る。
【0007】(1) スレッドデバッガ構成 sdbの機能の内ブレイクポイント、シングルステップ
や継続実行などの実行制御に係わるコマンド処理部分
は、基本的に被デバッグプロセス内に存在する必要があ
る。 (2) スレッドデバッグ機能 ユーザスレッドのオンラインデバッグを可能にするに
は、ブレイクポイントセット、シングルステップなどの
デバッグ機能と、継続実行、停止、メッセージ(コマン
ドとして扱うもの)の非同期受信などUNIXのスレッ
ド管理機能が必要である。ただし、UNIXのプロセス
デバッグ機能を使用する場合、ブレイクヒットやシング
ルステップでプロセス全体が停止せず、当該スレッドの
み停止させる工夫が必要である。 (3) 非同期コマンド処理の方法 プロセス内部のスレッドモニタのデバッグコマンド受信
待ちにかかわらず、被デバッグプロセスは停止せず実行
を継続できなければならない。
【0008】本発明の目的は、上記のような課題を解決
し、スレッドを複数動作させながら一部のスレッドをオ
ンラインデバッグすることのできるスレッドオンライン
デバッグ装置を提供することにある。
【0009】
【課題を解決するための手段】このような目的を達成す
るために本発明では、シングルステップやブレイクポイ
ントなどのターゲットマイクロプロセッサユニットに依
存した実行制御とデータアクセス機能を有するアセンブ
ラレベルのリモート・デバッグ・モニタと、通信で前記
リモートデバッグモニタに接続して用いられるリモート
・ソースコード・デバッガを備えたオンラインデバッグ
装置であって、前記リモート・デバッグ・モニタは、ス
レッドとして被デバッグプロセス内で動作すると同時に
被デバッグプロセスとは独立したプロセスとして扱わ
れ、ブレイクポイントヒットの不正命令シグナルを非同
期シグナルハンドラを介して受信するように構成したこ
とを特徴とする。
【0010】
【作用】C言語ソースコードデバッガを、コマンド処理
部、ソースコード表示部とシンボル操作部から成る部分
(rSDB)と、実行制御部とメモリアクセス部から成
る部分(rDBM)とに大別する。rSDBは常にワー
クステーション上で動作し通信でrDBMと接続して利
用される。rDBMはスレッドとして被デバッグプロセ
ス内で動作し、被デバッグプロセスとは独立したプロセ
スとして扱われる。ブレイクポイントヒットの不正命令
シグナルを被デバッグプロセスの不正命令シグナルハン
ドラが直接受信し、これをメッセージ機能を使用してr
DBMに通知するようにしている。スレッドブレイク機
能の実現にホストマシンの不正命令とUNIXの不正命
令シグナルを使用することはsdbと同様であるが、ブ
レイクポイントヒットの不正命令シグナルをUNIXか
ら受信するのはrSDBではなく被デバッグプロセス内
のrDBMが非同期シグナルハンドラを介して受信した
点が従来のものと異なる。
【0011】
【実施例】以下図面を用いて本発明を詳しく説明する。
まず、本発明を適用するシミュレーション開発環境につ
いて説明する。図1に示すシミュレーション開発環境に
おいて、10はシステム・プロセスであり、ターゲット
のソフトウェアシステムを模擬するプロセスで、非同期
シグナルハンドラ20、リモート・デバッグ・モニタ
(以下rDBMと略記)11、スレッド12より構成さ
れている。
【0012】30はソースコードとシンボルの管理や制
御を司どり同時使用が可能なリモート・ソースコード・
デバッガ(以下rSDBと略記)であり、rDBM11
と対になってC言語レベルデバッガと成り得るものであ
る。なお、複数のrSDBを用意することにより各種デ
バッグモードに効果的に対応することができる。40は
UNIXのOSであり、シグナルハンドラ20に必要な
シグナルを与える。
【0013】図2は図1に示すシステム・プロセスにお
いて用られるC言語ソースコードデバッガの概念的構成
図である。一般のC言語ソースコードデバッガは、基本
的にコマンド処理部、ソースコード表示部、シンボル操
作部、実行制御部、メモリアクセス部から構成されてい
る。特に、シンボル操作部はオブジェクト形式に依存
し、そして実行制御部はシングルステップやブレイクポ
イントなどマイクロプロセッサユニット(以下MPUと
略記する)に依存している。本発明では、これらを2つ
の独立した機能に分離し、汎用化している。
【0014】図2において、100はC言語レベルデバ
ッガであり、コマンド処理やソースコード表示、シンボ
ル操作等の機能を有するC言語レベルデバッグ支援環境
110と、コマンドの実行制御やメモリアクセス等の機
能を有するアセンブラデバッガ120より構成される。
そして両者は独立分離され、通信により信号の送受が可
能になっている。なお、図中の符号Pはそのプロセス
(例えばrSDB)がUNIXプロセスであることを表
わし、また符号P/TはそのプロセスがUNIXプロセ
スまたはリアルタイムタスクであることを表わす。
【0015】C言語レベルデバッグ支援環境110内の
rSDB30は、C言語レベルのデバッグを支援する部
分であり、常にワークステーション上で動作し通信で接
続されているrDBM11と対になって用いられる(1
つのrDBM11に対してN個のrSDBを接続でき
る)。rSDB30とrDBM11は、ネットワークイ
ンタフェース111,121を介して結合されている。
【0016】rDBM11はアセンブラレベルのデバッ
ガであり、シングルステップやブレイクポイントなどの
ターゲットマイクロプロセッサに依存した実行制御とデ
ータアクセス機能を分担する。このrDBM11はシス
テムプロセス10やターゲット上で動作する。そして、
複数のタスクを同時にデバッグすることができるマルチ
タスクデバッグ、複数のrSDBからのコマンドを同時
に処理することができるマルチrSDB対応、オンライ
ンあるいはオフラインの動作モードを有するマルチデバ
ッグモードなどの機能を有する。
【0017】本発明は、以上のような構成を基盤とし、
更にこれに次のようなスレッドデバッグ機構を付加した
ものである。 rDBM11をスレッドとして被デバッグプロセス内
で動作させる。この場合、従来のsdbは被デバッグ対
象を子プロセスとして扱うのに対して、rSDB30と
被デバッグプロセスの関係は親子の関係ではなく、独立
したプロセスとして扱う。 スレッドブレイク機能の実現にホストマシンの不正命
令とUNIXの不正命令シグナル(SIGILL)を使用する
ことはsdbと同様であるが、ブレイクポイントヒット
の不正命令シグナルをUNIXから受信するのは、rS
DB30ではなく被デバッグプロセス内のrSDB11
が非同期シグナルハンドラを介して受信する。本発明で
特に強調する点は、ブレイクポイントヒットの不正命令
シグナルを被デバッグプロセスの不正命令シグナルハン
ドラが直接受信し、これをメッセージ機能を使用してr
DBM11に通知するメカニズムである。この不正命令
シグナルは、非デバッグプロセスに対して非同期に発生
しrDBM11に通知されるので、rDBM以外のスレ
ッドの動作には影響しない。
【0018】上記のようなデバッガを用いてデバッグを
行う際の全体構成を図3に示す。図において、符号Pは
当該プロセスがUNIXプロセスであることを表わし、
符号Sは当該プロセスがスレッドであることを表わす。
200は被デバッグプロセスであり、ライブラリ20
1、非同期シグナルハンドラとしてのSIGILLハン
ドラ202とSIGIOハンドラ203、被デバッグス
レッドであるユーザスレッド204、そしてrDBM3
0より成る。SIGILLハンドラ202は、不正命令
実行時にrSDB30からのコマンド受信用非同期割込
みハンドラである。SIGIOハンドラ203は、rS
DB30からのコマンド受信用非同期割込みハンドラで
ある。
【0019】上記ライブラリ201は、スレッドデバッ
グ機能を実現するために以下のライブラリを備えてい
る。 スレッド管理ライブラリ UNIXが提供するカーネルインプリメントスレッド
(コルーチンライブラリではない)で、スレッドコンテ
キストスイッチはUNIXが行う。 メッセージ管理ライブラリ
【0020】次表はスレッド管理用およびスレッド間メ
ッセージに係るコマンドとその機能の一覧表である。
【0021】SIGIOハンドラ203からrDBM1
1に送信されるメッセージには、ブレイクポイントヒッ
トとrSDB30からのコマンドがあり、例えば次のよ
うな構造体で定義する。 #define unsigned char string; #define unsigned long UW; struct t_knlmsgp{ /* シグナルハンドラからのメッセージ */ string cmd[8]; /* * "BREAKHIT" - ブレイクヒット * "********" - RSDBからのコマンド * */ UW rsdb_sid; /* RSDB通信ソケット識別子 */ UW break_adr; /* ブレイクアドレス(32ビット) */ };
【0022】このような構成における各部の動作を次に
説明する。 (1) rDBM11の処理 図4にこの処理に係るプログラムのリストを示す。な
お、このプログラムは引数がなく返値もない関数であ
る。またこのリストは説明用であって完全なプログラム
リストではない。この処理においては、まずメッセージ
バッファの型が上記メッセージ構造体の型であるとし、
次にrSDB30との非同期通信ソケットの初期化、不
正命令(SIGILL)シグナル受信用ハンドラを定義し、コ
マンド受信用シグナルハンドラ(SIGIO )を定義する。
その後次のメッセージ待ちの処理に入る。メッセージ源
はrSDB30とシグナルハンドラである。メッセージ
を受けると、そのコマンドの種類によって次の3つの処
理に分かれる。
【0023】コマンドが、ブレークポイントのヒット
であった場合 意図したものか否かを判断し、ブレイクポイントであれ
ば以下の処理を継続し、そうでなければ例外処理を起動
し、再びメッセージ待ちへ戻る。ブレイクポイントであ
れば、ブレークポイントを解除する。そしてブレークポ
イントをブレークポイント管理テーブルから削除する。
続いて、ソケット識別子を用い、要求したrSDB30
にブレイクを通知する。そして再び上記メッセージ待ち
へ戻る。 コマンドが、ブレイクポイントセットであった場合 ブレイクポイントのデータをセーブする。続いて、不正
命令をセットし、ブレークポイント管理テーブルにブレ
ークポイントデータを登録する。次にソケット識別子を
用いて、要求元のrSDB30に結果を通知する。それ
が終了すると再び上記メッセージ待ちへ戻る。 コマンドが、その他のrSDBコマンドであった場合 各rSDBコマンド処理を行う。続いてソケット識別子
を用い、要求元のrSDBに結果を通知する。その後上
記メッセージ待ちへ移行する。
【0024】(2) 不正命令シグナル(SIGILL)ハ
ンドラの処理 図5に処理プログラムを示す。不正命令が実行されたと
きこのハンドラの処理(sigillhdr() )が実行される。
そしてrDBM11にブレイク情報が送信される。以下
処理の内容を説明する。メッセージバッファの型は前記
メッセージ構造体の型であるとし、メッセージバッファ
に"BREAKHIT"コマンドとブレイクアドレスをセットす
る。そしてメッセージバッファ内の情報をrDBM11
に送信する。ブレイクアドレスか否かはrDBM11が
判断する。
【0025】(3) コマンド受信シグナル(SIGIO)
ハンドラの処理 rSDB30からコマンドを受信すると図6に示される
コマンド受信シグナルハンドラ(sigiohdr())が実行さ
れ、rDBM11にコマンドを送信する。処理内容は次
の通りである。メッセージバッファが前記メッセージ構
造体型であるとし、メッセージバッファにrSDBコマ
ンドとrSDBソケット識別子をセットする。次に、r
DBM11にそれを送信する。
【0026】(4) ブレイクポイントのセットとヒットの
動作 図7を参照してその動作を順を追って説明する。なお、
項目番号a,b,c,...は図中の円囲みのa,b,
c,...に対応する。 (a) rSDB30からブレイクコマンドが送信される。 (b) システムプロセスのSIGIOハンドラ203が起
動し、ソケットから前記コマンドを読み取る。 (c) SIGIO203ハンドラからrDBM11にその
コマンドを送信する。rDBMのメッセージ受信待ちは
解除される。 (d) SIGIOハンドラを終了し、rDBM11へスレ
ッドを切り替える。rDBMはユーザスレッド204よ
り常に高い優先度である。 (e) rDBM11は前記ブレイクコマンドを識別する。
【0027】(f) rDBM11はrSDB30から得た
ブレイクポイントアドレスの内容を保存する。ブレイク
ポイントアドレスには直接MPU不正命令をセットす
る。そしてrDBMは再びコマンド受信待ちになる。 (g) rSDB30からrDBM11に実行継続コマンド
が送信される。上記(b) から(e) を順に実行し、被デバ
ッグスレッドを継続実行する。そしてrDBMは再びコ
マンド受信待ちとなる。 (h) 被デバッグスレッド(ユーザスレッド204)へス
レッドが切り替わる。 (i) ブレイクヒットし、SIGILLハンドラが起動さ
れる。 (j) SIGILLハンドラはバッファ(sigcontext構造
体)から不正命令実行アドレスを抽出する。 (k) rDBM11にブレイクヒットコマンドと不正命令
実行アドレスを送信する。
【0028】(l) SIGIOハンドラを終了し、rDB
M11へスレッドを切り替える。 (m) rDBM11は不正命令実行アドレスがブレイクポ
イントアドレスであるかどうか判定する。 (n) ブレイクポイントアドレスであればヒットしたスレ
ッドを強制停止し、ブレイクポイントアドレスでなけれ
ば例外処理を起動する。 (o) ブレイクポイントを修復しrDBM11は再びコマ
ンド受信待ちになる。 (p) 被デバッグスレッド204はrSDB30からの継
続実行コマンドにより実行を再開する。 以上のようにして容易にスレッドのみをオンラインデバ
ッグすることができる。
【0029】
【発明の効果】以上説明したように本発明によれば次の
ような効果がある。スレッドサービスの普及によってU
NIXプロセスを停止することなく部分的に特定のスレ
ッドのみをオンラインデバッグすることが要求される。
本発明によれば、スレッド管理機能やスレッド間メッセ
ージ機能を利用してオンラインスレッドデバッグを容易
に実現することができる。
【図面の簡単な説明】
【図1】本発明を実現するためのシミュレーション開発
環境の一例を示す構成図である。
【図2】C言語レベルデバッガの実施例構成図である。
【図3】本発明に係るスレッドオンラインデバッグ装置
の一実施例を示す構成図である。
【図4】rDBMの処理内容を説明するための図であ
る。
【図5】不正命令シグナルハンドラの処理内容を説明す
るための図である。
【図6】コマンド受信シグナルハンドラの処理内容を説
明するための図である。
【図7】ブレイクポイントセットおよびヒットの動作を
説明するための図である。
【図8】sdbのデバッグ形態を示す図である。
【図9】sdbの基本処理の流れを示した図である.
【符号の説明】
10 システムプロセス 11 rDBM 12 スレッド 20 非同期シグナルハンドラ 30 rSDB 40 UNIX 100 C言語レベルデバッガ 110 C言語レベルデバッグ支援環境 120 アセンブラレベルデバッガ 200 被デバッグプロセス 201 ライブラリ 202 SIGIOハンドラ 203 SIGILLハンドラ 204 被デバッグスレッド

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】アセンブラレベルのデバッガであって、シ
    ングルステップやブレイクポイントなどのターゲットマ
    イクロプロセッサユニットに依存した実行制御とデータ
    アクセス機能を有するリモート・デバッグ・モニタと、 C言語レベルのデバッグを支援する部分であり、通信で
    前記リモート・デバッグ・モニタに接続して用いられる
    リモート・ソースコード・デバッガを備えたオンライン
    デバッグ装置であって、 前記リモート・デバッグ・モニタは、スレッドとして被
    デバッグプロセス内で動作すると同時に被デバッグプロ
    セスとは独立したプロセスとして扱われ、ブレイクポイ
    ントヒットの不正命令シグナルを非同期シグナルハンド
    ラを介して受信するように構成したことを特徴とするス
    レッドオンラインデバッグ装置。
JP4308852A 1992-11-18 1992-11-18 スレッドオンラインデバッグ装置 Pending JPH06161817A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP4308852A JPH06161817A (ja) 1992-11-18 1992-11-18 スレッドオンラインデバッグ装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP4308852A JPH06161817A (ja) 1992-11-18 1992-11-18 スレッドオンラインデバッグ装置

Publications (1)

Publication Number Publication Date
JPH06161817A true JPH06161817A (ja) 1994-06-10

Family

ID=17986048

Family Applications (1)

Application Number Title Priority Date Filing Date
JP4308852A Pending JPH06161817A (ja) 1992-11-18 1992-11-18 スレッドオンラインデバッグ装置

Country Status (1)

Country Link
JP (1) JPH06161817A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012124162A1 (ja) * 2011-03-15 2012-09-20 オムロン株式会社 デバッグ装置
JP2013127782A (ja) * 2004-09-14 2013-06-27 Synopsys Inc マルチコアアーキテクチャーにおけるデバッグ

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013127782A (ja) * 2004-09-14 2013-06-27 Synopsys Inc マルチコアアーキテクチャーにおけるデバッグ
WO2012124162A1 (ja) * 2011-03-15 2012-09-20 オムロン株式会社 デバッグ装置
JP2012194632A (ja) * 2011-03-15 2012-10-11 Omron Corp デバッグ装置

Similar Documents

Publication Publication Date Title
US5630049A (en) Method and apparatus for testing software on a computer network
US5889988A (en) Debugger for debugging tasks in an operating system virtual device driver
US6988264B2 (en) Debugging multiple threads or processes
US10191835B2 (en) Multi-threaded debugger support
US5675800A (en) Method and apparatus for remotely booting a computer system
JP3339482B2 (ja) 分散デバッグ装置及びデバッグ方法並びに制御プログラムを記録した記録媒体
US7020871B2 (en) Breakpoint method for parallel hardware threads in multithreaded processor
US4819234A (en) Operating system debugger
US6718294B1 (en) System and method for synchronized control of system simulators with multiple processor cores
US5903728A (en) Plug-in control including an independent plug-in process
US6944850B2 (en) Hop method for stepping parallel hardware threads
US6658650B1 (en) Service entry point for use in debugging multi-job computer programs
US20100153786A1 (en) Processor, multiprocessor, and debugging method
KR20010006193A (ko) 소형의 트레이스 기록 기억장치를 포함하는 디버그 인터페이스
JP2007128132A (ja) スレッドデバッグ装置、スレッドデバッグ方法及びプログラム
US20040098639A1 (en) Debugging kernel-loadable modules and suspending and replacing functions in non-microkernel operating systems
EP0588473B1 (en) Method and apparatus for emulating the environment of a microprocessor
JP2000066904A (ja) マルチタスク制御方法及び記憶媒体
US5544307A (en) Microcomputer development support system operable with only background monitor and without cache replacement
JPH06161817A (ja) スレッドオンラインデバッグ装置
US7320044B1 (en) System, method, and computer program product for interrupt scheduling in processing communication
JP2713124B2 (ja) インサーキット・エミュレータ
JP2913991B2 (ja) リアルタイム・システム・デバッグ装置
JP2005122375A (ja) 動作試験装置および動作試験方法
JP2004094800A (ja) プログラムシミュレーション装置およびプログラムシミュレーション方法