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
  • QxMemLeak/fixed_mem_pool.h (ligne 175)
  • QxMemLeak/static_mem_pool.h (ligne 190)
qui portent le nom "__block".
"__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 :
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>
les appels "operator delete" (ligne 52 mem_leak.h) passent sans problème, c'est les appels à
"operator delete[]" (ligne 53 mem_leak.h" qui lancent "abort()" via _DEBUG_NEW_ERROR_ACTION.

Si quequ'un a la solution ? Je suis preneur !