3

C++ で記述された DLL があります。静的ライブラリをラップします。ctypesを使用してpythonから呼び出しています。ここまでは順調ですね。DLL でいくつかの呼び出しをデバッグする必要があります。スタティック ライブラリではブレークポイントをヒットできますが、DLL ではヒットできません。これは、[Debug] メニューの [Attach to Process] を使用して実行しています。コードは次のようになります。

extern "C"
{
    __declspec(dllexport) 
    void foo()
    {
    int i = 0; // Can't hit breakpoint here
    }
}

デバッグ情報を生成しています。pdb は DLL のすぐ隣にあります。DLL をロードしています。ロードしていると思います。私は何が欠けていますか?

編集 プロジェクトを再作成しました。問題はなくなりました。おそらく違いは、マネージ C プロジェクトから MFC DLL に移行したことでしょうか?

4

1 に答える 1

2

MS Visual Studio を使用して実行中のプロセスにアタッチする場合は、「マネージ コード」と「ネイティブ コード」の両方にオプションが設定されていることを確認してください。これにより、ネイティブまたはマネージドのあらゆるタイプのコードのブレークポイントが、MS Visual Studio デバッガーによって確実に受け入れられるようになります。それ以外の場合、MS Visual Studio はその「自動」設定を使用します。その結果、プロジェクトの「タイプ」に表示されるブレーク ポイントのみが適用されます (たとえば、MFC プロジェクトはネイティブ コード (管理されていない) であるため、通常は実行されません)。マネージ コード セクションをデバッグしますが、.Net プロジェクトはマネージ コードであり、「アンマネージ」ネイティブ コードのブレーク ポイントで停止する必要はありません)。

接続時にこのオプションを設定するには、[選択...] ボタンを選択し、ラジオ ボタンを [自動] から [これらのコード タイプをデバッグ] に切り替えます。[これらのコード タイプをデバッグする] で、[マネージド] と [ネイティブ] の横にあるボックスをオンにします。MS Visual Studio が認識する他のタイプ (SQL Server コードの T-SQL など) を使用する場合は、さらにオプションを選択できます。

于 2012-10-30T21:27:49.537 に答える