掲示板一覧   -   トピック一覧
   Enterprise Architect 全般
     マルチスレッドアプリケーションでのシーケンス図の作成


スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
tkouno
投稿日時: 2006-6-29 14:48
EA Administrator
投稿: 3939

マルチスレッドアプリケーションでのシーケンス図の作成

6月27日に頂きましたご質問です。

○ご質問

メインスレッドから別スレッドを起動するような場合に、起動される
スレッドのブレークポイントで停止させることはできますか?

○回答

まず、新しく生成されるスレッドだけにブレークポイントを
設定しても、ご指摘どおりその位置では止まりませんでした。

この原因は不明ですが、Enterprise Architectのデバッガで
スレッドの生成を認識していないなどの原因があると思われます。

こちらで見つけた対応策としましては、該当するスレッドを作成する部分で
ブレークポイントを設定し、デバッグサブウインドウの「スタック」タブに
おきまして新規に生成されたスレッドが表示されるまでステップ実行をすると
別スレッド内に設定したブレークポイントで停止しました。

未登録ゲスト
投稿日時: 2009-9-16 17:11

Re: マルチスレッドアプリケーションでのシーケンス図の作成

引用:

この原因は不明ですが、Enterprise Architectのデバッガで
スレッドの生成を認識していないなどの原因があると思われます。

こちらで見つけた対応策としましては、該当するスレッドを作成する部分で
ブレークポイントを設定し、デバッグサブウインドウの「スタック」タブに
おきまして新規に生成されたスレッドが表示されるまでステップ実行をすると
別スレッド内に設定したブレークポイントで停止しました。


この問題は対応した、又は対応予定があるのでしょうか?

動作環境は下記の通りです。
・EA 7.5.847
・WindowsXP/SP2
・Java SE1.6.0_15

Javaのアプリケーションにおいて、ライブラリのスレッドプールを
利用してマルチスレッド化しているため、「スレッドを作成する
部分でブレークポイントを設定」出来ない状態です。
tkouno
投稿日時: 2009-9-16 17:21
EA Administrator
投稿: 3939

Re: マルチスレッドアプリケーションでのシーケンス図の作成

ご指摘の件は、バージョン7.5では次の2つの方法を提供しています。

状況によってそれぞれの方法がお役に立てるかどうかは
わかりませんが、ぜひお試し下さい。

1. 指定したスレッドを自動記録する方法

この方法は、Enterprise Architectが該当スレッドを
認識した状態でデバッグを停止できる場合に活用できます。

詳細はヘルプファイルの「スレッドの自動記録」をご覧下さい。

2. マーカーを利用して記録する方法

この方法はソースコードにマーカーを配置して
指定した区間の記録ができます。実行前に指定できますが
該当箇所について、複数スレッドがある場合には
それぞれのスレッドについて記録が行われます。


詳細はヘルプファイルの「マーカーを利用した記録」をご覧下さい。
(このページの後半の画像が表示されていないことに今気づきました。
次のビルドまでに修正します。申し訳ございません。)


上記2つの方法について、ご確認のほどよろしくお願いします。
未登録ゲスト
投稿日時: 2009-9-17 9:04

Re: マルチスレッドアプリケーションでのシーケンス図の作成

引用:

1. 指定したスレッドを自動記録する方法
2. マーカーを利用して記録する方法


情報をありがとうございます。
上記の方法を試したところ、目的のシーケンス図を
書けることがわかりました。

但し、動作的には不安定で、こちらのの環境では
ブレークポイントで止まらなかったり、対象ソフトが
ハングアップすることが多いです。もう少し安定して
動いてくれると嬉しいなぁというのが感想です。
tkouno
投稿日時: 2009-9-17 9:15
EA Administrator
投稿: 3939

Re: マルチスレッドアプリケーションでのシーケンス図の作成

とりあえずご希望の結果になったとのことで、よかったです。

ご指摘の「不安定」については、現時点ではご指摘のような現象は
ご報告がありません。おそらく、対象のプログラムの内容(
スレッドの作成方法や処理の内容)に依存する問題と思われます。

ただ、対象プログラムそのものを
提供していただくことはたぶん不可能ではないかと思いますので
可能であれば以下の情報をお寄せください。


・「不安定」について、同じ対象・同じデバッグ設定で実行した
 場合でも、状況によって成功・失敗(ハングアップ等)が
 発生するのでしょうか?
 それとも、ある条件では成功し、条件を変えると
 (ブレークポイントの位置を変えると)失敗するのでしょうか?

・ブレークポイントで止まらないという問題について、
 特定の場所では必ず止まらない、という状況でしょうか?
 それとも、条件を変えず実行して、同じ場所でも止まる場合と
 止まらない場合がある、ということでしょうか?

・この問題は、提示した2つの方法のうち、どちらで発生しますか?
 両方で発生しますか?




なお、既存のプロセスに対してアタッチした場合に不安定になるという
既知の問題もあり、こちらは改善できるよう対策を考えています。
(ただ、動作中のプロセスにアタッチするという行為自体が
予測不可能な面もあり、苦労しています。)

未登録ゲスト
投稿日時: 2009-9-17 10:05

Re: マルチスレッドアプリケーションでのシーケンス図の作成

素早いレスポンスをありがとうございます。

引用:

ご指摘の「不安定」については、現時点ではご指摘のような現象は
ご報告がありません。おそらく、対象のプログラムの内容(
スレッドの作成方法や処理の内容)に依存する問題と思われます。

そうですか。こちらの環境の問題かも知れません。
ソフトはJava SE6のSwingWorkerを使っており、GUIとは
別のスレッドで呼び出される箇所にブレイクポイントを設定しています。
スレッド作成は全てフレームワーク側に任せているので、自分では
明示的に生成を行っていないです。
http://java.sun.com/javase/ja/6/docs/ja/api/javax/swing/SwingWorker.html

引用:

・「不安定」について、同じ対象・同じデバッグ設定で実行した
 場合でも、状況によって成功・失敗(ハングアップ等)が
 発生するのでしょうか?
 それとも、ある条件では成功し、条件を変えると
 (ブレークポイントの位置を変えると)失敗するのでしょうか?

前者です。条件を変えずに同じデバッグ起動を繰り返していました。

引用:

・ブレークポイントで止まらないという問題について、
 特定の場所では必ず止まらない、という状況でしょうか?
 それとも、条件を変えず実行して、同じ場所でも止まる場合と
 止まらない場合がある、ということでしょうか?

後者です。条件を変えずに同じデバッグ起動を繰り返していました。

引用:

・この問題は、提示した2つの方法のうち、どちらで発生しますか?
 両方で発生しますか?

両方で発生しました。
もう少し問題発生の規則性が分かれば良いのですけど、現状言えるのは
同じ条件でデバッグしても、問題が発生する場合と発生しない場合がある
と言うことです。(問題発生の場合の方がずっと多い気がします)
tkouno
投稿日時: 2009-9-17 10:16
EA Administrator
投稿: 3939

Re: マルチスレッドアプリケーションでのシーケンス図の作成

ご返信ありがとうございました。

頂きました内容で、状況は把握できました
また、SwingWorkerを利用されているとのことで
こちらでも問題発生環境の作成が可能かもしれません。

まずは類似のスレッドが起動する環境を作成し、問題が
起きるかどうかを調査いたします。

引き続きご迷惑をおかけし申し訳ございません。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ