调试收获

今天下午就qt程序使用post访问cgi程序出错的问题向好帅老师请教,在观看他调试的过程中我学到了很多东西,现大致记录老师的调试过程如下:

0.“queryplay”这个cgi程序无法被qt调用后返回正确信息,于是在queryplay的源码中不同加入了许多的“printf”进行测试,发现qt端无法接受到任何一个添加的“printf”所输出的信息,只有系统本身返回的错误信息,这证明该cgi程序根本没有被调用,那是不是这段qt代码的问题呢,于是继续往下。

1.测试一个很简单的cgi程序:“hello”,可以接收到该cgi小程序中输出的信息,证明至少调用“hello”的qt代码是正确的,或者说是可用的

2.将访问hello的qt代码 复制,然后注释掉,再在同样的位置粘贴,将“hello”改成调用时出错的cgi程序的名字“queryplay”,即用调用hello的代码调用“queryplay”测试发现出错,仍然无法调用该cgi,证明错不在qt,或者说qt之外的部分是有错误的

3.仔细对比“hello”与“query”的不同,发现如下信息:

    (1)代码不同,这里的源码包括“.c”文件和“.h”文件

    (2)编译方式不同,hello使用的简单的arm-linux-gcc -o hello hello.c,“queryplay”使用了makefile文件进行编译,makefile文件中有对库的引用

4.那么将“queryplay”中主函数代码注释掉,换成hello的,再编译,发现调用“queryplay”还是出错,这就说明错误还没找出来,还得继续

5.再将“queryplay”中的头文件都注释掉,只剩余一个和“hello”一样简单的“#include<stdio.h>”,编译,调用还是出错,错误没找出来,尽管这不能证明“queryplay”文件的源码是清白的,但显然其他地方还有错误,还得继续寻找

6.将目光放在编译方式,仔细观察makefile文件,发现编译时调用了“sqlite”库与“json”库,将调用库的信息去掉,编译,则调用“queryplay”不报错,那么现在就可以证明,凶手隐藏在对库的编译调用上

7.查看makefile中调用库的路径,发现调用路径正确;编写简单的小程序测试库,发现移植的这两个库是可用的,这证明库没有错

8.库没有错,但是编译时调用库就会导致调用CGI出错,于是推测boa服务器不支持编译时调用了库的cgi程序,回宿舍后咨询度娘,发现果然,boa不支持动态库编译的程序,将makefile文件中编译选项中加入静态编译选项“-static”就好了,这是才反应过来,原来第三步中的编译方式不同还隐含着动态编译与静态编译的区别。

9.以上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值