|
我在做一个omnet++仿真时,遇到一个困扰了好多天的错误
以下是相关源码:
请各位大佬帮忙指点一下迷津
#include "include\sdn.h"
#include <stdlib.h>
// #include "include\exchndl.h"
#include <stdio.h>
#include <unordered_map>
#include <vector>
#include <omnetpp.h>
#include <omnetpp\cqueue.h>
#include "omnetpp/cqueue.h"
#include "RegistryPacket_m.h"
#include "Datagram_m.h"
#include "RoutingData_m.h"
#include "Timer_m.h"
#include "HelloAnswer_m.h"
using namespace omnetpp;
using std::pair;
using std::shared_ptr;
using std::unordered_map;
using std::vector;
class LEO_EX : public cSimpleModule
{
private:
unordered_map<int, bool> neighbors; //闂侇叀顕ч惇鎶芥儍閸掔惢dex
cQueue queue;
int routingTable[LINES * COLUMNS];
int i; //璁℃椂鍣ㄥ簭鍙�
int lines;
int columns;
int dest;
int faultModuleNum;
double faultTime;
double hello_timeout;
double valid_time;
int ISL; //閭诲眳杩炴帴鏁伴噺
//vector<Timer *> *timers;
double restore_time;
double processing_time; //数据包处理时间
double l2l_propagationDelay;
double l2l_duration;
double l2g_propagationDelay;
double l2g_duration;
int maxPktLength;
int minPktLength;
int64_t pktLength;
long numSent;
long numReceived;
double totalBits;
double time;
protected:
cFSM fsm;
cOutVector throughputVec;
cOutVector endToEndDelayVec;
enum
{
INIT = 0,
CONNECTING = FSM_Steady(1),
REGISTER = FSM_Steady(2),
ONLINE = FSM_Steady(3),
OFFLINE = FSM_Steady(4),
};
virtual void initialize() override;
virtual void handleMessage(cMessage *msg) override;
virtual cMessage *generateHelloMessage();
RegistryPacket *generateNeighborMessage(int mode);
virtual void getNeighbors();
virtual void registerInGEO();
void sendNeighborInfo(int mode);
virtual RoutingData *generateRoutingRequest(Datagram *msg);
virtual void forwardDatagram(Datagram *msg, int portNum);
virtual void initialRoutingTable();
virtual void sendRoutingRequest(Datagram *msg);
virtual int getNextHop(int destAddr);
virtual void setRouting(int destAddr, int srcAddr);
virtual void sendDatagram();
virtual Datagram *generateDatagram();
//const char *const gen(int i);
void setTimer(double timeout, int kind, int moduleId = 100);
void destroy();
void sayHello(cModule *module);
void probeNeighbors();
void answerHello(cModule *source);
void enableConnectionTo(int id);
HelloAnswer *generateHelloAnswer(double valid_time);
void disableConnectionTo(int id);
void refreshDisplay() const override;
void sendLater(cMessage *msg);
//public:
//LEO_EX();
//~LEO_EX();
};
/*
LEO_EX::LEO_EX()
{
ExcHndlInit();
}
*/
Define_Module(LEO_EX);
/*LEO_EX::LEO_EX()
{
}*/ /*
LEO_EX::~LEO_EX()
{
//delete neighbors;
}*/
void LEO_EX::initialize()
{
EV << "My name is " << getFullName() << endl;
EV << "I belong to " << getParentModule() << endl;
EV << "There are " << getVectorSize() << " modules in the module vector I am in" << endl;
EV << "My Index is " << getIndex() << endl;
lines = LINES;
columns = COLUMNS;
queue = cQueue("queue");
dest = par("dest");
//WATCH(dest);
hello_timeout = par("hello_timeout").doubleValue();
//WATCH(hello_timeout);
faultModuleNum = par("faultModuleNum");
//WATCH(faultModuleNum);
faultTime = par("faultTime");
//WATCH(faultTime);
valid_time = par("valid_time");
//WATCH(valid_time);
ISL = 0;
gate(findGate("radioIn"))->setDeliverOnReceptionStart(true);
processing_time = truncnormal(par("processing_time_mean").doubleValue(), par("processing_time_stddev").doubleValue());
//WATCH(restore_time);
restore_time = par("restore_time").doubleValue();
//WATCH(processing_time);
l2l_propagationDelay = truncnormal(par("l2l_propagationDelay_mean").doubleValue(), par("l2l_propagationDelay_stddev").doubleValue());
//WATCH(l2l_propagationDelay);
l2l_duration = exponential(par("l2l_duration_mean").doubleValue());
//WATCH(l2l_duration);
l2g_propagationDelay = truncnormal(par("l2g_propagationDelay_mean").doubleValue(), par("l2g_propagationDelay_stddev").doubleValue());
//WATCH(l2g_propagationDelay);
l2g_duration = exponential(par("l2g_duration_mean").doubleValue());
//WATCH(l2g_duration);
minPktLength = par("minPktLength");
minPktLength = par("maxPktLength");
pktLength = intrand(maxPktLength, 8);
numSent = 0;
//WATCH(numSent);
numReceived = 0;
//WATCH(numReceived);
totalBits = 0.0;
endToEndDelayVec.setName("End-to-End Delay");
endToEndDelayVec.setUnit("s");
throughputVec.setName("Throughput");
throughputVec.setUnit("kB/s");
getNeighbors();
probeNeighbors();
initialRoutingTable();
EV << "Registering in GEO..." << endl;
//EV << "Starting sending datagram..." << endl;
//sendDatagram();
}
void LEO_EX::handleMessage(cMessage *msg)
{
Datagram *data = nullptr;
FSM_Switch(fsm)
{
case FSM_Exit(INIT):
setTimer(faultTime, FAULT);
FSM_Goto(fsm, CONNECTING);
break;
case FSM_Enter(CONNECTING):
{
int b = msg->getKind();
EV << "type:" << b << endl;
switch (b)
{
case HELLO:
{
cModule *source = msg->getSenderModule();
int id = source->getIndex();
enableConnectionTo(id);
setRouting(id, id);
ISL++;
answerHello(source);
break;
}
case HELLO_TIMEOUT:
ISL++;
break;
case HELLO_ANSWER:
{
HelloAnswer *answer;
//answer = msg;
answer = check_and_cast<HelloAnswer *>(msg);
double repeatTime = answer->getValidTime();
setTimer(repeatTime, CONNECTING_TIME, answer->getSenderModule()->getIndex());
//delete answer;
//delete msg;
break;
}
}
delete msg;
//cancelAndDelete(msg);
break;
}
case FSM_Exit(CONNECTING):
{
int j = 0;
for (auto &x : neighbors)
{
if (x.second)
{
j++;
}
}
if (j == (int)neighbors.size())
{
registerInGEO();
FSM_Goto(fsm, REGISTER);
}
break;
}
case FSM_Enter(REGISTER):
/*if (msg->isScheduled())
{
//int timerNum = atoi(msg->getName());
//EV << "Cancel and delete " << (*timers)[timerNum] << " \n";
//cancelAndDelete((*timers)[timerNum]);
//registerInGEO();
}*/
if (msg->getKind() == NEIGHBOR_QUERY)
{
sendNeighborInfo(INIT_NEIGHBOR);
sendDatagram();
}
else if (msg->getKind() == HELLO_ANSWER)
{
HelloAnswer *answer;
//answer = msg;
answer = check_and_cast<HelloAnswer *>(msg);
double repeatTime = answer->getValidTime();
setTimer(repeatTime, CONNECTING_TIME, answer->getSenderModule()->getIndex());
delete answer;
}
//delete msg;
break;
case FSM_Exit(REGISTER):
FSM_Goto(fsm, ONLINE);
break;
case FSM_Enter(ONLINE):
{
// Datagram *data = nullptr;
int kind = msg->getKind();
if (kind == DATAGRAM)
{
//data = check_and_cast<Datagram *>(msg);
EV << getFullName() << ":Received Packet " << msg << endl;
break;
}
else if (kind == ROUTE_ANSWER)
{
RoutingData *routingData = check_and_cast<RoutingData *>(msg);
// cPacket *pkt = routingData->decapsulate();
//cPacket *pkt = routingData->decapsulate();
// data = check_and_cast<Datagram *>(pkt);
data = routingData->getData();
if (routingData->getNextHop() == NOT_FOUND)
{
sendLater(data);
data = nullptr;
}
else
{
setRouting(routingData->getDestAddr(), routingData->getNextHop());
}
// delete pkt;
// delete routingData;
break;
}
else if (kind == PROCESSED)
{
EV << "Replying!\n";
sendDatagram();
break;
}
else if (kind == CONNECTION_EXPIRED)
{
Timer *timer = check_and_cast<Timer *>(msg);
int id = timer->getModuleId();
disableConnectionTo(id);
setRouting(id, UNKNOWN);
sendNeighborInfo(UPDATE_NEIGHBOR);
cancelAndDelete(msg);
break;
}
else if (kind == HELLO_ANSWER)
{
HelloAnswer *answer;
//answer = msg;
answer = check_and_cast<HelloAnswer *>(msg);
double repeatTime = answer->getValidTime();
setTimer(repeatTime, CONNECTING_TIME, answer->getSenderModule()->getIndex());
delete msg;
break;
}
if (data != nullptr)
{
int dest = data->getDestAddr();
if (dest == getIndex()) //闁烩晩鍠楅悥锝夊捶閺夋寧绲诲☉鎾荤細閸ゆ粌顔忛敓锟�
{
numReceived++;
double Mbytes = data->getByteLength() / 1024.0 / 1024.0;
totalBits += Mbytes;
EV << getFullName() << ":Destination is me,processing!" << endl;
EV << getFullName() << "Recorded EndToEnd Delay!" << endl;
simtime_t eed = simTime() - msg->getCreationTime();
endToEndDelayVec.record(eed);
time = simTime().dbl();
double tbs = totalBits / time;
throughputVec.record(tbs);
setTimer(processing_time, PROCESSED);
}
else //闁烩晩鍠楅悥锝夊捶閺夋寧绲诲☉鎾崇У濡叉悂鎳涢鍕畳
{
int k = getNextHop(dest);
if (k != UNKNOWN)
{
EV << getFullName() << ":Found next hop " << k << " to " << dest << " in route table\n";
forwardDatagram(data->dup(), k);
EV << getFullName() << ":Forwarding packet " << data << " to " << k << endl;
}
else
{
EV << getFullName() << ":Can't find next hop to " << dest << " in route table\n";
sendRoutingRequest(data);
EV << getFullName() << ":Sending routing request to " << dest << " to GEO\n";
}
}
data = nullptr;
}
break;
}
case FSM_Exit(ONLINE):
if (faultTime - simTime().dbl() < 0.0001)
{
if (faultModuleNum == getIndex())
{
EV << getFullName() << ":No." << faultModuleNum << " is time to destroy!" << endl;
setTimer(restore_time, NORMAL);
FSM_Goto(fsm, OFFLINE);
EV << "Broken!\n";
}
}
else if (msg->getKind() == CONNECTING_TIME)
{
Timer *timer = check_and_cast<Timer *>(msg);
cModule *network = getParentModule();
int id = timer->getModuleId();
cModule *neighbor = network->getSubmodule("leo", id);
EV << "Saying hello to " << neighbor << endl;
ISL--;
FSM_Goto(fsm, ONLINE);
sayHello(neighbor);
cancelAndDelete(msg);
}
break;
case FSM_Enter(OFFLINE):
{
EV << "Drop message simply!\n";
/*if (check_and_cast<Timer *>(msg) != nullptr)
{
getSimulation();
}
else
{
delete msg;
}*/
// if (msg->isScheduled())
// {
// cancelAndDelete(msg);
// }
// else
// {
// queue.insert(msg);
// /* code */
// }
queue.insert(msg);
//getSimulation()->dropAndDelete(msg);
EV << "Store message in queue simply!\n";
//cObject *obj = msg->getOwner();
// EV << "msg->getOwner ():" << obj << endl;
//bool is = msg->isOwnedObject();
//bool be = queue.getTakeOwnership();
//EV << "msg->isOwnedObject():" << is << endl;
//EV << "getTakeOwnerShip():" << be << endl;
break;
}
case FSM_Exit(OFFLINE):
if (msg->getKind() == NORMAL)
{
if (faultModuleNum == getIndex())
{
EV << getFullName() << ":No." << faultModuleNum << " is time to resume!" << endl;
FSM_Goto(fsm, ONLINE);
while (!queue.isEmpty())
{
cMessage *store = (cMessage *)queue.pop();
sendDirect(store, this, "radioIn");
}
EV << "Recovering!\n";
}
}
cancelAndDelete(msg);
break;
}
/*if (dynamic_cast<Timer *>(msg) != nullptr)
{
cancelAndDelete(msg);
}
else
{
delete msg;
}*/
}
/*-------------------------------------------Register routing info-----------------------------------------------------------*/
RegistryPacket *LEO_EX::generateNeighborMessage(int mode)
{
RegistryPacket *neighborInfo = new RegistryPacket("neighbor");
neighborInfo->setKind(mode);
neighborInfo->setNeighbors(neighbors);
return neighborInfo;
}
cMessage *LEO_EX::generateHelloMessage()
{
cPacket *helloMessage = new cPacket("hello");
helloMessage->setKind(HELLO);
return helloMessage;
}
void LEO_EX::getNeighbors()
{
// neighbors = new std::vector<int>();
cModule *parent = getParentModule();
const char *name = getName();
int i = getIndex();
if (parent->getSubmodule(name, i - lines) != nullptr && i / columns != 0)
{
neighbors.insert(pair<int, bool>(i - lines, false));
}
if (parent->getSubmodule(name, i - 1) != nullptr && i % lines != 0)
{
neighbors.insert(pair<int, bool>(i - 1, false));
}
if (parent->getSubmodule(name, i + 1) != nullptr && i % lines != lines - 1)
{
neighbors.insert(pair<int, bool>(i + 1, false));
}
if (parent->getSubmodule(name, i + lines) != nullptr && i / columns != columns - 1)
{
neighbors.insert(pair<int, bool>(i + lines, false));
}
}
void LEO_EX::probeNeighbors()
{
for (auto &x : neighbors)
{
if (!x.second)
{
cModule *parent = getParentModule();
const char *name = getName();
EV << "My name is " << name << endl;
sayHello(parent->getSubmodule(name, x.first));
}
}
}
void LEO_EX::sayHello(cModule *module)
{
setTimer(hello_timeout, HELLO_TIMEOUT);
EV << "Say hello to " << module << endl;
sendDirect(generateHelloMessage(), l2l_propagationDelay, l2l_duration, module, "radioIn");
}
void LEO_EX::answerHello(cModule *source)
{
EV << "Answer to " << source << endl;
sendDirect(generateHelloAnswer(valid_time), l2l_propagationDelay, l2l_duration, source, "radioIn");
setTimer(valid_time, CONNECTION_EXPIRED, source->getIndex());
}
HelloAnswer *LEO_EX::generateHelloAnswer(double valid_time)
{
HelloAnswer *answer = new HelloAnswer("answer");
answer->setKind(HELLO_ANSWER);
answer->setValidTime(valid_time);
return answer;
}
void LEO_EX::registerInGEO()
{
cModule *parent = getParentModule();
cModule *targetModule = parent->getSubmodule(par("observerFullName").stringValue());
EV << "Registry destination is " << targetModule << endl;
sendDirect(generateHelloMessage(), l2g_propagationDelay, l2g_duration, targetModule, "radioIn"); //鍙戦�佹敞鍐屾秷鎭�
// setTimer(2.0); //璁剧疆璁℃椂鍣�
}
void LEO_EX::sendNeighborInfo(int mode)
{
cModule *parent = getParentModule();
cModule *targetModule = parent->getSubmodule(par("observerFullName").stringValue());
EV << "Registry destination is " << targetModule << endl;
sendDirect(generateNeighborMessage(mode), l2g_propagationDelay, l2g_duration, targetModule, "radioIn"); //鍙戦�佹敞鍐屾秷鎭�
}
void LEO_EX::setTimer(double timeout, int kind, int id)
{
//int n = timers->size();
//EV << "There are " << n++ << " timers set in total...\n";
//EV << "Inserting timer " << n << " into Timer map\n";
//cMessage *timer = new cMessage(gen(n));
Timer *timer = new Timer();
timer->setModuleId(id);
timer->setKind(kind);
//timers->push_back(timer);
scheduleAt(simTime() + timeout, timer);
EV << "Set timer at " << simTime() + timeout << "\n";
//EV << "Set timer " << n << "\n";
//int size = timers->size();
//EV << "There are " << size << " timers set in total now...\n";
}
/*
const char *const LEO_EX::gen(int i)
{
char *p = new char[3];
sprintf(p, "%d", i);
return p;
}
*/
void LEO_EX::initialRoutingTable()
{
for (auto &x : routingTable)
{
x = UNKNOWN;
}
for (auto &x : neighbors)
{
int p = x.first;
routingTable[p] = p;
}
}
/*-------------------------------------------Routing request-----------------------------------------------------------*/
void LEO_EX::sendRoutingRequest(Datagram *msg)
{
RoutingData *routingReq = generateRoutingRequest(msg);
//scheduleAt(simTime() + 5.0, timeoutEvent);
cModule *parent = getParentModule();
cModule *router = parent->getSubmodule(par("observerFullName").stringValue());
sendDirect(routingReq, l2g_propagationDelay, l2l_duration, router, "radioIn");
}
RoutingData *LEO_EX::generateRoutingRequest(Datagram *msg)
{
// shared_ptr<RoutingData> routingReq{new RoutingData()};
RoutingData *routingReq = new RoutingData();
routingReq->setKind(ROUTE_REQUEST);
routingReq->setDestAddr(msg->getDestAddr());
routingReq->setFromAddr(getIndex());
// routingReq->encapsulate(msg);
routingReq->setData(msg);
return routingReq;
// return routingReq.get();
}
int LEO_EX::getNextHop(int destAddr)
{
return routingTable[destAddr];
}
void LEO_EX::setRouting(int destAddr, int nextHop)
{
routingTable[destAddr] = nextHop;
}
void LEO_EX::enableConnectionTo(int id)
{
for (auto &x : neighbors)
{
if (x.first == id)
{
x.second = true;
break;
}
}
}
void LEO_EX::disableConnectionTo(int id)
{
for (auto &x : neighbors)
{
if (x.first == id)
{
x.second = false;
break;
}
}
}
/*-------------------------------------------Datagram processing-----------------------------------------------------------*/
void LEO_EX::forwardDatagram(Datagram *msg, int nextHop)
{
EV << "Forwarding packet " << msg << " to LEO_EX[" << nextHop << "]\n";
cModule *network = getParentModule();
sendDirect(msg, l2l_propagationDelay, l2l_duration, network->getSubmodule("leo", nextHop), "radioIn");
}
void LEO_EX::sendDatagram()
{
sendDirect(generateDatagram(), this, "radioIn");
}
void LEO_EX::sendLater(cMessage *msg)
{
sendDirect(msg, this, "radioIn");
//setTimer()
//later_queue
}
Datagram *LEO_EX::generateDatagram()
{
//shared_ptr<Datagram> newData{new Datagram("data")};
Datagram *newData = new Datagram();
newData->setKind(DATAGRAM);
newData->setSrcAddr(getIndex());
dest = intrand(16);
while (dest == getIndex())
dest = intrand(16);
newData->setDestAddr(dest);
//newData->setBitLength(pktLength);
newData->setByteLength(pktLength);
return newData;
// return newData.get();
}
void LEO_EX::refreshDisplay() const
{
char buf[40];
//sprintf(buf, "rcvd: %ld | sent: %ld | next_dest: leo[%d]", numReceived, numSent, dest);
sprintf(buf, "Totaldata:[%lf] Now:%lf", totalBits, time);
getDisplayString().setTagArg("t", 0, buf);
}
接着是GDB调试信息:
New UI allocated
GNU gdb (Ubuntu 8.1.1-0ubuntu1) 8.1.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb) Traceback (most recent call last):
File "/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25-gdb.py", line 60, in <module>
from libstdcxx.v6 import register_libstdcxx_printers
ImportError: cannot import name 'register_libstdcxx_printers'
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7fffe6f83700 (LWP 7868)]
[New Thread 0x7fffe5b0f700 (LWP 7869)]
[New Thread 0x7fffdd29e700 (LWP 7872)]
[New Thread 0x7fffdca9d700 (LWP 7873)]
[New Thread 0x7fffd390d700 (LWP 7874)]
[New Thread 0x7fffd310c700 (LWP 7875)]
[New Thread 0x7fffd290b700 (LWP 7876)]
[New Thread 0x7fffd210a700 (LWP 7877)]
[New Thread 0x7fffd1909700 (LWP 7878)]
[New Thread 0x7fffd1108700 (LWP 7879)]
Thread 1 "sdn_satellite_d" received signal SIGSEGV, Segmentation fault.
0x00007ffff6330410 in __dynamic_cast () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
bt
#0 0x00007ffff6330410 in __dynamic_cast () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#1 0x000055555557a4be in omnetpp::check_and_cast<RoutingData*, omnetpp::cMessage> (p=0x5555567c84c0) at /home/omnetpp-5.6.1/include/omnetpp/checkandcast.h:65
#2 0x00005555555866aa in LEO_EX::handleMessage (this=0x555556493150, msg=0x5555567c84c0) at LEO_EX.cc:277
#3 0x00007ffff6b432d4 in omnetpp::cSimulation::doMessageEvent (this=0x55555583fab0, msg=0x5555567c84c0, module=0x555556493150) at csimulation.cc:671
#4 0x00007ffff6b42f15 in omnetpp::cSimulation::executeEvent (this=0x55555583fab0, event=0x5555567c84c0) at csimulation.cc:613
#5 0x00007ffff7486ac9 in omnetpp::qtenv::Qtenv::doRunSimulation (this=0x555555834a50) at qtenv.cc:894
#6 0x00007ffff7486399 in omnetpp::qtenv::Qtenv::runSimulation (this=0x555555834a50, mode=omnetpp::qtenv::RUNMODE_NORMAL, until_time=..., until_eventnum=0, until_msg=0x0, until_module=0x0, stopOnMsgCancel=true) at qtenv.cc:744
#7 0x00007ffff73faf4d in omnetpp::qtenv::MainWindow::runSimulation (this=0x555556149bc0, runMode=omnetpp::qtenv::RUNMODE_NORMAL) at mainwindow.cc:500
#8 0x00007ffff7511b89 in omnetpp::qtenv::MainWindow::on_actionRun_triggered (this=0x555556149bc0) at mainwindow.h:97
#9 0x00007ffff7511427 in omnetpp::qtenv::MainWindow::qt_static_metacall (_o=0x555556149bc0, _c=QMetaObject::InvokeMetaMethod, _id=3, _a=0x7fffffffc960) at moc_mainwindow.cpp:297
#10 0x00007ffff7511a42 in omnetpp::qtenv::MainWindow::qt_metacall (this=0x555556149bc0, _c=QMetaObject::InvokeMetaMethod, _id=3, _a=0x7fffffffc960) at moc_mainwindow.cpp:396
#11 0x00007ffff4585619 in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#12 0x00007ffff3bd3122 in QAction::triggered(bool) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#13 0x00007ffff3bd580c in QAction::activate(QAction::ActionEvent) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#14 0x00007ffff3ccc12b in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#15 0x00007ffff3ccc38d in QAbstractButton::mouseReleaseEvent(QMouseEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#16 0x00007ffff3dab01a in QToolButton::mouseReleaseEvent(QMouseEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#17 0x00007ffff3c18048 in QWidget::event(QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#18 0x00007ffff3dab0b4 in QToolButton::event(QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#19 0x00007ffff3bd983c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#20 0x00007ffff3be165f in QApplication::notify(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#21 0x00007ffff45568d8 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#22 0x00007ffff3be0632 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#23 0x00007ffff3c3316b in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#24 0x00007ffff3c357da in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#25 0x00007ffff3bd983c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#26 0x00007ffff3be1104 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#27 0x00007ffff45568d8 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#28 0x00007ffff4b18583 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#29 0x00007ffff4b1a055 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#30 0x00007ffff4af12eb in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#31 0x00007fffeb682260 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5
#32 0x00007ffff167c417 in g_main_context_dispatch () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#33 0x00007ffff167c650 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#34 0x00007ffff167c6dc in g_main_context_iteration () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#35 0x00007ffff45af88f in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#36 0x00007ffff455490a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#37 0x00007ffff455d9b4 in QCoreApplication::exec() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#38 0x00007ffff7485a16 in omnetpp::qtenv::Qtenv::doRun (this=0x555555834a50) at qtenv.cc:632
#39 0x00007ffff78e890e in omnetpp::envir::EnvirBase::run (this=0x555555834a60) at envirbase.cc:747
#40 0x00007ffff78e6232 in omnetpp::envir::EnvirBase::run (this=0x555555834a60, argc=4, argv=0x7fffffffdbe8, configobject=0x5555557d2ac0) at envirbase.cc:358
#41 0x00007ffff78ddf40 in omnetpp::envir::setupUserInterface (argc=4, argv=0x7fffffffdbe8) at startup.cc:259
#42 0x00007ffff78df3e9 in omnetpp::envir::evMain (argc=4, argv=0x7fffffffdbe8) at evmain.cc:33
#43 0x0000555555590b13 in main (argc=4, argv=0x7fffffffdbe8) at main.cc:31 |
上一篇: 请大家推荐一个VC表格类下一篇: 关于获取文件路径的方法
|