我正在学习一门课程,作为一个问题集,它需要建立在教师提供的C服务器框架上。我已经完成了服务器故障,因为它编译没有错误,但正如预期的那样,我得到奇怪的错误和不可避免的分割错误。我通常使用GDB来追踪这类事情,但我不确定当我唯一能得到错误的方法是让服务器运行并提交一个HTTP get请求时,如何做到这一点。
有什么方法可以调试这样的程序?
最佳答案
我发现用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
。当我通过程序进入主循环并在适当的时间响应请求时,服务器就联机了。