如何调试实时服务器?
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
浏览程序并进入主循环时服务器上线,并在适当的时间响应请求。
我正在学习一门课程,该课程的问题集需要建立在教师提供的 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
浏览程序并进入主循环时服务器上线,并在适当的时间响应请求。