C++服务器有时会崩溃
C++ Server crashes sometimes SIGILL
当玩家四处走动时,我的 sevrer 有时会崩溃。我尝试使用调试器运行它,但服务器出现错误:程序收到信号SIGILL,非法指令。
它显示了 LogicHandler 中的第 59 行。它是函数运行。这是该函数:
void LogicHandler::run()
{
try
{
unsigned short packetID = (packet->getGroup() * 666) + packet->getType();
switch (packetID)
{
case 666:
handleQuit();
break;
case 670:
handleLogin();
break;
case 672:
handleCreateCharacter();
break;
case 673:
handleDeleteActor();
break;
case 675:
handleSelectCharacter();
break;
case 1345:
handleMove(); <- HERE OCCURS SIGILL
break;
case 11332:
if(!connection.isLogged())
{
throw Poco::Exception("Unlogged access.");
}
connection.sendPing();
default:
if(!connection.isLogged())
{
throw Poco::Exception("Unlogged access.");
}
connection.sendPing();
break;
}
}
catch(...)
{
connection.shutdownConnection();
}
delete this;
}
这是调试器输出:
程序收到信号SIGILL,非法指令。在??() ()
1 0x0040624d in LogicHandler::run (this=0x3e9be0) at F:\EternalHeroes\server\src\game\src\handler\LogicHandler.cpp:59
F:\永恒英雄\服务器\src\game\src\handler\LogicHandler.cpp:59:1387:beg:0x40624dat F:\EternalHeroes\server\src\game\src\handler\LogicHandler.cpp:59
1 0x0040624d in LogicHandler::run (this=0x3e9be0) at F:\EternalHeroes\server\src\game\src\handler\LogicHandler.cpp:59
F:\永恒英雄\服务器\src\game\src\handler\LogicHandler.cpp:59:1387:beg:0x40624d继续。。。程序收到信号SIGILL,非法指令。在??() ()
1 0x0040624d in LogicHandler::run (this=0x3e9be0) at F:\EternalHeroes\server\src\game\src\handler\LogicHandler.cpp:59
F:\永恒英雄\服务器\src\game\src\handler\LogicHandler.cpp:59:1387:beg:0x40624dat F:\EternalHeroes\server\src\game\src\handler\LogicHandler.cpp:59
1 0x0040624d in LogicHandler::run (this=0x3e9be0) at F:\EternalHeroes\server\src\game\src\handler\LogicHandler.cpp:59
F:\永恒英雄\服务器\src\game\src\handler\LogicHandler.cpp:59:1387:beg:0x40624d继续。。。[下级 1(进程 29040)使用代码退出030000000035] 调试器已完成,状态为 0
似乎你的问题完全在别处。如果您使用带有虚函数的类,则可能是您没有正确处理内存并覆盖类的 vtable,因此调用未定义的指令。使用valgrind
等工具来清理内存写入。
Sigill表示通过在调用前的某个时间点用数据覆盖函数handleMove()地址处的内存来破坏内存。查找缓冲区溢出。因此,您不是执行handlemove(),而是尝试执行没有代码意义的数据,因此SIGILL。
在您的环境中使用电子围栏进行编译是一种选择吗?如果没有,则需要使用调试器仔细执行。并在写入函数 handleMove 地址处的内存时中断。
- 调试编译的服务器在数据库打开时崩溃
- C/C++ Linux 上的多线程服务器/客户端崩溃
- 在 Ubuntu 服务器上运行 QT 应用程序时崩溃
- VS-2019程序在某些服务器上的第一条浮点指令上崩溃
- 如何调试 gRPC 服务器崩溃而没有任何错误
- GPRC服务器在处理的第二请求下崩溃
- 使用ActiveX服务器调用QCoreApplication :: grainments()崩溃
- 服务器在请求已经处理请求时收到请求时会崩溃
- Unix域套接字(C++)-客户端使服务器守护进程崩溃
- 执行析构函数时,服务器应用程序总是崩溃
- 如果我访问该页面,带有casablanca的http服务器将崩溃
- QTcpSocket/QTCP服务器内存管理/服务器崩溃
- 避免服务器因故障而崩溃".so"
- 带有libpion的服务器在处理请求时崩溃
- C++服务器有时会崩溃
- 在VMWare机器上编译的程序在亚马逊服务器上运行时会因非法指令而崩溃
- Winsock2错误:服务器在连接到客户端时崩溃
- zeromq: PULL/PUSH客户端在连接31后崩溃.windows上的服务器
- OpenMAX AL在信号6 (SIGABRT)时崩溃.媒体服务器死亡
- 与JNI崩溃服务器JVM的访问冲突