C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: C++で作成したDLLをデバッグで確認したい


(過去ログ 82 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■48884 / inTopicNo.1)  C++で作成したDLLをデバッグで確認したい
  
□投稿者/ コウノスケ (1回)-(2010/04/15(Thu) 17:49:43)

分類:[VB.NET/VB2005 以降] 

はじめまして。コウノスケです。

早速ですが、質問させていただきます。
C++で作ったDLLを別のVB.NETのプロジェクトから利用したいと思っています。
そこで、VB.NET側でDLLの元になったソースをデバッグしたいのですが、
ブレークポイントを設定することも止めることも出来ず
どうしたらよいか分からない状況です。


少し詳細を書かせていただきますと、
WinPcapとの処理を行うDLLをC++で作成しました。
そのため、ソースもあります。
今回新たにVB.NETで別に作成したWindows Applicationで
呼び出し利用します。
DLLとソースは「既存の追加」でプロジェクトに入れました。
参照はDllImportを使っています。

いろいろなサイトで調べて
DLL側でVB.NETのexeをデバッガのコマンドに設定する方法などもありましたが、
結局DLLの元のソースに対してはデバッグできませんでした。
(リリースモードも試したんですが、出来ません)

DLLと元になったソースをリンクさせられれば
デバッグで追えるのではないか、と思います。

出来そうなのに出来なくてすごく歯がゆいです。
よろしくお願いいたします。


<追記>
ステップ実行で確認したいのですが、
それをデバッグと呼んでいるんですけど
使い方合っていますか?(;^_^A

引用返信 編集キー/
■48885 / inTopicNo.2)  Re[1]: C++で作成したDLLをデバッグで確認したい
□投稿者/ aetos (273回)-(2010/04/15(Thu) 17:52:03)
2010/04/15(Thu) 17:53:27 編集(投稿者)

No48884 (コウノスケ さん) に返信
dll と pdb を VB.NET アプリの出力フォルダ(bin\Debug)に置いて、プロジェクトのプロパティで「アンマネージコードデバッグを有効にする」にチェックすればできると思います。たぶん。
引用返信 編集キー/
■48907 / inTopicNo.3)  Re[2]: C++で作成したDLLをデバッグで確認したい
□投稿者/ コウノスケ (2回)-(2010/04/16(Fri) 09:28:20)
No48885 (aetos さん) に返信
> 2010/04/15(Thu) 17:53:27 編集(投稿者)
>
> ■No48884 (コウノスケ さん) に返信
> dll と pdb を VB.NET アプリの出力フォルダ(bin\Debug)に置いて、プロジェクトのプロパティで「アンマネージコードデバッグを有効にする」にチェックすればできると思います。たぶん。


aetosさん。
早速の返信、ありがとうございます。
vc80.pdbをVB.NETアプリの出力フォルダに入れてデバッグ実行してもやはり出来ません・・・。
エクスプローラ上のコピー&ペーストで「置く」でよろしいでしょうか?


「逆アセンブリの表示」でデバッグするのではないですよね?
私のイメージでは
@DllImportで指定したメソッドが実行
A〜.cのメソッドに移動
Bどのように実行されているか分かる
みたいな感じなんですが。

遅れましたが、開発環境は
Visual Studio 2005 Pro
Windows 7です。

質問ばかりですいません。
引用返信 編集キー/
■48924 / inTopicNo.4)  Re[3]: C++で作成したDLLをデバッグで確認したい
□投稿者/ コウノスケ (3回)-(2010/04/16(Fri) 15:40:45)
現在の状況を報告します。

http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=one&namber=26292&type=26291&space=15&no=0
上のサイトからアタッチすれば出来るんじゃ?と思いやってみましたが
やっぱりステップ実行させることが出来ませんでした。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=31124&forum=7&start=8
ここで紹介されている方法(Jittaさんのレス)
「では、DLL を作るだけのプロジェクトを、別に作ります。それでデバッグモードでコンパイルすれば、必ず DLL と PDB が出来ます。
 出来た DLL と PDB を、対象のプロジェクトのディレクトリにコピーします。
 呼び出す方のプロジェクトを読み込みます。
 DLL を呼び出す箇所に、ブレーク ポイントを置き、実行します。
 ステップ実行します。

 これで、DLL 内に潜りませんか?
 #####
 というか、普通は DLL のプロジェクトに、それをテストするためのプロジェクトをくっつけて、ソリューションを構築します。 」
というのも試してみましたが、やはりブレークポイントで止まりません。


少し自分なりに考えてみたのですが
DllImportで行うと呼び出す側のbin\debug配下に対象のdllを入れなければいけません。
そのdllのソースを見に行っているのでブレークポイントが張れないのは当たり前じゃね?
ということでDllImportでない方法を調べてやってみたいと思います。

引用返信 編集キー/
■48929 / inTopicNo.5)  Re[4]: C++で作成したDLLをデバッグで確認したい
□投稿者/ コウノスケ (4回)-(2010/04/16(Fri) 18:11:49)
たびたびすいません。

C++でDLLを作成した場合は、
DllImportかDeclareで宣言するしかないようですね。
しかも結局同じことのようです。
参照設定が出来ればよかったのですが。


設定をいじりすぎたので
一度新しくDLLと呼び出しアプリを作成してみました。

でもダメでした・・・。

以下、試したものです。
・ ソリューション構成はアクティブDebug

1.http://dobon.net/vb/bbs/log3-16/9671.html
から、[構成プロパティ]-[デバッグ]の[デバッガのタイプ]を混合にした。
さらに有効にするデバッグの「アンマネージコードデバッグ」のチェックをONにした。

2.http://msdn.microsoft.com/ja-jp/library/c6wf8e4z(v=VS.80).aspxの
「Visual C++ で記述したコードにデバッガをアタッチするには、コードが DebuggableAttribute を生成する必要があります。
 /ASSEMBLYDEBUG リンカ オプションを使ってリンクすると、これを自動的にコードに追加できます。」
から、[デバッグできるアセンブリ]-[ランタイム トラッキングおよび最適化の無効 (/ASSEMBLYDEBUG)] にした。

3.[全般] ([オプション] ダイアログ ボックス - [デバッグ]) の
[元のバージョンと完全に一致するソース ファイルを必要とする] をオフ

これらを試しましたが、
・VB.NETのexeファイルを起動し、C++のVSを立ち上げて、ブレークポイントを設定し
 「プロセスにアタッチ」を実行しても
 VB.NET側のブレークポイントは止まるだけで、C++のブレークポイントにはヒットしない。
 (ブレークポイントは、現在の設定ではヒットしません。と出る。)


何かヒントはないでしょうか?
一日かけてやったのに進捗が進まず、すごく悔しいです。
あと少しな気がするんです。僕だけかな?

よろしくお願いいたします。
引用返信 編集キー/
■48933 / inTopicNo.6)  Re[5]: C++で作成したDLLをデバッグで確認したい
□投稿者/ 渋木宏明(ひどり) (1304回)-(2010/04/16(Fri) 23:05:52)
渋木宏明(ひどり) さんの Web サイト
> 何かヒントはないでしょうか?

本来、そんなに苦労するはずないです。

やるべき事はすでに示されている通り

>dll と pdb を VB.NET アプリの出力フォルダ(bin\Debug)に置いて、プロジェクトのプロパティで「アンマネージコードデバッグを有効にする」にチェックすればできると思います。たぶん。

だけです。

なので、考えられるのは .dll と .pdb ファイル、ソースコード(内容及び置かれた場所)が食い違ってたり、とかそーゆー系です。

引用返信 編集キー/
■48952 / inTopicNo.7)  Re[3]: C++で作成したDLLをデバッグで確認したい
□投稿者/ aetos (276回)-(2010/04/18(Sun) 00:03:18)
No48907 (コウノスケ さん) に返信

> aetosさん。
> 早速の返信、ありがとうございます。
> vc80.pdbをVB.NETアプリの出力フォルダに入れてデバッグ実行してもやはり出来ません・・・。
> エクスプローラ上のコピー&ペーストで「置く」でよろしいでしょうか?

vc80.pdb ではありません。dll と同じ名前の pdb があるはずです。
ないとすれば、VC++ 側のプロジェクトの設定を見直してください。
・「C++」>「全般」>「デバッグ情報の形式」が「プログラム データベース」または「エディット コンティニュ用以下略」になっているか
・「リンカ」>「デバッグ」>「デバッグ情報の生成」が「はい」になっているか

> DllImportで行うと呼び出す側のbin\debug配下に対象のdllを入れなければいけません。
> そのdllのソースを見に行っているのでブレークポイントが張れないのは当たり前じゃね?
> ということでDllImportでない方法を調べてやってみたいと思います。

そんなことはありません。
なぜなら、pdb のなかにソースファイルのフルパスが書いてあるからです。

引用返信 編集キー/
■48960 / inTopicNo.8)  Re[1]: C++で作成したDLLをデバッグで確認したい
□投稿者/ aetos (277回)-(2010/04/18(Sun) 15:31:55)
No48884 (コウノスケ さん) に返信

ディレクトリ構成はこんな感じになっているべきです。

ソリューション ディレクトリ
├VC++ DLL プロジェクト ディレクトリ
|└ソースファイル、ヘッダファイル等
├Debug(VC++ DLL 出力ディレクトリ)
|└DLL、PDB(※)
└C# プロジェクト ディレクトリ
 ├ソースファイル
 └bin
  └Debug
   ├C# EXE
   └DLL、PDB(※からコピー)

一部のディレクトリやファイルは省略しています。

引用返信 編集キー/
■48963 / inTopicNo.9)  Re[2]: C++で作成したDLLをデバッグで確認したい
□投稿者/ コウノスケ (5回)-(2010/04/19(Mon) 09:09:15)
No48960 (aetos さん) に返信

aetosさん、渋木宏明(ひどり)さん

返信ありがとうございました。
設定を一から見直し、指定されたようにやってみたところ
ステップ実行を行うことが出来ました!

本当、ありがとうございます。
出来ないんじゃないかって思ってしまっていたので
感激です。

ありがとうございました!
解決とさせていただきます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -