是否可以检索与柯南包管理器一起打包的库的源代码,以便在其中进行调试?

Can I retrieve the source code of the library packaged with Conan package manager to be able to debug in it?

本文关键字:在其中 调试 源代码 检索 柯南 管理器 是否 一起      更新时间:2023-10-16

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

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

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

  • 迫使它从源代码构建,--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文件

相关文章: