SWIG を介して C# から呼び出すと正しく動作しない Quantlib のモジュールがあります。C# 単体テストから Quantlib にデバッグする方法はありますか?
1 に答える
誰もまだ答えていないので、Ruby + SWIG をデバッグするときに同様の状況で何をするかを提供します。
SWIG によって生成された C# ソース、SWIG によって生成された C++、C# 単体テスト、および残りの Quantlib ソースを含む Visual Studio プロジェクトを作成します。
Quantlib が提供する Visual Studio ソリューション ファイルを調べたところ、残念ながら SWIG ターゲットが表示されませんでしたが、少なくとも C++ ソースがあり、デバッグ モードでビルドできる場合は、そこに到達する可能性があります。難しいのは、呼び出している C# DLL が、その呼び出しで特定の C++ DLL を参照することを期待しているということです。C++ Quantlib デバッグ ライブラリを C# プロジェクトの Debug フォルダーに移動して、必要な特定のバージョンを見つける必要がある場合があります。
ソリューションを構成したら、デバッグ シンボルを使用してすべてを debug または rel としてビルドします。
この時点で、C# バインディング ソースと Quantlib C++ ソースが同じソリューション内にある場合、C# または C++ の任意の場所にブレーク ポイントを設定し、一方から他方への呼び出しをステップ実行できるはずです。
SWIG Ruby の状況では、SWIG によって生成された CXX ファイル、または swig によってラップされた C++ ライブラリ ソースにブレークポイントを設定し、Ruby インタープリターによって行われた呼び出しをステップ実行することができます。これを行うには、スタートアップ プロジェクトとして Visual Studio 内から ruby を起動します。
- これがおそらくキーポイントです。デバッグする DLL と、DLL をロードしているアプリケーション (C# または Ruby からのように LoadLibrary 呼び出しを使用している場合でも) の両方を同じソリューションに配置します。その後、Visual Studio は、デバッグされた DLL のブレーク ポイントを尊重します。ブレークポイントが受け入れられない場合は、Microsoft の procexp を使用して、ロードされている DLL を確認し、C# ライブラリが希望とは異なるバージョンの C++ ライブラリを検出しているかどうかを確認する必要がある場合があります。
この情報がお役に立てば幸いです。