Сбой программы при возврате пустой основной функции

#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. Вы компилируете без оптимизации и с информацией об отладке?