Windows

Visual StudioでDLLのデバッグ方法(C++で実例付きで詳細解説)

Visual StudioでDLLのデバッグ方法をC言語/C++で作成したソースコードの実例付きで詳しく解説します。

文字だけだと分かりにくいので、Visual Studioの画像を多めに使って紹介します。

DLLのデバッグは、以下の3パターンの方法でほとんどのケースで対応できます。

1.呼び出し元プログラムのプロジェクトとDLLプロジェクトを同時にデバッグ

2.DLLプロジェクトのプロパティで呼び出し元のアプリを指定して、デバッグを開始

3.「プロセスにアタッチ」機能を使って、アプリから呼び出されるDLLをデバッグ

DLLの作成手順

C++で作成したプログラムで説明します。

デバッグ方法の説明のためにDLLのプロジェクトと呼び出し元のアプリを作成します。すでにDLLのプロジェクトが存在し、知っていることであれば、「デバッグ方法」までスキップしてOKです。

ソリューションファイルとプロジェクト

呼び出し元プロジェクト:「DLLTest」
DLLプロジェクト:「DLL1」

以下は完成形のソリューションとプロジェクトです。

DLLのソースコード

DLLにエクスポートする関数は、xxxxx.hという名前のヘッダーファイルに宣言し、__declspec(dllexport)修飾子を付けます。

今回、作成したファイルは、MathLibrary.cppとMathLibrary.h。

呼び出し元のソースコード

DLL内の関数を使うので、MathLibrary.h をインクルード(#include)する。

DLLの関数「DLL_Add()」を呼び出す。

プロジェクトの作成方法

(1)呼び出し元プログラムのプロジェクトを作成

「コンソール アプリ」で作成

こんな感じのプロジェクトファイル群が作成されます。

(2)ソリューションに新規にDLLのプロジェクトを追加します。

「ソリューション」を選択し、右クリックでメニューを表し「追加(D)」-「新しいプロジェクト(N)」をクリック。

(3)DLLプロジェクトの作成

「DLL」を検索ボックスに入力すると絞り込み可能です。DLLプロジェクトを選択。

(4)DLLのソースコードを追加

MathLibrary.h と MathLibrary.cppを追加すると以下のファイル構成となります。

コンパイルエラーの対応

MathLibrary.h が見つからないエラーになります。

MathLibrary.hが存在するディレクトリを「追加のインクルードディレクトリ」に追加します。

リンクエラーの対応

「DDL_Add」関数が未解決の外部シンボルエラーになります。

「リンカー」の「追加の依存ファイル」にDLLのライブラリ「DLL1.lib」を指定します。

デバッグ方法

以下の3パターンを説明します。

1.呼び出し元プログラムのプロジェクトとDLLプロジェクトを同時にデバッグ

2.DLLプロジェクトのプロパティで呼び出し元のアプリを指定して、デバッグを開始

3.「プロセスにアタッチ」機能を使って、アプリから呼び出されるDLLをデバ

呼び出し元プログラムと同時にデバッグ

呼び出し元プログラムのプロジェクトとDLLプロジェクトを同時にデバッグする方法

上記で紹介した「DLLの作成手順」のようにソリューションとプロジェクトを作成して一体型となっている場合は、DLL側にブレイクポイントを設定して、「デバッグの開始」または「F5キー」でデバッグできます。

DLLプロジェクトから呼び出し元を指定

DLLのプロジェクトしかない場合、DLLプロジェクトのプロパティで呼び出し元のプログラムを指定します。


[ソリューション エクスプローラー]でDLLプロジェクトを選択し、右クリックして[プロパティ]を選択。

次に、[デバッグ]タブを選択し、[コマンド]フィールドで「参照」で呼び出し元のプログラムを選択します。

最後に、[OK]ボタンをクリックして変更を保存します 。
これで、DLLプロジェクトから[F5]キーを押してデバッグを開始できます

プロセスにアタッチ

[プロセスにアタッチ] 機能を使って、別のプログラムから実行されるDLLをデバッグする方法

常駐型のプロセスや、すでに実行中にプロセスをデバッグする場合に便利です。

メニュー「デバッグ(D)」-「プロセスにアタッチ(P)」をクリック。

デバッグ対象のプロセスを選択します。

ブレイクポイントを設定しておくと、関数が呼び出されると停止します。

プロセスにアタッチ方法でデバッグできない場合の確認方法

プロセスにアタッチ方法でデバッグできない場合の確認方法を紹介します。

リンクされているDLLを確認

呼び出し元プログラムが、DLLのDebug版とリンクされている必要があります。

呼び出し元がRelease版で、DLL側がDebug版でもリンク可能です。

呼び出し元がRelease版で、DLL側もRelease版の場合、デバッグできません。

どこのDLLがロードされているかを確認

プロセスにアタッチしても呼び出し元のプログラム(.exe)が、どこのディレクトリのDLLファイルを読んでいるかが分からないことがあります。

デバッグ対象のDLLがロードされているかを確認する必要があります。

Windowsのプログラムは、DLLファイルを探すディレクトリの順番が決まっています。

一番確実な方法は、呼び出し元のプログラム(.exe)と同じディレクトリにDLLファイルを置くことです。
同じディレクトリのDLLが一番最初にロードされます。

PDBファイル(拡張子が.pdb)も忘れずにコピーしましょう。このPDBファイルにデバッグ情報が含まれています。

以下のように同じディレクトリに配置します。

今回のサンプルプログラム

説明に使用したVisual Studio 2のソリューションファイル一式をダウンロード可能にしておきます。学習用にご利用ください。

(大したプログラムではないです。著作権はありません。(^^♪) )

ヘッダーファイルとライブラリファイルの指定がフルパスになっているので、適当に変更してください。
【VS-DLL-debug.zip】ファイルサイズ(9KB)

最後に(Windows VPSを紹介)

公式サイトの情報は、文字ばかりで理解することが難しいですね。今回、画面のスクショを多くして解説しました。

最後にWindowsの開発者が知っているとお得なことを紹介します。

クラウド上のWindows Serverがリーズナブルな価格で即日利用可能なVPSサービスが存在します。動作検証などで1ヶ月だけの利用などの用途にも使えます。

物理サーバマシンを手配したことがある方は分かりますが。

物理サーバを用意する場合は、メーカーにサーバマシンの見積りを取って、手配をして搬入して設置し、Windowsをインストールしてネットワークなどを設定してやっと使えるようになります。(どんなに早くても週単位で時間がかかります)

「ConoHa」と「さくらVPS」では、契約アカウントの作成からWindows Serverが使えるまで、30分かかりません。
(他の会社のVPSは、次の営業日だったりと開始まで時間がかかります。)

ConoHa の VPSは時間課金をサポートしているので、2、3日だけ使うという用途でも利用可能です。(4時間だけという使い方もできます)

私は記事を書くための調査や動作確認にConoHaのVPSを使っています。ローカルのPCにいろいろソフトをインストールするとWindowsが不調になるので。

テレワークでWindowsが使えるVPSサービスの選び方
テレワークでWindowsが使えるWindows VPSサービスの選び方テレワークでWindowsやMS-officeが使える「Windows VPSサービス」があります。 Windows VPSサービ...
【使ってみた】ConoHa for Windows Server メモリ2GB/4GB/8GBプランConoHa for Windows Server を使えば、自宅の古いWindows PCを単なる操作用端末にして、サーバ側(Wind...