微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我如何调试 libcurl 来解决 IMAP 问题

如何解决我如何调试 libcurl 来解决 IMAP 问题

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

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

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

解决方法

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

解决方案分为两个阶段:

  • 首先将 eclipse 项目设置为包含本地版本的 libcurl,如下图所示:enter image description here

  • 现在在 eclipse 中为您的项目的调试配置中设置 linux LD_LIBRARY_PATH 环境变量以指向包含 libcurl.so 的本地目录,如下图所示:enter image description here

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

然后我可以调试 curl 代码。经过一些调试后,我找到了问题的解决方案 - 使用 curl 选项 CURLOPT_HEADERFUNCTION 设置的回调函数报告了“丢失”的 IMAP 详细信息。实现这个回调函数给了我“丢失”的消息数据。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。