是否可以检索与柯南包管理器一起打包的库的源代码,以便在其中进行调试?
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++库的标头。但是,有时当您调试使用库的代码时,能够单步进入库代码以查看内部发生的情况非常有用。例如,确定遇到问题时是由于库使用不当还是由于其中的错误。
- 是否可以与您使用的包一起检索构建它的源代码,以便能够在其中进行调试?
- 如果对于任意包无法做到这一点,是否可以自己创建这样的包?
有两种策略可用于调试依赖项:
- 迫使它从源代码构建,
--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
文件
相关文章:
- 当我在其中一个线程执行中(在activemq-cpp中)捕获到特定值时,我如何终止/停止所有其他线程
- 修改链表主函数代码,用户将在其中输入节点的索引和数据以及正确的消息
- 如果我们在其中输入一个整数,则字符会给出整数作为输出,但是当分配给它一个整数时,这不会发生。为什么?
- 我写了一个简单的矢量程序,在其中我得到了以下输出。你能帮我理解它的输出吗?
- 为什么我的数组输出一个不在其中的元素
- 定义在其中执行不同代码路径的代码节
- 这是我的 .h 文件的一些错误,当我在其中包含我的类模板时,它显示 [错误] 未终止 #ifndef
- 是否可以检索与柯南包管理器一起打包的库的源代码,以便在其中进行调试?
- 应用程序仅在qt调试器中加载dll,而不是独立加载
- C :宏参数可以在其中有空间吗?
- C++要在其中添加接口功能的类层次结构
- 如何制作一个结构程序,在其中可以存储无限量的数据,以便每次您想要时都可以将另一个产品添加到列表中?
- 程序在其中一个案例完成后终止,但对于其他情况则不终止
- openCv 3中的等效polyfit函数在其中
- CMake:如何指定 ctest 应该在其中查找可执行文件的目录
- 如何在其中创建2D字符串向量并插入数据
- C 迭代用于循环并在其中调用功能
- 该代码不会在其中显示任何数字输入.如何使它显示任何输入
- 如何在%appdata%中创建文件夹,在其中创建.bat文件,然后执行它?
- Cpp文件包括,同时也可以在其中调试