C++ C++;服务器崩溃有时会发出信号
我的发球手有时在球员走动时会崩溃。 我试图用调试器运行它,但服务器出现错误:程序收到信号SIGILL,指令非法 它显示LogicHandler中的第59行。 这是函数运行。 以下是该函数:C++ C++;服务器崩溃有时会发出信号,c++,debugging,crash,C++,Debugging,Crash,我的发球手有时在球员走动时会崩溃。 我试图用调试器运行它,但服务器出现错误:程序收到信号SIGILL,指令非法 它显示LogicHandler中的第59行。 这是函数运行。 以下是该函数: void LogicHandler::run() { try { unsigned short packetID = (packet->getGroup() * 666) + packet->getType(); switch (packetID)
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;
}
void LogicHandler::run()
{
尝试
{
无符号短packetID=(packet->getGroup()*666)+packet->getType();
交换机(packetID)
{
案例666:
handleQuit();
打破
案例670:
handleLogin();
打破
案例672:
handleCreateCharacter();
打破
案例673:
handleDeleteActor();
打破
案例675:
handleSelectCharacter();
打破
判例1345:
handleMove()似乎您的问题完全在别处。如果您使用带有虚拟函数的类,则可能是您没有正确处理内存并覆盖类,因此调用了未定义的指令。请使用valgrind
等工具清理内存写入。Sigill表示您正在损坏内存通过在调用之前的某个点用数据覆盖函数handleMove()地址处的内存,查找缓冲区溢出。因此,您尝试执行的不是handleMove(),而是作为代码没有意义的数据,因此SIGILL
在您的环境中,是否可以选择使用electric fence进行编译?如果不是,请使用调试器小心地逐步执行。并在写入函数handlemove地址处的内存时中断