debugging - 如何调试 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 而不是系统版本。
解决方案分为两个阶段:
然后可以使用 linux 命令ldd
检查程序是否加载了正确版本的 libcurl.so。但请记住,更改图示路径以适应您的开发环境。
然后我可以调试 curl 代码。经过一点调试,我找到了解决问题的方法——使用带有 curl 选项的回调函数集报告了“缺失”的 IMAP 详细信息CURLOPT_HEADERFUNCTION
。实现这个回调函数给了我“缺失”的消息数据。
推荐阅读
- typescript - 如何在不共享 Express Requests 的情况下创建 Typescript Map
- mongodb - MongoError:此 MongoDB 部署不支持可重试写入。请将 retryWrites=false 添加到您的连接字符串
- r - 如何根据 dplyr 管道中另一列的第一行的值重命名列
- c# - RenderTargetBitmap 获取我的 UserControl 的空图像
- ios - 如何在 iOS 13 中的 Swift 中立即更改状态栏文本颜色
- javascript - 日期验证JS
- javascript - 15 年的规模太大,看不到短期事件(两天左右)
- angular - NodeJs、Angular 和 Express 中的过滤器不会过滤结果
- module - 使用 composer 和 drush 管理 drupal 8 模块
- c++ - 无法在 cairomm/gtkmm 上下文中显示文本