如何调试实时服务器?

时间:2015-10-15 21:35:50

标签: c debugging gdb

我正在学习一门课程,作为一个问题集需要建立在教师提供的C服务器框架上。我已经完成了服务器,因为它编译没有错误,但正如预期的那样,我得到了奇怪的错误和不可避免的分段错误。我通常使用GDB来追逐这类事情,但我不知道如何做到这一点,我唯一能得到错误的方法是让服务器运行并提交HTTP GET请求。

调试这样的程序有哪些方法?

2 个答案:

答案 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
...