- PR -

Managed C++でのC++言語の挙動について

投稿者投稿内容
モモ男
会議室デビュー日: 2005/12/11
投稿数: 7
投稿日時: 2005-12-11 02:01
現在、Managed C++ でアプリケーションを開発しているのですが、以前作っていた C++ 言語で書かれたソースコードを呼ぶ必要があります。そこで、同じプロジェクトにいれて、コンパイルをしてみたところ、必要なファイルを的確にあわせることで、コンパイル&実行をすることができました。しかし、実行をよく見てみると、対象のクラスが生成されるところで、処理がスキップ(コンストラクタから抜けて)しています。

断片的で申し訳ございませんが、もし原因がわかるかたがいらっしゃいましたら、お力添えをして頂けると幸いです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-11 10:24
引用:

モモ男さんの書き込み (2005-12-11 02:01) より:

しかし、実行をよく見てみると、対象のクラスが生成されるところで、処理がスキップ(コンストラクタから抜けて)しています。
断片的で申し訳ございませんが、もし原因がわかるかたがいらっしゃいましたら、お力添えをして頂けると幸いです。


それは「以前作っていた C++ 言語で書かれたソースコード」上で、の話なのでしょうか?
コンストラクタから抜けるのは、果たしてどちらを指すのでしょうか?
また、「対象クラス」がどちらを指すのかが判りませんでしあ。

「対象クラス」が以前作っていた側を指すのであれば、デバッガがアタッチできないだけだと思います。
例外は発生していないんですよね?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-12-11 12:35
引用:

しかし、実行をよく見てみると、対象のクラスが生成されるところで、処理がスキップ(コンストラクタから抜けて)しています。



プロジェクト設定でアンマネージデバッグを有効にしてないとか。
モモ男
会議室デビュー日: 2005/12/11
投稿数: 7
投稿日時: 2005-12-11 13:45
渋木宏明(ひどり) 様:

おそらくVisual C++ のプロジェクトの設定項目では「プロジェクト設定でアンマネージデバッグ」はないようです。
モモ男
会議室デビュー日: 2005/12/11
投稿数: 7
投稿日時: 2005-12-11 13:51
じゃんぬねっと様:

失礼しました。えっと、Managed C++ のソースコードから、Unmanaged C++ クラスを生成するときの話です。たとえば

CClass *cKyo;

cKyo = new CClass();


などとしたとき、new CClass のステートメントから 1 ステップ進めただけで、次のブレークポイントまでとんでしまいます。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2005-12-11 15:34
こんにちは。

引用:

対象のクラスが生成されるところで、処理がスキップ(コンストラクタから抜けて)しています。


引用:

new CClass のステートメントから 1 ステップ進めただけで、次のブレークポイントまでとんでしまいます。


いまいち状況がわからないのですが、CClass のコンストラクタ内にステップインしようとして、次の行にステップオーバーしてしまうという事でしょうか?
それとも、普通に次の行にステップオーバーしたいが、次のブレークポイント(例えば、10行後に設定しているとか)まで飛んでいってしまうのでしょうか?

_________________
囚人のジレンマな日々
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-12-11 15:38
引用:

おそらくVisual C++ のプロジェクトの設定項目では「プロジェクト設定でアンマネージデバッグ」はないようです。



あります。

プロジェクトのプロパティの「構成プロパティ」「デバッグ」ページの「デバッガのタイプ」で指定します。
モモ男
会議室デビュー日: 2005/12/11
投稿数: 7
投稿日時: 2005-12-11 16:00
囚人様:

こんにちは。

えっと、詳細を話しますと、ある ClassA のコンストラクタ内から、ClassB のコンストラクタを呼び出す(new ClassB)のところに、ブレイクポイントを仕掛けております。コンストラクタの処理は、それで終わりではなく、new ClassB 生成のあとに、OutputDebugString でメッセージを出しております。にも関わらず、ClassA の内ブレイクポイント(new ClassB)でとまるんのですが、そこからステップ実行しようとすると、OutputDebugString での文字が表示されるどころではなく、その ClassA のコンストラクタからでて、ClassA のコンストラクタ呼び出しの後処理であるブレイクポイントのところまで飛んでしまいます。

よろしくお願いします。

スキルアップ/キャリアアップ(JOB@IT)