【问题标题】:How to debug into Quantlib via SWIG from my C# unit test如何从我的 C# 单元测试中通过 SWIG 调试到 Quantlib
【发布时间】:2011-03-07 14:12:22
【问题描述】:

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

【问题讨论】:

  • 场景是什么? G++/Mono 还是 MSVC?
  • @lefticus 我正在使用 VS 2008,可以使用 VS 2005。

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


【解决方案1】:

还没有其他人回答,所以我将提供我们在调试 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++ 中的任何位置设置断点,并且能够单步执行从一个到其他。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 2013-05-08
    • 2015-08-25
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    相关资源
    最近更新 更多