Solved Problem with disassembler and SIGILL signal
-
Hi there ,
after a day of research I finnaly didn't found what's the real problem .
I read that the return a.exec() Will execute only when a signal is send to it ( when nothing is shown).
I maybe found a track that leads to my destructors , I have some sql request and QUrl posts in my program , ido I need to delete them in the destructor , would that cause a problem if the program is executed during a long time ?
Everything is compiling fine and my program is running well but after a period of time it's crashing.
Finally I was thinking about the SIGILL signal ,when I F10 or F11 on this it's running this part of the program but if it's closing everything on the app would it be normal to have this signal ?
don't know if I was clear ...
-
Hi
SIGILL is not normal.
From normal program errors you do not get this in any easy way.
So the big question is. Can you can get SIGILL from a normal GUI program or
only when using your full code?It might be some sort of corruption but impossible to guess at :)
-
I didn't tried that but it works with another program I don't have any SIGILL error ...
the problem with this is that I have something like 18 pages and 500 lines by pages on average.
So that said to find out where the problem is do I have to check each lines of my program ? :/
-
@Amaury
Well if ONLY this program does it. Its not compiler.
But you should be really clear about it.
Else you can waste tons of time.So yes, if it is program error in your code. You will need to find the actual line/the bug.
You can try http://valgrind.org/ but its takes time to use and understand.
-
Thanks for the support , I need to debug my program before I continue so I prefer to waste little time to understand and use the program.
I can't try to debug the code line per line it would take too long and it should be everywhere .At least when I'm done with it I finally have to find a solution to start my app on boot but for now if it crashes all the time it's not really usefull.
-
@Amaury
Well u should look for array copy. dangling pointers.
old char * types and stuff like that.
To get SIGILL from program bug , you must corrupt
something in the code segment.
Easy way is to use dangling pointer.So maybe you can guess at functions where it might happen.
-
@mrjj
Well right now you're talking to me in japanese ^^
I'm going to have a look on that didn't had time yesterday , I think I can be helped for one thing or two :)
I'll come back if my problem is solve or not. -
Oh :) sorry.
What i mean is SIGILL means "what the hell is that instruction" from the cpu.
This can happen if compiler setting is slightly off for target.
OR
you can also have it happen if you write over the end of an array
or use a pointer that is not set.
Like
MyClass *c1; /// dangling pointer
c1->somfunc()
Then when CPU tries to run the func it sees some random garbage at that location
and might say SIGILL. -
Alright that's clearer ^^
So if I need to create a dangling pointer where do I need to declare it ?
into the class itself ? -
@Amaury
Well you can declare it anywhere. :)
You want to try crash on purpose`? -
Yes I'd like to look at all my pointers, see if there's somewhere that one is not declared or thing like that.
-
- one is not declared
I assume you mean instantiated or in non japanese
new'ed
as in
ClassX * varX = new X()
- one is not declared
-
Yes that's alright .
Btw I got a question , there's some code that I didn't develop myself and I was wondering if there could be an error in some parameters here's the setup :
main.cpp
static const QString path = "localhost"; DataBase MemTampon::Db(path); int main(int argc, char *argv[]) { QApplication a(argc, argv); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); QTranslator *qtTranslator = new QTranslator; qtTranslator->load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); a.installTranslator(qtTranslator); MemTampon::Db.aff_Temperature(); MemTampon::Db.aff_Humidite(); MemTampon::Db.aff_Puissance(); MemTampon::Db.aff_Nom_SD(); MainWindow w; w.show(); return a.exec(); }
memtampon.h (memtampon.cpp is empty)
class MemTampon { public: static DataBase Db; static Options Opt; };
and Database.cpp
DataBase::DataBase(const QString &path) { db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); db.setDatabaseName("SmartDevice_DB_V1"); db.setUserName("root"); db.setPassword("root"); if (!db.open()) { qDebug() << "Error: connection with database fail"; } else { qDebug() << "Database: connection ok"; } }
I assume that with the path variable I am able to call the functions that are in my cpp but, it tells me that path is an unused parameter could it possibly give me an error ?
-
Its impossible to say
But global variables are good candidate to be check. (always)I dont think
static const QString path;
can give such error. -
Thank you I was a little disapointed by this function and wasn't able to say if that was correct or not
-
@Amaury
Well you can always single step it and see if something happens. -
@Amaury
Also you can cut the code that you suspect and see if the problem manifest itself. I wouldn't in principle initialize anything outside of main (like your database) if I can help it, that way I stumble on to less errors in my code, and thus makes for an easier time debugging. Still, my best guess is there some subtle architecture mismatch, so the compiler generates a mostly valid code. However I have no clue how to really test that at present. -
By using step I can't see any bugs so that's not here.
By the way I'm using the memory check Valgind through QT and when I do a memory check thats starting but I got this message after a few seconds :
Analyzing memory of /home/pi/Desktop/SmartDevice/SauvegardeRASPI/New/build-SmartDevice_QT_V11-Desktop-Debug/SmartDevice_QT_V11 <frame> <ip>0x485F6F0</ip> <obj>/usr/lib/arm-linux-gnueabihf/libarmmem.so</obj> </frame> </stack> Analyzing finished. ** Unknown error **
I followed the steps here :
http://doc.qt.io/qtcreator/creator-valgrind-overview.html
http://doc.qt.io/qtcreator/creator-analyzer.html -
@kshegunov
If I don't declare it there where could I do it ? As said before that's not a code that I did myself and I don't really understand the way that it works (how the "path" is used thorugh the different pages ... -
@Amaury said in Problem with disassembler and SIGILL signal:
If I don't declare it there where could I do it
From the looks of it you can safely put the
db
initialization in main (after you've created the application object). As for the string, it's okay to leave it as a global.