【问题标题】:Can I retrieve the source code of the library packaged with Conan package manager to be able to debug in it?我可以检索使用柯南包管理器打包的库的源代码以便能够在其中进行调试吗?
【发布时间】:2017-08-05 18:07:11
【问题描述】:

通常Conan 包仅包含构建工件,例如*.dll*.lib*.pdb*.so*.a*.dylib 文件以及给定 C 的标头或 C++ 库。但是,有时当您调试使用库的代码时,能够单步进入库代码以查看内部发生的情况非常有用。例如,确定何时出现问题是由于库的错误使用还是由于库中的错误。

  1. 是否可以与您使用的包一起检索构建它的源代码以便能够在其中进行调试?
  2. 如果这对于任意包是不可能的,是否可以自己创建这样的包?

【问题讨论】:

  • 删除了答案,因为我不知道柯南是什么(野蛮人除外)
  • @PeterJ Conan 是 C 和 C++ 库的包管理器。我在答案中有指向它的官方网站的链接。该包通常包含已构建的库及其标头。貌似包里默认是没有源码的。
  • 我猜你想看这里:github.com/conan-io/conan

标签: c++ c packages conan


【解决方案1】:

有两种策略可能有助于调试依赖项:

  • 使用--build=PkgName 参数强制它从源构建。当您从源构建包时,根据构建系统,二进制工件可能会引用构建包的临时构建文件夹,然后能够找到它们并使用 调试。此策略适用于第三方包,即使他们不考虑调试。
  • 如果您自己创建包,并且希望能够直接调试二进制工件,而不需要从源代码重新构建,那么正确的方法是也将源代码打包。如果调试器需要一些帮助来定位这些源,那么应该使用它。

使用gdb,您可以执行类似的操作

def build(self):
    cmake = CMake(self.settings)
    gcc_dbg_src = ""
    if self.settings.compiler == "gcc" and self.settings.build_type == "Debug":
        gcc_dbg_src =  ' -DCMAKE_CXX_FLAGS="-fdebug-prefix-map=%s/hello=src"' % os.getcwd()
    self.run('cmake hello %s %s' % (cmake.command_line, gcc_dbg_src))
    self.run("cmake --build . %s" % cmake.build_config)

def package(self):
    self.copy("*.h", dst="include", src="hello")
    if self.settings.build_type == "Debug":
        self.copy("*.cpp", dst="src", src="hello")
    self.copy("*.lib", dst="lib", keep_path=False)
    self.copy("*.a", dst="lib", keep_path=False)

确保您使用正确的标志进行编译,并且源文件也被打包。然后,在消费者方面,您可能想要imports .cpp 文件,因此gdb 调试器可以在正在调试的二进制文件之外找到它们,或者使用您的调试器路径来添加包文件夹。

在 Windows 中,使用 Visual Studio,您可能想要打包 .pdb 文件

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 2019-09-08
    • 2014-12-02
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多