首页 > 解决方案 > 如何调试 libcurl 以解决 IMAP 问题

问题描述

我正在开发自己的 IMAP 应用程序来读取和处理来自使用 IMAP 的电子邮件服务器的特定电子邮件消息。我的开发环境是 Ubuntu 20 LTS,使用eclipse-CDT

我决定使用 libcurl 作为电子邮件服务器的接口,因为我在另一个项目中成功使用了它。我的问题是,当我进行 IMAP 提取(例如)时,我无法看到所有响应FETCH 4 (BODY.PEEK[1])。我可以看到 libcurl 与服务器正确对应,并且(通过启用该CURLOPT_VERBOSE选项),我确实可以看到 libcurl 正在从电子邮件服务器接收“丢失”消息文本。我显然需要说服 libcurl 给我“缺失”的细节。

问题是:如何?使用已安装的 libcurl 版本,我无法从我的程序调试到 libcurl,因为已安装的 libcurl 版本没有调试符号。我的解决方案如下。

标签: debuggingimapeclipse-cdtlibcurl

解决方案


curl 的源代码可从https://curl.se/获得。我的第一次尝试是安装最新版本的 Curl 并用于sudo make install在系统中已安装的库上安装 curl 库。这并不成功,我不得不使用备份从几天前创建的保存点恢复我的 Ubuntu 系统。幸运的是,我对备份有点偏执!然后,我下载了与我的 Ubuntu 系统中已安装的 curl 版本相对应的 curl 源代码,并使用该./configure --enable-debug选项将它们编译到本地目录中,以生成带有调试符号的 libcurl 调试版本。下一个问题是说服 eclipse 加载我本地版本的 libcurl 而不是系统版本。

解决方案分为两个阶段:

  • 首先将eclipse项目设置为包含本地版本的 libcurl,如下图所示:在此处输入图像描述

  • 现在在Eclipse中为您的项目设置调试配置中的 linuxLD_LIBRARY_PATH环境变量,使其指向包含 libcurl.so 的本地目录,如下图所示:在此处输入图像描述

然后可以使用 linux 命令ldd检查程序是否加载了正确版本的 libcurl.so。但请记住,更改图示路径以适应您的开发环境。

然后我可以调试 curl 代码。经过一点调试,我找到了解决问题的方法——使用带有 curl 选项的回调函数集报告了“缺失”的 IMAP 详细信息CURLOPT_HEADERFUNCTION。实现这个回调函数给了我“缺失”的消息数据。


推荐阅读