Почему Valgrind зависает при вызове SDL_Init (SDL2)?

Я пытаюсь использовать Callgrind для мониторинга использования кэша в приложении SDL2, но он зависает при вызове SDL_Init — EDIT: чтобы уточнить, Valgrind зависает, больше нет вывода из моей программы, Valgrind застрял в подвешенном состоянии в ожидании вызов функции для завершения, но это никогда не происходит. Вот минимальный источник, который демонстрирует проблему:

#include <SDL.h>
#include <iostream>

int main (int argc, char *argv[]) {
std::cout << "SDL Init" << std::endl;
if (SDL_Init(SDL_INIT_VIDEO) != 0 ) {
std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl;
return 1;
}
std::cout << "Done" << std::endl;

SDL_Quit();
return 0;
}

Выводится при зависании: (отредактировано, чтобы включить дополнительную отладочную информацию, сгенерированное с использованием флагов -v -d и —fair-sched = try)

SDL Init
--5591:1: aspacem allocated valgrind thread stack at 0x7000050db000 size 1064960
--5591:1:syswrap- run_a_thread_NORETURN(tid=2): pre-thread_wrapper
--5591:1:syswrap- thread_wrapper(tid=2): entry
--5591-- REDIR: 0x104be985a (libsystem_malloc.dylib:malloc_size) redirected to 0x10013fb50 (malloc_size)
--5591-- UNKNOWN mach_msg unhandled MACH_SEND_TRAILER option
--5591:1:mallocfr newSuperblock at 0x700005262000 (pszB  294880) unsplittable owner VALGRIND/ttaux
--5591:1:mallocfr reclaimSuperblock at 0x7000050AB000 (pszB  196576) unsplittable owner VALGRIND/ttaux
--5591-- UNKNOWN mach_msg unhandled MACH_SEND_TRAILER option (repeated 2 times)
--5591-- UNKNOWN mach_msg unhandled MACH_SEND_TRAILER option (repeated 4 times)
--5591:1: aspacem allocated valgrind thread stack at 0x70000532d000 size 1064960
--5591:1:syswrap- run_a_thread_NORETURN(tid=3): pre-thread_wrapper
--5591:1:syswrap- thread_wrapper(tid=3): entry
--5591:1: aspacem allocated valgrind thread stack at 0x700005431000 size 1064960
--5591:1:syswrap- run_a_thread_NORETURN(tid=4): pre-thread_wrapper
--5591:1:syswrap- thread_wrapper(tid=4): entry
--5591:1: aspacem allocated valgrind thread stack at 0x7000055b8000 size 1064960
--5591:1:syswrap- run_a_thread_NORETURN(tid=5): pre-thread_wrapper
--5591:1:syswrap- thread_wrapper(tid=5): entry
--5591-- UNKNOWN mach_msg unhandled MACH_SEND_TRAILER option (repeated 8 times)
--5591:1:execonte resizing htab from size 1543 to 3079 (idx 2)  Total#ECs=1544
--5591-- UNKNOWN mach_msg unhandled MACH_SEND_TRAILER option (repeated 16 times)
--5591:1:hashtabl resizing table `MC_(malloc_list)' from 1543 to 3079 (total elems 1544)
--5591:1:syswrap- thread_wrapper(tid=3): done
--5591:1:syswrap- run_a_thread_NORETURN(tid=3): post-thread_wrapper
--5591:1:syswrap- run_a_thread_NORETURN(tid=3): not last one standing
--5591:1:syswrap- thread_wrapper(tid=5): done
--5591:1:syswrap- run_a_thread_NORETURN(tid=5): post-thread_wrapper
--5591:1:syswrap- run_a_thread_NORETURN(tid=5): not last one standing

Работает только valgrind ./Application также выдает ошибки (усеченные):

Conditional jump or move depends on uninitialised value(s)
at 0x7FFF5FC24A87: bcmp (in /usr/lib/dyld)....
Use of uninitialised value of size 8
at 0x7FFF5FC24A9F: bcmp (in /usr/lib/dyld)....
Use of uninitialised value of size 8
at 0x7FFF5FC24A9F: bcmp (in /usr/lib/dyld)....
Use of uninitialised value of size 8
at 0x7FFF5FC24A9F: bcmp (in /usr/lib/dyld)....

РЕДАКТИРОВАТЬ: я пытался запустить его через GDB, он совершенно счастлив. Запуск его через helgrind или drd дает segfault: 11 в вызове SDL_Init.

Helgrind: hg_main.c:4470 (void instrument_mem_access(IRSB *, IRExpr *, Int, Bool, Int, Int, IRExpr *)): Assertion 'szB > 8 && szB <= 512' failed.

Учитывая, что gdb чист, я думаю, что проблема с запуском приложения SDL через valgrind вызывает эту проблему, но я понятия не имею, что это может быть, или как обойти эту проблему, и я не могу найти какое-либо обсуждение этого вопроса для дальнейшего мои собственные расследования.

Полная трассировка стека от helgrind:

Thread 1: status = VgTs_Runnable (lwpid 2567)
==30388==    at 0x103BE5C3D: _dispatch_alloc_continuation_from_heap_slow (in /usr/lib/system/libdispatch.dylib)
==30388==    by 0x103BE5C0E: _dispatch_alloc_continuation_alloc (in /usr/lib/system/libdispatch.dylib)
==30388==    by 0x103BE59D6: dispatch_source_set_event_handler (in /usr/lib/system/libdispatch.dylib)
==30388==    by 0x103F16D05: _notify_lib_init (in /usr/lib/system/libsystem_notify.dylib)
==30388==    by 0x103F176C2: notify_register_dispatch (in /usr/lib/system/libsystem_notify.dylib)
==30388==    by 0x1021D0096: __71+[CFPrefsSource withSourceForIdentifier:user:byHost:container:perform:]_block_invoke_2 (in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation)
==30388==    by 0x103BE333E: _dispatch_client_callout (in /usr/lib/system/libdispatch.dylib)
==30388==    by 0x103BE3236: dispatch_once_f (in /usr/lib/system/libdispatch.dylib)
==30388==    by 0x1020C6A7A: +[CFPrefsSource withSourceForIdentifier:user:byHost:container:perform:] (in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation)
==30388==    by 0x10221D1AF: -[CFPrefsSearchListSource addSourceForIdentifier:user:byHost:container:] (in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation)
==30388==    by 0x10221C9E9: __73+[CFPrefsSearchListSource withSearchListForIdentifier:container:perform:]_block_invoke (in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation)
==30388==    by 0x10221C732: +[CFPrefsSearchListSource withSearchListForIdentifier:container:perform:] (in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation)
==30388==    by 0x10224F5C6: _CFPreferencesCopyAppValueWithContainer (in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation)
==30388==    by 0x10480B9C8: -[NSUserDefaults(NSUserDefaults) init] (in /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation)
==30388==    by 0x10480B3B6: +[NSUserDefaults(NSUserDefaults) standardUserDefaults] (in /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation)
==30388==    by 0x100BBE5C7: +[NSApplication initialize] (in /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit)
==30388==    by 0x1003553C7: call_load_methods (in /usr/lib/libobjc.A.dylib)
==30388==    by 0x100355155: class_createInstance (in /usr/lib/libobjc.A.dylib)
==30388==    by 0x100354D07: NXMapRemove (in /usr/lib/libobjc.A.dylib)
==30388==    by 0x10034F590: objc_msgSend (in /usr/lib/libobjc.A.dylib)
==30388==    by 0x1000BDC8F: Cocoa_RegisterApp (in /usr/local/lib/libSDL2-2.0.0.dylib)
==30388==    by 0x1000C229B: Cocoa_CreateDevice (in /usr/local/lib/libSDL2-2.0.0.dylib)
==30388==    by 0x1000B655B: SDL_VideoInit_REAL (in /usr/local/lib/libSDL2-2.0.0.dylib)
==30388==    by 0x100020C69: SDL_InitSubSystem_REAL (in /usr/local/lib/libSDL2-2.0.0.dylib)
==30388==    by 0x100002E80: main (main.cpp:14)

Это скомпилировано на новейшем MacBook El Capitan, Valgrind-3.12.0.SVN и LibVEX, а также SDL2-2.0.4.

Я попытался скомпилировать SDL2 и Valgrind из последнего источника (изначально он был получен с помощью brew), но это никак не повлияло.

Кто-нибудь знает, как, почему Valgrind вызывает SDL_Init к segfault, и есть ли способ обойти эту проблему?

Спасибо

4

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector