Re: Крашит в дебрях std при работе с ofstream
От: zongang  
Дата: 18.12.18 21:00
Оценка:
Здравствуйте, Sheridan, Вы писали:

Тут без вариантов уничтожены внутренние структуры управления памятью, используемые malloc.

Что делать дальше — использовать смарт-поинтеры везде, это может решить проблему с испорченной памятью.
Если нет желания использовать смарт-поинтеры — надо понимать, что имея ту информацию, которая сейчас предоставлена — разрешить проблему невозможно. Нужно иметь и уметь следующие вещи:

— В Вашем gentoo с дебаг-символами и исходниками надо собрать так же glibc.
— Научиться пользоваться valgrind и прогнать программу с под ним.
— Научится читать и понимать дизассемблированный код в gdb, анализировать регистры и память, адреса на которую могут лежать в регистрах, в данном случае неплохо было бы изучить код и память в районе malloc_consolidate — именно там срабатывает assertion в макросе unlink, подозреваю.

Если нет большего желания разбираться с последними тремя пунктами, стоит вернуться к идее со смарт-поинтерами, либо сменить язык разработки.

S>Камрады, ай нид хелп. Не могу понять в чом дело. У меня тут есть логгер, который крашится в рантайме но в дебаге но полезного нет почти.

S>При запущенной валгринд с мемчеком — не крашится.
S>Принцип такой: при добавлении строки оно открывает ofstream в файл, пишет туда строку, закрывает.
S>Крашится как раз на открытии ofstream
S>
S>m_logstream.open(m_filename, std::ofstream::out | std::ofstream::ate | std::ofstream::app);
S>


S>m_filename — std::string

S>m_logstream — std::ofstream

S>Через раз показывает причину:

S>
S>malloc_consolidate(): invalid chunk size
S>


S>Я предполагал что это краш в другом потоке, но уже дважды всё там переписал — не должно

S>Ну и крашится на вызове логгера из деструктора объекта. При этом оно к объекту самому разрушаемому не обращается
S>сам логгер — синглтон, создаётся при первом обращении, удаляется при выходе из приложения

S>Полный стек вызовов, крашится в Thread 1:

S>

S>Thread 7 (Thread 0x7fffc68e1700 (LWP 31402)):
S>#0  0x00007ffff595b6c6 in ppoll () from /lib64/libc.so.6
S>No symbol table info available.
S>#1  0x00007ffff36ab901 in pa_mainloop_poll () from /usr/lib64/libpulse.so.0
S>No symbol table info available.
S>#2  0x00007ffff36abf10 in pa_mainloop_iterate () from /usr/lib64/libpulse.so.0
S>No symbol table info available.
S>#3  0x00007ffff780c2a7 in PULSEAUDIO_WaitDevice () from /usr/lib/Urho3D/libUrho3D.so.0
S>No symbol table info available.
S>#4  0x00007ffff779442e in SDL_RunAudio () from /usr/lib/Urho3D/libUrho3D.so.0
S>No symbol table info available.
S>#5  0x00007ffff779375c in SDL_RunThread () from /usr/lib/Urho3D/libUrho3D.so.0
S>No symbol table info available.
S>#6  0x00007ffff7809ac9 in RunThread () from /usr/lib/Urho3D/libUrho3D.so.0
S>No symbol table info available.
S>#7  0x00007ffff5c3296a in start_thread () from /lib64/libpthread.so.0
S>No symbol table info available.
S>#8  0x00007ffff59671af in clone () from /lib64/libc.so.6
S>No symbol table info available.

S>Thread 6 (Thread 0x7fffd72e2700 (LWP 31401)):
S>#0  0x00007ffff5c3d30c in __lll_lock_wait () from /lib64/libpthread.so.0
S>No symbol table info available.
S>#1  0x00007ffff5c357a2 in pthread_mutex_lock () from /lib64/libpthread.so.0
S>No symbol table info available.
S>#2  0x00007ffff73401cf in Urho3D::WorkQueue::ProcessItems(unsigned int) () from /usr/lib/Urho3D/libUrho3D.so.0
S>No symbol table info available.
S>#3  0x00007ffff7339f1a in Urho3D::ThreadFunctionStatic(void*) () from /usr/lib/Urho3D/libUrho3D.so.0
S>No symbol table info available.
S>#4  0x00007ffff5c3296a in start_thread () from /lib64/libpthread.so.0
S>No symbol table info available.
S>#5  0x00007ffff59671af in clone () from /lib64/libc.so.6
S>No symbol table info available.

S>Thread 5 (Thread 0x7fffd7ae3700 (LWP 31400)):
S>#0  0x00007ffff5c3d30c in __lll_lock_wait () from /lib64/libpthread.so.0
S>No symbol table info available.
S>#1  0x00007ffff5c357a2 in pthread_mutex_lock () from /lib64/libpthread.so.0
S>No symbol table info available.
S>#2  0x00007ffff73401cf in Urho3D::WorkQueue::ProcessItems(unsigned int) () from /usr/lib/Urho3D/libUrho3D.so.0
S>No symbol table info available.
S>#3  0x00007ffff7339f1a in Urho3D::ThreadFunctionStatic(void*) () from /usr/lib/Urho3D/libUrho3D.so.0
S>No symbol table info available.
S>#4  0x00007ffff5c3296a in start_thread () from /lib64/libpthread.so.0
S>No symbol table info available.
S>#5  0x00007ffff59671af in clone () from /lib64/libc.so.6
S>No symbol table info available.

S>Thread 4 (Thread 0x7fffd82e4700 (LWP 31399)):
S>#0  0x00007ffff5c3d30c in __lll_lock_wait () from /lib64/libpthread.so.0
S>No symbol table info available.
S>#1  0x00007ffff5c357a2 in pthread_mutex_lock () from /lib64/libpthread.so.0
S>No symbol table info available.
S>#2  0x00007ffff73401cf in Urho3D::WorkQueue::ProcessItems(unsigned int) () from /usr/lib/Urho3D/libUrho3D.so.0
S>No symbol table info available.
S>#3  0x00007ffff7339f1a in Urho3D::ThreadFunctionStatic(void*) () from /usr/lib/Urho3D/libUrho3D.so.0
S>No symbol table info available.
S>#4  0x00007ffff5c3296a in start_thread () from /lib64/libpthread.so.0
S>No symbol table info available.
S>#5  0x00007ffff59671af in clone () from /lib64/libc.so.6
S>No symbol table info available.

S>Thread 3 (Thread 0x7fffdbfff700 (LWP 31398)):
S>#0  0x00007ffff5c3e138 in nanosleep () from /lib64/libpthread.so.0
S>No symbol table info available.
S>#1  0x00000000004b0f90 in std::this_thread::sleep_for<long, std::ratio<1l, 1000l> > (__rtime=...) at /usr/lib/gcc/x86_64-pc-linux-gnu/7.3.0/include/g++-v7/thread:376
S>        __s = {__r = 0}
S>        __ns = {__r = 100000000}
S>        __ts = {tv_sec = 0, tv_nsec = 36163799}
S>#2  0x00000000004b06b5 in eing::world::CWorld::worldThread (this=0x7b4640) at ../../../src/world/cworld.cpp:89
S>No locals.
S>#3  0x00000000004b2e41 in std::__invoke_impl<void, void (eing::world::CWorld::*)(), eing::world::CWorld*> (__f=@0x839ac0: (void (eing::world::CWorld::*)(eing::world::CWorld * const)) 0x4b0660 <eing::world::CWorld::worldThread()>, __t=@0x839ab8: 0x7b4640) at /usr/lib/gcc/x86_64-pc-linux-gnu/7.3.0/include/g++-v7/bits/invoke.h:73
S>No locals.
S>#4  0x00000000004b2d52 in std::__invoke<void (eing::world::CWorld::*)(), eing::world::CWorld*> (__fn=@0x839ac0: (void (eing::world::CWorld::*)(eing::world::CWorld * const)) 0x4b0660 <eing::world::CWorld::worldThread()>, __args=@0x839ab8: 0x7b4640) at /usr/lib/gcc/x86_64-pc-linux-gnu/7.3.0/include/g++-v7/bits/invoke.h:95
S>No locals.
S>#5  0x00000000004b2d12 in std::thread::_Invoker<std::tuple<void (eing::world::CWorld::*)(), eing::world::CWorld*> >::_M_invoke<0ul, 1ul> (this=0x839ab8) at /usr/lib/gcc/x86_64-pc-linux-gnu/7.3.0/include/g++-v7/thread:234
S>No locals.
S>#6  0x00000000004b2cc5 in std::thread::_Invoker<std::tuple<void (eing::world::CWorld::*)(), eing::world::CWorld*> >::operator() (this=0x839ab8) at /usr/lib/gcc/x86_64-pc-linux-gnu/7.3.0/include/g++-v7/thread:243
S>No locals.
S>#7  0x00000000004b2a99 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (eing::world::CWorld::*)(), eing::world::CWorld*> > >::_M_run (this=0x839ab0) at /usr/lib/gcc/x86_64-pc-linux-gnu/7.3.0/include/g++-v7/thread:186
S>No locals.
S>#8  0x00007ffff6142f0e in std::execute_native_thread_routine (__p=0x839ab0) at /data/tmp/portage/sys-devel/gcc-7.3.0-r3/work/gcc-7.3.0/libstdc++-v3/src/c++11/thread.cc:83
S>        __t = {_M_t = {_M_t = {<std::_Tuple_impl<0, std::thread::_State*, std::default_delete<std::thread::_State> >> = {<std::_Tuple_impl<1, std::default_delete<std::thread::_State> >> = {<std::_Head_base<1, std::default_delete<std::thread::_State>, true>> = {<std::default_delete<std::thread::_State>> = {<No data fields>}, <No data fields>}, <No data fields>}, <std::_Head_base<0, std::thread::_State*, false>> = {_M_head_impl = 0x839ab0}, <No data fields>}, <No data fields>}}}
S>#9  0x00007ffff5c3296a in start_thread () from /lib64/libpthread.so.0
S>No symbol table info available.
S>#10 0x00007ffff59671af in clone () from /lib64/libc.so.6
S>No symbol table info available.

S>Thread 2 (Thread 0x7ffff7fed700 (LWP 31397)):
S>#0  0x00007ffff595b6c6 in ppoll () from /lib64/libc.so.6
S>No symbol table info available.
S>#1  0x00007ffff36ab901 in pa_mainloop_poll () from /usr/lib64/libpulse.so.0
S>No symbol table info available.
S>#2  0x00007ffff36abf10 in pa_mainloop_iterate () from /usr/lib64/libpulse.so.0
S>No symbol table info available.
S>#3  0x00007ffff36abfa0 in pa_mainloop_run () from /usr/lib64/libpulse.so.0
S>No symbol table info available.
S>#4  0x00007ffff780c40f in HotplugThread () from /usr/lib/Urho3D/libUrho3D.so.0
S>No symbol table info available.
S>#5  0x00007ffff779375c in SDL_RunThread () from /usr/lib/Urho3D/libUrho3D.so.0
S>No symbol table info available.
S>#6  0x00007ffff7809ac9 in RunThread () from /usr/lib/Urho3D/libUrho3D.so.0
S>No symbol table info available.
S>#7  0x00007ffff5c3296a in start_thread () from /lib64/libpthread.so.0
S>No symbol table info available.
S>#8  0x00007ffff59671af in clone () from /lib64/libc.so.6
S>No symbol table info available.

S>Thread 1 (Thread 0x7ffff7f830c0 (LWP 31391)):
S>#0  0x00007ffff589976b in raise () from /lib64/libc.so.6
S>No symbol table info available.
S>#1  0x00007ffff589afb1 in abort () from /lib64/libc.so.6
S>No symbol table info available.
S>#2  0x00007ffff58e02e7 in __libc_message () from /lib64/libc.so.6
S>No symbol table info available.
S>#3  0x00007ffff58e8038 in malloc_printerr () from /lib64/libc.so.6
S>No symbol table info available.
S>#4  0x00007ffff58e83be in malloc_consolidate () from /lib64/libc.so.6
S>No symbol table info available.
S>#5  0x00007ffff58eb1d8 in _int_malloc () from /lib64/libc.so.6
S>No symbol table info available.
S>#6  0x00007ffff58eceaa in malloc () from /lib64/libc.so.6
S>No symbol table info available.
S>#7  0x00007ffff6116418 in operator new (sz=8192) at /data/tmp/portage/sys-devel/gcc-7.3.0-r3/work/gcc-7.3.0/libstdc++-v3/libsupc++/new_op.cc:50
S>        p = <optimized out>
S>#8  0x00007ffff61164c5 in operator new[] (sz=<optimized out>) at /data/tmp/portage/sys-devel/gcc-7.3.0-r3/work/gcc-7.3.0/libstdc++-v3/libsupc++/new_opv.cc:32
S>No locals.
S>#9  0x00007ffff617b6f8 in std::basic_filebuf<char, std::char_traits<char> >::_M_allocate_internal_buffer (this=0x794ec8) at /data/tmp/portage/sys-devel/gcc-7.3.0-r3/work/build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/fstream.tcc:55
S>        this = 0x794ec8
S>#10 0x00007ffff617fd12 in std::basic_filebuf<char, std::char_traits<char> >::open (this=0x794ec8, __s=0x795800 "logs/cube_helper/2018-12-16_18-12-02.application.log", __mode=19) at /data/tmp/portage/sys-devel/gcc-7.3.0-r3/work/build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/fstream.tcc:187
S>        __ret = 0x0
S>        __s = 0x795800 "logs/cube_helper/2018-12-16_18-12-02.application.log"
S>        __mode = 19
S>        this = 0x794ec8
S>        __ret = <optimized out>
S>        __ret = 0x0
S>#11 0x00007ffff617fe43 in std::basic_filebuf<char, std::char_traits<char> >::open (__mode=<optimized out>, __s=..., this=0x794ec8) at /data/tmp/portage/sys-devel/gcc-7.3.0-r3/work/build/x86_64-pc-linux-gnu/libstdc++-v3/include/fstream:308
S>No locals.
S>#12 std::basic_ofstream<char, std::char_traits<char> >::open (this=0x794ec0, __s=..., __mode=<optimized out>) at /data/tmp/portage/sys-devel/gcc-7.3.0-r3/work/build/x86_64-pc-linux-gnu/libstdc++-v3/include/fstream:823
S>No locals.
S>#13 0x00000000004aef98 in eing::tools::logger::CLogger::start (this=0x794e80) at ../../../src/tools/logger/clogger.cpp:63
S>        time = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x7958d0 "P\223\330\367\377\177"}, _M_string_length = 7949920, {_M_local_buf = "\320\\y\000\000\000\000\000\200\006\365\000\000\000\000", _M_allocated_capacity = 7953616}}
S>#14 0x00000000004cc16d in eing::graphic::world::CDynamicMesh::~CDynamicMesh (this=0x1073aa0) at ../../../src/graphic/world/cdynamicmesh.cpp:40
S>No locals.
S>#15 0x000000000049692e in eing::graphic::world::CBlock::~CBlock (this=0x105d070) at ../../../src/graphic/world/cblock.cpp:48
S>No locals.
S>#16 0x0000000000496c89 in eing::graphic::world::CBlock::~CBlock (this=0x105d070) at ../../../src/graphic/world/cblock.cpp:41
S>No locals.
S>#17 0x000000000045c05f in eing_helper::cube::AppCubeHelper::redrawTestCube (this=0x77cee0) at ../../../src/applications/cube_helper/main.cpp:350
S>        e = @0xae6100: {_vptr.exception = 0xae61b0}
S>#18 0x000000000045d2af in eing_helper::cube::AppCubeHelper::HandleUpdate (this=0x77cee0, eventType=..., eventData=...) at ../../../src/applications/cube_helper/main.cpp:289
S>        yaw_ = 0
S>        pitch_ = 0
S>        timeStep = 0.00499999989
S>        MOVE_SPEED = 10
S>        MOUSE_SENSITIVITY = 0.100000001
S>#19 0x0000000000460bc7 in Urho3D::EventHandlerImpl<eing_helper::cube::AppCubeHelper>::Invoke (this=0x106aff0, eventData=...) at /usr/include/Urho3D/Physics/../Core/Object.h:315
S>        receiver = 0x77cee0
S>#20 0x00007ffff732d642 in Urho3D::Object::OnEvent(Urho3D::Object*, Urho3D::StringHash, Urho3D::HashMap<Urho3D::StringHash, Urho3D::Variant>&) () from /usr/lib/Urho3D/libUrho3D.so.0
S>No symbol table info available.
S>#21 0x00007ffff732e93f in Urho3D::Object::SendEvent(Urho3D::StringHash, Urho3D::HashMap<Urho3D::StringHash, Urho3D::Variant>&) () from /usr/lib/Urho3D/libUrho3D.so.0
S>No symbol table info available.
S>#22 0x00007ffff734d1d7 in Urho3D::Engine::Update() () from /usr/lib/Urho3D/libUrho3D.so.0
S>No symbol table info available.
S>#23 0x00007ffff735013a in Urho3D::Engine::RunFrame() () from /usr/lib/Urho3D/libUrho3D.so.0
S>No symbol table info available.
S>#24 0x00007ffff7342e45 in Urho3D::Application::Run() () from /usr/lib/Urho3D/libUrho3D.so.0
S>No symbol table info available.
S>#25 0x000000000045d44a in main (argc=1, argv=0x7fffffffe018) at ../../../src/applications/cube_helper/main.cpp:378
S>        graphic_result = 0

S>


S>Накидайте идей что это может быть? Может уже встречалось такое?...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.