负载均衡OJ项目中遇到的问题

1、续行符问题

关于换行符 ,代码在使用了换行符后无法编译文件,也没有爆出任何错误,更没有按照我们的代码打印出如下类似内容

ERRORcompiler.hpp661732635247编译失败,没有形成可执行程序

随机排查才发现。

代码中的 \续行符,用于在 C/C++ 源代码中将一行代码拆分为多行。其主要作用是告诉编译器:"当前行还没有结束,下一行是它的继续"。如果滥用或误用续行符,可能会导致代码行为异常。


删除\后又出现:

bash 复制代码
[LHL@VM-8-7-centos compile_server]$ ./compile_server
申请的进程PID:28530
申请的进程PID:0
[DEBUG][compiler.hpp][67][1732671807]./tempcode.cpp
[ERROR][compiler.hpp][68][1732671807]编译失败,没有形成可执行程序

问题,重新使用\符号,并清除后面的空格后正常。

为什么去掉 \ 后程序正常?

在你的代码中:

cpp 复制代码
execlp("g++", "g++", "-o", PathUtil::Exe(file_name).c_str(),\
       PathUtil::Src(file_name).c_str(), "-std=c++11", nullptr /*不要忘记nullptr结尾*/);
  • \ 的作用是将代码分成两行,逻辑上视为一整行。
  • 如果 execlp 的参数列表已经完整 ,则使用 \ 并不必要。
  • 如果后面的行存在多余的空格或不可见字符,execlp 的行为可能会受到影响,导致编译器或运行时处理异常。

去掉 \ 后代码变为:

cpp 复制代码
execlp("g++", "g++", "-o", PathUtil::Exe(file_name).c_str(), 
       PathUtil::Src(file_name).c_str(), "-std=c++11", nullptr /*不要忘记nullptr结尾*/);

这种情况下,每个参数显式地分开,且没有多余的续行逻辑,编译器直接处理整个语句,不会因隐藏字符问题导致错误。


续行符可能引发的问题

  1. 隐藏的空格或不可见字符

    如果 \ 后有空格或 Tab,续行符会失效,导致编译器视后续部分为单独一行。例如:

    cpp 复制代码
    execlp("g++", "g++", "-o", PathUtil::Exe(file_name).c_str(),\    
    PathUtil::Src(file_name).c_str(), "-std=c++11", nullptr);

    上面代码中,\ 后的空格会导致下一行被独立解析,参数传递失败。

  2. 滥用续行符破坏代码可读性

    使用过多的续行符会让代码变得复杂和难以维护。如果一行代码不长,尽量不要用 \

  3. 难以调试

    如果 execlp 出现问题,比如执行失败,错误日志可能无法正确定位问题原因。


  • 续行符 \ 是为分割长行代码而设计的,去掉它让代码写成单行,有助于避免隐藏字符等潜在问题。
  • 如果保留续行符,需严格检查后续行是否有多余字符。
  • 优化日志记录以便于调试参数错误。

2、umask问题

启动http服务后浏览器无法访问的问题

启动服务端后,在网页中并无法访问服务器端口,经排查原因如下:

检查云平台的安全组规则: 确保在云平台(如阿里云、AWS、腾讯云等)控制台中,安全组规则允许 8080 端口的流量通过。你需要为服务器的公网 IP(49.232.209.35)开放 TCP 端口 8080。

在云平台的控制台中,找到相应的安全组,确保添加了允许来自 任何地方(0.0.0.0/0) 或特定 IP 地址的 8080 端口 TCP 流量。

如上如所示添加相关项即可。

cpp 复制代码
#include "compiler.hpp"
#include "runner.hpp"
#include "compile_run.hpp"
#include "../comm/httplib.h"

using namespace ns_complier;
using namespace ns_runner;
using namespace ns_compile_and_run;
using namespace httplib;


/*编译服务随时可能被多个人请求,必须保证传递上来的code,
形成的源文件名称具有唯一性,否则多用户之间会相互影响
*/
int main()
{
    //提供的编译服务,打包形成一个网络服务
    //cpp-httplib
    Server svr;
    svr.Get("/hello",[](const Request &req,Response &resp){
        resp.set_content("hello httplib,你好 httplib!","content-type: text/plain;charset=utf-8");
    });
    svr.listen("0.0.0.0",8080); //启动http服务
    return 0;
相关推荐
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
AI职业加油站2 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
此冬歌咏2 天前
K8s 节点故障实战:优雅驱逐 31 秒,硬故障 331 秒,以及那个永远 Pending 的 Pod
运维·k8s
-梅2 天前
linux(8) 软硬链接
linux·运维·服务器
张洛闻Eren3 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
其实防守也摸鱼3 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
布裘3 天前
【银河麒麟】V4桌面图标消失,右击鼠标没反应排查
运维·银河麒麟·桌面环境
懂软件的胡子个哥3 天前
微信机器人为什么需要“回复候选”而不是所有 AI 内容直接发送
运维·微信·自动化·wechatapi·个人微信号二次开发
云贝贝贝3 天前
腾讯云 TDSQL(MySQL 版)性能优化与慢查询排障实战 6 招
运维·腾讯云
Lsetea3 天前
证书没到期却报certificate has expired:OpenSSL定位中间证书与系统时间
运维·https·ssl证书·openssl·证书链