调试和单步调试依赖项¶
有时,在开发和调试自己的代码时,能够单步调试依赖项的源代码也很有用。 有几个需要考虑的事项
来自 ConanCenter 的 Recipes 和 packages 并不总是打包调试所需的所有调试工件。 例如,在 Windows 中,
*.pdb
文件未打包,因为它们非常大,而且实际上很少使用。 如果您愿意,可以使用您自己的软件包来打包 PDB 文件,但这仍然无法解决下一个问题。调试工件通常是不可重定位的,这意味着这些工件只能在从源代码构建的位置使用。 但是,上传到服务器并下载到不同机器的软件包可以将这些工件放在不同的文件夹中。 那么,调试工件可能无法正确找到源代码、符号等。
从源代码构建¶
调试依赖项的推荐方法是在本地缓存中从源代码构建它们。 这种方法应该适用于大多数 recipe,包括 ConanCenter recipe。
我们可以重用本教程中第一个示例的代码。 请首先克隆源代码以重新创建此项目。 您可以在 GitHub 上的 examples2 存储库中找到它们
$ git clone https://github.com/conan-io/examples2.git
$ cd examples2/tutorial/consuming_packages/simple_cmake_project
然后,让我们确保依赖项是从源代码构建的
$ conan install . -s build_type=Debug --build="zlib/*"
...
Install finished successfully
假设我们有 CMake>=3.23,我们可以使用预设(否则,请使用 -DCMAKE_TOOLCHAIN_FILE
参数)
$ cmake . --preset conan-default
这将创建我们的项目,我们可以开始构建和调试。
使用 Visual Studio 单步调试依赖项¶
创建项目后,在 Visual Studio 中,我们可以双击 compressor.sln
文件,或从打开的 Visual Studio IDE 中打开该文件。
打开项目后,第一步是构建它,确保 Debug
配置处于活动状态,转到 Build -> Build Solution
即可。 然后,我们可以将 compressor
定义为项目视图中的“启动项目”。
转到 compressor/main.c
源文件,我们可以在其中的某一行中插入断点
int main(void) {
...
// add a breakpoint in deflateInit line in your IDE
deflateInit(&defstream, Z_BEST_COMPRESSION);
deflate(&defstream, Z_FINISH);
单击 Debug -> Start Debugging
(或 F5),程序将开始调试并在 deflateInit()
行停止。 单击 Debug -> Step Into
,IDE 应该能够导航到 deflate.c
源代码。 如果我们检查该文件,其路径将位于 Conan 缓存中,如 C:\Users\<myuser>\.conan2\p\b\zlib4f7275ba0a71f\b\src\deflate.c
int ZEXPORT deflateInit_(strm, level, version, stream_size)
z_streamp strm;
int level;
const char *version;
int stream_size;
{
return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL,
Z_DEFAULT_STRATEGY, version, stream_size);
/* To do: ignore strm->next_in if we use it as window */
}
另请参阅
使用此方法无法在调试时修改依赖项源代码。 如果这是预期的流程,建议使用 可编辑包。