如何调试CgiCC应用程序

Howto Debug CgiCC App

本文关键字:CgiCC 应用程序 调试 何调试      更新时间:2023-10-16

我为windows和linux开发了一个Win32 C++cgi应用程序,并从头开始。我使用CgiCC作为库,使用Visual Studio 2010作为IDE。

我如何调试它?当我安装cgcc类时,程序会保持并等待CGI输入。

如何为我的CGI输入设置环境
我设置了一些环境变量,比如QUERY_STRING
但我不知道如何提供我的cgi应用程序在网络服务器上运行时所获得的值。

编辑:
我快到了

  1. 我在浏览时捕捉到了流量,并将内容写入了一个文件
  2. 然后,我将stdin重定向到那个文件:"<input.txt"作为visualstudio中的调试命令行参数
  3. 我在诸如CONTENT_LENGTH和CONTENT_TYPE之类的窗口下设置了一些环境变量

之后,我可以从我的输入中读取一些内容,如下所示:

cgicc::Cgicc cgi;
string u = cgi("user");

但在执行此操作时,我遇到了一个异常(从未分配的内存中读取以及类似的异常(:

vector<FormFile, allocator<FormFile>> files = cgi.getFiles();

如果加载正确,不知何故并非所有内容。

CGI应用程序通过环境变量和标准输入接收输入,因此您可以轻松复制web服务器为CGI任务设置的环境。

至于环境变量,这里列出了CGI协议中的环境变量。我建议您手动或更好地通过捕获生产web服务器提供给正在工作的cgi应用程序的环境来设置所有这些。由于环境变量是由子进程继承的,如果您在Windows命令提示符内的环境中设置这些变量,然后从同一窗口调用Visual Studio IDE,则当CGI应用程序在调试器内启动时,以及在不进行调试的情况下运行时,这些变量都将可用。

在您的情况下,获取标准输入替换可能会有点复杂,因为您使用的是文件上传表单。此网站包含一个模板,应该可以让您开始使用多部分/表单数据格式。通过表格上传文件的官方文件是RFC 1867。

我希望这能有所帮助。

自己解决:

  1. 使用与我编译项目相同的visual studio版本构建cgicc
  2. 将cgicc构建为静态库,而不是动态库
  3. 在我激活__declspec(dllexport(的项目中设置预处理器定义CGICC_EXPORTS

然后就成功了!