#c #qt
#c #qt
Вопрос:
В системе Linux есть проект qt с пустой функцией main.
main.cpp:
int
main()
{
return 0;
}
В этом проекте qt есть другие файлы cpp, но они не вызываются функцией main.
Странно то, что когда я запускаю программу, программа вылетает при возврате.
Это информация gdb:
(gdb) r
Starting program: /home/user/test.out
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Program received signal SIGSEGV, Segmentation fault.
0x0000000000000031 in ?? ()
(gdb) bt
#0 0x0000000000000031 in ()
#1 0x00007ffff24db15e in __cxa_finalize (d=0x7ffff4d29000) at cxa_finalize.c:83
#2 0x00007ffff4bfe0e7 in __do_global_dtors_aux () at /lib/libdcmdata.so.13
#3 0x00007fffffffd780 in ()
(gdb) l
1 int
2 main()
3 {
4 return 0;
5 }
Когда я исключаю другой cpp из проекта, программа работает правильно. Поэтому я думаю, что именно эти файлы cpp вызвали сбой.
Итак, мой вопрос
Как найти причину сбоя в десятках тысяч строк кода?
Какова наиболее вероятная причина сбоя?
Как я могу сделать?
Если кто-нибудь может помочь, большое вам спасибо!
Комментарии:
1. глобальная инициализация / уничтожение…
2. Некоторые объекты создаются перед
main
запуском, обычно глобальные, а иногдаstatic
и объекты, и уничтожаются послеmain
завершения. (Глобальные модули POD будут находиться в сегменте с нулевой инициализацией, и им не нужно вызывать конструктор или деструктор.) Это может привести к ошибкам порядка построения и порядка уничтожения. Похоже, что один из ваших*.cpp
блоков перевода файлов имеет такой глобальный. 🙁3. Вы компилируете без оптимизации и с информацией об отладке?