如何通过我的C#单元测试通过SWIG调试到Quantlib

时间:2011-03-07 14:12:23

标签: c# c++ swig quantlib quantlib-swig

我在Quantlib中有一个模块,当我通过SWIG从C#调用它时,它无法正常工作。有没有办法可以通过我的C#单元测试调试Quantlib?

1 个答案:

答案 0 :(得分:2)

还没有人回答,所以我会在调试Ruby + SWIG时提供类似情况下的操作。

创建一个Visual Studio项目,其中包含SWIG生成的C#源,SWIG生成的C ++,C#单元测试以及Quantlib源的其余部分。

我只是查看了Quantlib提供的Visual Studio解决方案文件并且没有看到SWIG目标,这很不幸,但如果您至少拥有C ++源代码,并且可以在调试模式下构建它,那么您可能会到达那里。困难的部分是您调用的C#Dll将在其调用中引用某个C ++ DLL。您可能必须将C ++ Quantlib调试库移动到C#项目的Debug文件夹中,以便找到所需的特定版本。

配置完解决方案后,使用调试符号将所有内容构建为debug或rel。

如果您现在在同一解决方案中拥有C#绑定源和Quantlib C ++源,您应该能够在C#或C ++中的任何位置设置断点,并且能够逐步调用从一个到C#或C ++的调用。其他

使用我们的SWIG Ruby情况,我们可以在SWIG生成的CXX文件或C ++库源中设置断点,该源文件由swig包装并逐步执行Ruby解释器的调用。我们可以通过从Visual Studio中启动ruby作为启动项目来实现此目的。

  • 这可能是关键点。同时拥有要调试的DLL和加载DLL的应用程序(即使它是使用LoadLibrary调用,因为它来自C#或来自Ruby)在同一解决方案中。然后Visual Studio将尊重调试的DLL中的断点。如果没有遵守断点,您可能需要使用Microsoft的procexp来查看加载了哪个DLL以及C#库是否找到了与您希望的不同版本的C ++库。

我希望这些信息可以提供一些帮助。