如何调试CgiCC应用程序

时间:2011-09-02 15:00:34

标签: c++ cgi

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

我该如何调试?当我实现我的cgicc类时,该程序保持并等待CGI输入我想。

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

修改
我快到了。

  1. 我在浏览时捕获了流量并将该内容写入文件。
  2. 然后我将stdin重定向到该文件:“< input.txt”作为visual studio中的调试命令行参数。
  3. 我在窗口下设置了一些环境变量,如CONTENT_LENGTH和CONTENT_TYPE。
  4. 之后,我可以从我的输入中读取一些内容,如下所示:

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

    但我得到了一个例外(从未分配的内存读取和类似的异常),同时这样做:

    vector<FormFile, allocator<FormFile>> files = cgi.getFiles();
    
    如果正确加载,

    某种程度上不会翻转。

2 个答案:

答案 0 :(得分:2)

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

就环境变量而言,here是作为CGI协议一部分的环境变量的列表。我建议您通过捕获生产Web服务器为工作cgi应用程序提供的环境,手动或更好地设置所有这些。由于环境变量是由子进程继承的,如果您在Windows命令提示符下的环境中设置它们,然后从同一窗口调用Visual Studio IDE,那么当您的CGI应用程序在调试器内启动时以及何时启用这些变量你没有调试就运行它。

在您的情况下,获取标准输入替换可能会更复杂,因为您正在使用文件上载表单。 This site包含一个模板,可以让您开始使用multipart / form-data格式。通过表单上传文件的官方文档是RFC 1867

我希望这会有所帮助。

答案 1 :(得分:2)

我自己解决了:

  1. 使用与我编译项目相同的Visual Studio版本构建cgicc。
  2. 将cgicc构建为静态库而不是动态库。
  3. 设置预处理器在我的项目中定义CGICC_EXPORTS,激活__declspec(dllexport)。
  4. 然后它奏效了!