1

ネイティブ Win32 プログラムから呼び出される COM 可視 dll を作成しました。デバッグの目的で、単純な WinForms クライアントを dll を含むソリューションに追加しました。

dll にブレークポイントを設定すると、そのブレークポイントにヒットしますが、コードをステップ実行できません。デバッガーは常に dll の次のブレークポイント、または呼び出し後のクライアントのコードの最初の行にジャンプします。 dll.

デバッガーで dll コードをステップ実行するにはどうすればよいですか?

「マイコードのみを有効にする」オプションではないかと思いましたが、設定されていません。

jdv を更新 すると、プロジェクトのプロパティで「アンマネージ コードのデバッグを有効にする」を設定することが提案されましたが、望ましい効果はありませんでした。

ありがとう、ミエル。

4

2 に答える 2

4

以下は、私が実行した手順であり、COM コンポーネントとして公開された .NET アセンブリを正常にデバッグできました。

COM オブジェクトとして公開されるクラスを含むクラス ライブラリを作成することから始めます。

namespace COMTest
{
    using System;
    using System.Runtime.InteropServices;

    public interface IFoo
    {
        void Bar();
    }

    [ComVisible(true)]
    public class Foo : IFoo
    {
        public void Bar()
        {
            Console.WriteLine("Bar");
        }
    }
}

強力なキーでアセンブリに署名し、COM オブジェクトとして登録します。

regasm.exe /codebase COMTest.dll

COM オブジェクトを登録したら、新しい Visual Studio インスタンスで新しいコンソール アプリケーションを作成して、COM オブジェクトをテストできます。

class Program
{
    static void Main()
    {
        var type = Type.GetTypeFromProgID("COMTest.Foo");
        var instance = Activator.CreateInstance(type);
        type.InvokeMember("Bar", BindingFlags.InvokeMethod, null, instance, new object[0]);
    }
}

行にブレークポイントを配置しInvokeMember、アプリケーションを実行します。ブレークポイントに到達したら、モジュール ウィンドウ( Ctrl+D M) を開き、COM アセンブリのシンボルが読み込まれていることを確認します。

代替テキスト

押すF11と、COM クラスにステップインしてデバッグできます。

Foo注:クラスを含む .cs ファイルを直接開いて、そこにブレークポイントを直接配置することもできます。もう一度重要なことは、アセンブリ用にシンボルをロードすることです。またはブレークポイントを配置すると、Visual Studio は、このブレークポイントにヒットしないことを通知します。

于 2010-09-10T19:41:41.380 に答える
1

多くのデバッグの問題を解決する VS2008 SP1 のホットフィックスがリリースされました。KB 記事はこちら、修正プログラムのダウンロードはこちらです。

于 2010-09-13T08:22:07.173 に答える