Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging 如何调试libcurl以解决IMAP问题_Debugging_Imap_Eclipse Cdt_Libcurl - Fatal编程技术网

Debugging 如何调试libcurl以解决IMAP问题

Debugging 如何调试libcurl以解决IMAP问题,debugging,imap,eclipse-cdt,libcurl,Debugging,Imap,Eclipse Cdt,Libcurl,我正在开发自己的IMAP应用程序,以便使用IMAP从电子邮件服务器读取和处理特定的电子邮件。我的开发环境是Ubuntu20LTS,使用EclipseCDT 我决定使用libcurl作为电子邮件服务器的接口,因为我在另一个项目中成功地使用了它。我的问题是,当我进行IMAP获取(例如fetch4(BODY.PEEK[1]))时,我无法看到所有的响应。我可以看到libcurl与服务器正确地对应,并且(通过启用CURLOPT_VERBOSE选项),我确实可以看到libcurl正在从电子邮件服务器接收“丢

我正在开发自己的IMAP应用程序,以便使用IMAP从电子邮件服务器读取和处理特定的电子邮件。我的开发环境是Ubuntu20LTS,使用EclipseCDT

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


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

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

解决方案分为两个阶段:

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

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

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

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