掲示板一覧 - トピック一覧 Enterprise Architect 全般
DLLのデバッグ方法 |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
| 投稿者 | トピック |
|---|---|
| 名無し(未登録ゲスト) | 投稿日時: 2007-7-14 14:23 |
DLLのデバッグ方法DLLのデバッグをしたいのですが、ブレークポイントを設定すると
「!」マークになってしまい、設定ができません。 デバッグの際には、当然EXEから実行しています。 EXEのソースでは、ブレークポイントが設定できます。 アプリケーションの構成としては、 A.EXE、B.DLL、C.DLL・・・(DLLは20数個) と少し規模の大きいアプリケーションです。 #DLLの数はあまり関係ないとは思いますが。 開発環境はVC6+SP5で作成しています。 デバッグでは、PDBが必要ということでしたので、PDBも出力しています。 最終的には、シーケンス図を出力したいと考えております。 どなたか、デバッグ方法をご存じでしたら、ご教示お願い致します。 |
|
| tkouno | 投稿日時: 2007-7-17 10:13 |
EA Administrator ![]() ![]() 投稿: 3939 |
Re: DLLのデバッグ方法DLLのデバッグですが、DLL内のソースコードにブレークポイントを
設定するためには、タイミングが重要になります。 デバッグ開始はExeを実行することになるかと思いますので この時点ではDLLはEnterprise Architectに認識されていません。 そのため、DLLのソースにブレークポイントを配置しても この段階ですべてエラーになっていると思います。 確実に配置するには、対象のDLLが読み込まれていることが 確実な段階で、ブレークポイントを追加しなければなりません。 例えば、Exeの初期処理でDLLを全て読み込む場合であれば 初期処理の完了時点のExeのソースにブレークポイントを設定し プログラムを停止させた状態で、DLL側のソースに ブレークポイントを設定してください。 こちらのテスト環境では、このような状況で ExeとDLLの設定・デバッグ・シーケンス図の生成ができています。 (WindowsXP・VisualC++6.0+SP6・DLLはLoadLibraryで動的に 読み込んでいます。) |
| 名無し(未登録ゲスト) | 投稿日時: 2007-7-17 11:06 |
Re: DLLのデバッグ方法tkouno様
引用:
DLLが読み込まれていないといけないと言うのは認識していましたので、 DLLがLoadされてからブレークポイントの設定を試みていました。 DLLのLoadタイミングは動的なので、 1.DLLがLoadされた後にEXEのソースにブレークポイントを設定。 2.ブレークするのを待つ。 3.ブレーク後、該当のDLLのソースにブレークポイントを設定。 の手順で設定を行なっています。 しかし、未だに「!」マークになってしまいます。 #DLLは動的に表示される画面なので、画面が表示されてから、 ブレークポイントの設定を行なっています。 DLLのLoadが動的と言う事で、EXEはDLLのLibを結合していません。 このあたりも関係あるのでしょうか? |
|
| tkouno | 投稿日時: 2007-7-17 11:28 |
EA Administrator ![]() ![]() 投稿: 3939 |
Re: DLLのデバッグ方法「!」マークは、ヘルプファイルでは「停止に失敗したブレークポイント」となっており
Enterprise Architectでブレークポイント位置の認識に 失敗しています。 (この点、最初の投稿で見落としておりました。申し訳ございません。) つまり、 ・Enterprise Architectでソースコードが認識できていない ・Enterprise Architectが認識しているソースコードと 実際のDLLのソースコードが異なる ・PDBファイルがない ・デバッグ版ではない ・DLLはEnterprise Architectではデバッグできないもの、あるいは.NETで作成されている、など環境が異なる 等の可能性があります。 なお、弊社のテスト環境でも、Libは結合していません。 LoadLibraryで読み込み、GetProcAddressで得られた 関数を直接呼んでいます。 ご確認のほどよろしくお願いします。 |
| 名無し(未登録ゲスト) | 投稿日時: 2007-7-17 12:00 |
Re: DLLのデバッグ方法引用:
現状確認できている項目(確認方法が明確であるもの)としては、 ・EAのソースとDLLのソースは同じである ・デバッグ版(デバッグビルド)である ・PDBは存在している ・NativeのDLL(VC6作成)である となります。 PDBに関してですが、A.EXE,B.DLL,C.DLLとある場合、A.PDB,B.PDB,C.PDBとなりますが、 この認識はあっておりますでしょうか。 >Enterprise Architectでソースコードが認識できていない に関してですが、こちらは、確認方法はありますでしょうか。 何かしらの設定が悪いのだろうと認識しています。 !マークになる時の、チェックシートなどがあれば、もう少し具体的に調べることは出来るのですが。 かなり複雑なプログラムなので、このシーケンス図が出力出来れば、購入に踏み切れるのですが・・・。 |
|
| tkouno | 投稿日時: 2007-7-17 12:56 |
EA Administrator ![]() ![]() 投稿: 3939 |
Re: DLLのデバッグ方法お忙しい中ご確認ありがとうございました。
返信にあります内容については、ご理解どおりです。 Enterprise Architectでのソースコードの確認方法は Enterprise Architectで、DLL内のクラスを右クリックして 「ソースコードの表示」(F12キー)を選択して ソースファイルが正しく表示されることが必須です。 (この点は、ブレークポイントが設定できているとのことですので 正しく表示されるかと思います。) 申し訳ございませんが、「!」になる場合の チェックシートのようなものは、用意がございません。 その他、 ・デバッグ版のDLLを読み込んでいるかどうか (パス上にリリース版の同名のDLLがあり、そちらが優先されている、等) ・DLLを作成したときのソースのパスとEnterprise Architectで読み込んだときのパスが一致していない 等があるかと思います。 ご確認のほどよろしくお願いします。 |
| 名無し(未登録ゲスト) | 投稿日時: 2007-7-17 14:39 |
Re: DLLのデバッグ方法引用:
対象のDLLはパスが通っているフォルダには無いはずですが、念のためコマンドプロンプトで確認しました。 コマンドプロンプト(C:\)にて対象のDLL(B.DLLなど)をtypeコマンドで指定しましが、エラーとなりました。 #『指定したファイルが見つかりません。』 DLLのあるパスでtypeコマンドを実行すると、バイナリの内容がとりあえず表示されました。 と言う事で、デバッグしようとしているパス以外のDLLを参照していだろうと思われます。 DLLとソースの関係ですが、バイナリエディタを使用して確認をしました。 まず、DLLからPDBのパスを調べましたが、DLLに書かれているPDBのパスは合っておりました。 次にPDBからCPPやHのパスを調べましたが、こちらも問題は無いようです。 使用しているバージョンは7.0.813の英語版の評価版です。 日本語版の正規版でないと、正しく動作しないといった不具合報告はありませんでしょうか。 (XP日本語版+EA英語版では組み合わせとしてNGなど) |
|
| tkouno | 投稿日時: 2007-7-17 15:46 |
EA Administrator ![]() ![]() 投稿: 3939 |
Re: DLLのデバッグ方法ご確認ありがとうございました。
まず、評価版と製品版の違いについてですが、日本語版と評価版の 機能差はありません。また、OSの言語との関係も 評価版につきましてはありません。 (日本語製品版は日本語OSでのみ動作します) こちらで想定する、可能性のある項目については 出尽くしましたので、開発元にも確認し 上記以外の可能性があるかどうか、確認いたします。 しばらくお待ちください。 お急ぎのところ申し訳ございません。 |
| 名無し(未登録ゲスト) | 投稿日時: 2007-7-17 16:23 |
Re: DLLのデバッグ方法tkouno様
開発元への確認については了解いたしました。 評価版のレベルで、お手数をお掛けして申し訳御座いません。 ただ、この機能が使えるか/使えないかで、購入するバージョンが変わってしまいますので。 こちらでも、もう少し色々と試してみます。 開発元への、確認、宜しくお願いいたします。 |
|
| tkouno | 投稿日時: 2007-7-19 9:34 |
EA Administrator ![]() ![]() 投稿: 3939 |
Re: DLLのデバッグ方法お待たせしてしまい申し訳ございませんでした。
開発元に確認しましたが、今までに挙げた内容以外には 該当するパターンは思い当たらない、とのことでした。 こちらでもリリースビルドのDLLを読み込んでいる場合に 「!」マークが出るパターンを作成することができましたが このように、明示的に問題がある場合のみしか この問題を発生させることができませんでした。 (この場合、出力サブウインドウに「ブレークポイントの作成に 失敗しました」のメッセージが表示されます。もしこれ以外の メッセージが表示されていれば、それがヒントになるかも しれません。) 現状、お客様の環境を実際に確認することはできないと思いますので 既に挙げた条件のどれかに該当している、ということしか 申し上げることができません。 (もしかすると、SP5ではダメで、SP6でなければ 動作しない何らかの問題があるかもしれません。 こちらの動作環境はSP6です。開発元も 開発および動作確認は、すべてSP6のみです。) お手数をおかけし申し訳ございませんが 再度新しいプロジェクトファイルに対して 以下の手順で、ご確認くださいますと助かります。 1. 全てのExeとDLLをデバッグビルドとして生成 PDBファイルも出力する 2. 対象のソースを全てEnterprise Architectに読み込む 3. デバッグに関する設定を行う 4. ブレークポイントを配置してデバッグ実行 この時点で、DLLに設定してブレークポイントは「?」の アイコンになっているはずです。ご確認ください。 なお、先日はDLL読み込みの後にブレークポイントを 設定しなければならない、と申し上げましたが 現在最新版(本日リリースされるビルド814)で確認したところ、 DLLが読み込まれた時点で自動的に有効に変化し、停止しました。 間違った情報をご連絡し、申し訳ございませんでした。 お手数をおかけし申し訳ございませんが ご確認のほどよろしくお願いします。 今後ともよろしくお願いします。 |
| (1) 2 » | |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |




