我可以检索使用 Conan 包管理器打包的库的源代码以便能够在其中进行调试吗?
Can I retrieve the source code of the library packaged with Conan package manager to be able to debug in it?
通常 Conan 包仅包含构建工件,例如 *.dll
、*.lib
、*.pdb
、*.so
、*.a
、*.dylib
文件以及给定 C 或 C++ 库的 headers。然而,有时当您调试使用库的代码时,能够进入库代码以查看内部发生的情况非常有用。例如,确定出现问题时是因为库使用不当还是库中存在错误。
- 是否可以与您使用的包一起检索构建它的源代码以便能够在其中进行调试?
- 如果这对于任意包是不可能的,是否可以自己创建这样的包?
有两种策略可用于调试依赖项:
- 使用
--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
个文件
通常 Conan 包仅包含构建工件,例如 *.dll
、*.lib
、*.pdb
、*.so
、*.a
、*.dylib
文件以及给定 C 或 C++ 库的 headers。然而,有时当您调试使用库的代码时,能够进入库代码以查看内部发生的情况非常有用。例如,确定出现问题时是因为库使用不当还是库中存在错误。
- 是否可以与您使用的包一起检索构建它的源代码以便能够在其中进行调试?
- 如果这对于任意包是不可能的,是否可以自己创建这样的包?
有两种策略可用于调试依赖项:
- 使用
--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
个文件