我正在学习一门课程,作为一个问题集需要建立在教师提供的C服务器框架上。我已经完成了服务器,因为它编译没有错误,但正如预期的那样,我得到了奇怪的错误和不可避免的分段错误。我通常使用GDB来追逐这类事情,但我不知道如何做到这一点,我唯一能得到错误的方法是让服务器运行并提交HTTP GET请求。
调试这样的程序有哪些方法?
答案 0 :(得分:1)
我发现使用valgrind启动程序将导致服务器实际“上线”并允许内存泄漏调试。我的分段错误来自:
char* extensionlowered = "/0";
strcpy(extensionlowered, extension);
extensionlowered[strlen(extensionlowered) + 1] = '\0';
extensionlowered
只能访问初始的\0
字节。当我尝试将更多内容复制到其中时,我导致了分段错误。固定代码是
char* extensionlowered = malloc(sizeof(extension) + 1);
strcpy(extensionlowered, extension);
extensionlowered[strlen(extensionlowered) + 1] = '\0';
编辑:
此外,如果使用GDB启动服务器和断点集,服务器将“上线”,但在断点允许之前不会响应请求。所以我启动了gdb gdb server
,然后是break (line)
,然后是run arg 1 arg 2 arg 3
。当我step
通过程序并进入主循环时,服务器上线,并在适当的时间响应请求。
答案 1 :(得分:0)
或许将调试/错误信息记录到服务器中的文件中(每条带有时间戳的消息)?您始终可以检查文件的内容:
2015-10-15-16:42:00 - Log1
2015-10-15-16:42:05 - Log2
2015-10-15-16:42:11 - Error1
...