如何调试实时服务器?

How to debug a live server?

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

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

也许将 debug/error 信息记录到服务器中的文件中(每条消息都带有时间戳)?您可以随时检查文件的内容:

2015-10-15-16:42:00 - Log1
2015-10-15-16:42:05 - Log2
2015-10-15-16:42:11 - Error1
...

我发现用 valgrind 启动程序会导致服务器实际 "go live" 并允许内存泄漏调试。我的分段错误来自:

char* extensionlowered = "/0";
strcpy(extensionlowered, extension);
extensionlowered[strlen(extensionlowered) + 1] = '[=10=]';

extensionlowered 只能访问初始 [=13=] 字节。当我试图向其中复制更多内容时,我导致了分段错误。固定码是

char* extensionlowered = malloc(sizeof(extension) + 1);
strcpy(extensionlowered, extension);
extensionlowered[strlen(extensionlowered) + 1] = '[=11=]';

编辑:

此外,如果使用 GDB 启动服务器并设置了断点,服务器将 "go live" 但在断点允许之前不会响应请求。所以我启动了 gdb gdb server,然后是 break (line),然后是 run arg 1 arg 2 arg 3。当我 step 浏览程序并进入主循环时服务器上线,并在适当的时间响应请求。