bonjour,
Souhaitant profiter de QxMemLeak sous OSX, j'ai tenté de compiler QxOrm avec l'option _QX_USE_MEM_LEAK_DETECTION.
Ca ne compilait pas...
Le problème semle venir de certaines variables locales définies dans
qui portent le nom "__block".
- QxMemLeak/fixed_mem_pool.h (ligne 175)
- QxMemLeak/static_mem_pool.h (ligne 190)
"__block" est un nom réservé sous OSX.
J'ai refactorisé "__block" en "__block_" et la compilation de QxOrm avec QxMemLeak se déroule sans problème.
Maintenant, quel que soit le projet (testé avec QxBlog et mon projet), le programme "abort()" dès le lancement (Ligne 424 debug_new.cpp)
Voici la pile :les appels "operator delete" (ligne 52 mem_leak.h) passent sans problème, c'est les appels à
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 0 __pthread_kill 0 0x7fff91dbace2 1 pthread_kill 0 0x7fff925bc7d2 2 abort 0 0x7fff925ada7a 3 qx::memory::__debug_new_recorder::free_pointer debug_new.cpp 424 0x100a995c0 4 operator delete[] mem_leak.h 53 0x10017e184 5 QFSFileEngineIterator::advance 0 0x10129fd02 6 QFSFileEngineIterator::next 0 0x101298343 7 QDirIteratorPrivate::advance 0 0x10125ceef 8 QDirIterator::next 0 0x10125d0ac 9 QDir::entryList 0 0x10125a6fb 10 QDir::entryList 0 0x10125a877 11 QFactoryLoader::update 0 0x1012af21c 12 QFactoryLoader::QFactoryLoader 0 0x1012b0c8c 13 loader 0 0x101182940 14 QSqlDatabasePrivate::init 0 0x101184536 15 QSqlDatabase::addDatabase 0 0x101184aa4 16 qx::QxSqlDatabase::createDatabase QxSqlDatabase.cpp 58 0x100aedf57 17 qx::QxSqlDatabase::getDatabaseByCurrThreadId QxSqlDatabase.cpp 44 0x100aee593 18 qx::QxSqlDatabase::getDatabase QxSqlDatabase.h 120 0x1000716cc 19 qx::dao::detail::IxDao_Helper::init QxDao_Helper.inl 182 0x1000717fc 20 qx::dao::detail::QxDao_Helper<author>::QxDao_Helper QxDao_Helper.inl 226 0x1000fc0d1 21 qx::dao::detail::QxDao_CreateTable<author>::createTable QxDao_CreateTable.inl 37 0x1001ac03a 22 qx::dao::create_table<author> QxDao.h 855 0x1001ac6f4 23 main main.cpp 26 0x10016d681 ... <plus>
"operator delete[]" (ligne 53 mem_leak.h" qui lancent "abort()" via _DEBUG_NEW_ERROR_ACTION.
Si quequ'un a la solution ? Je suis preneur !
Partager