![]() |
|
#1
|
|||
|
|||
![]()
Nil A написал(а) к Vitaliy Aksyonov в Oct 23 21:35:16 по местному времени:
Нello, Vitaliy! Во-первых, зачем по-умолчанию включены отладки GTНROWLOG и GTНROWDEBUG? Я иногда видел какие-то трейсы про память пишутся в golded.log, но реально, хоть что-то когда-нибудь присылал сюда в эху, или куда-то, какие-то отладочные трейсы памяти? Отладка GTНROW_DEBUG в голдеде сделана таким образом, что они аллоцируют памяти больше на структурку Throw, и прячут её в начале. Перед адресом и после обкладывают магическими цифирками BEFOREVAL и AFTERVAL, чтобы потом на недоезды и заезды проверить. Также они двухсвязный список хранят, чтобы потом потерянную память напечатать. А потом пришёл Гугл и запили ASAN билды, и такое делать в ручную уже стало не нужно, так что выключить по-умолчанию я бы рекомендовал. Решилось мне прогнать UBSAN билд, и прямо на запуске, где происходит сканирование всех областей (баз эх), случается UB /home/fido/src/golded-plus/goldlib/gall/gmemdbg.cpp:130:53: runtime error: pointer index expression with base 0x000000000000 overflowed to 0xffffffffffffffd4 #0 0xae8fbc in throw_ptrtodl(void const*) /home/fido/src/golded-plus/goldlib/gall/gmemdbg.cpp:130 #1 0xae6a1c in throwreallocdebug(void, unsigned long, char const, int) /home/fido/src/golded-plus/goldlib/gall/gmemdbg.cpp:389 #2 0x94880f in SquishArea::refresh() /home/fido/src/golded-plus/goldlib/gmb3/gmosqsh2.cpp:71 #3 0x94b7f1 in SquishArea::raw_scan(int, int) /home/fido/src/golded-plus/goldlib/gmb3/gmosqsh2.cpp:153 #4 0x94fd9b in SquishArea::scan_area() /home/fido/src/golded-plus/goldlib/gmb3/gmosqsh2.cpp:333 #5 0x7ebee5 in Area::ScanArea() /home/fido/src/golded-plus/golded3/gescan.cpp:71 #6 0x7efc77 in AreaList::AreaScan(int, unsigned int, int, int&, int&, char const*) /home/fido/src/golded-plus/golded3/gescan.cpp:281 #7 0x7b236f in Reader() /home/fido/src/golded-plus/golded3/geread.cpp:171 #8 0x6c63bb in main /home/fido/src/golded-plus/golded3/gemain.cpp:54 #9 0x7f7f53f1ef44 in _libc_start_main (/lib/x8664-linux-gnu/libc.so.6+0x21f44) #10 0x407c98 (/home/fido/src/golded-plus/build_asan/golded3/golded+0x407c98) Тут хотят вычитать целиком .SQI индекс файл в память. Зовут функцию throw_realloc(), где оригинальный указатель в NULL. Так то норм, звать realloc с nullptr, тогда он просто в malloc() превращается. Вобщем-то бага то и нет, но всё равно, я бы почиНИЛ throwrealloc_debug(), пододвинул throwptrtodl() туда, где он реально используется. Т.е. вот такой фикс бы влил, но.. у меня нет на гитхабе аккаунта. --- a/goldlib/gall/gmemdbg.cpp +++ b/goldlib/gall/gmemdbg.cpp @@ -386,7 +386,6 @@ void throwrealloc_debug(void* __oldptr, size_t __size, const char _file, int { void* _ptr; - Throw* dl = throwptrtodl(_oldptr); if(size == 0) { @@ -399,6 +398,7 @@ void throwrealloc_debug(void* __oldptr, size_t __size, const char _file, int } else { + Throw* dl = throwptrtodl(_oldptr); ptr = throw_malloc_debug(__size,__file,_line); if(dl->nbytes < size) size = dl->nbytes; Best Regards, Nil --- GoldED+/LNX 1.1.5 |