баг, как отлаживать? - PullRequest
       20

баг, как отлаживать?

1 голос
/ 06 августа 2011

Мое приложение неожиданно ломается, даже не показывая управляемую трассировку стека. В консоли отображается следующее сообщение:

mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xac5ac2c0) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
mono(6417,0xb0307000) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug

Native stacktrace:

    0   mono                                0x000b6ea9 mono + 745129
    1   mono                                0x00006e23 mono + 24099
    2   libsystem_c.dylib                   0x9487c59b _sigtramp + 43
    3   ???                                 0xffffffff 0x0 + 4294967295
    4   libclh.dylib                        0x9776bbbb libclh.dylib + 191419
    5   libclh.dylib                        0x97773564 libclh.dylib + 222564
    6   libclh.dylib                        0x977b0456 clhFenceCreate + 38
    7   GeForceGLDriver                     0x8f0dca23 glrCompExecuteKernel + 5034
    8   OpenCL                              0x9a691ff1 processExec + 506
    9   OpenCL                              0x9a696ec6 processWork + 214
    10  libdispatch.dylib                   0x9282f80b _dispatch_queue_drain + 224
    11  libdispatch.dylib                   0x9282f6b0 _dispatch_queue_invoke + 47
    12  libdispatch.dylib                   0x9282eeb8 _dispatch_worker_thread2 + 187
    13  libsystem_c.dylib                   0x94826b24 _pthread_wqthread + 346
    14  libsystem_c.dylib                   0x948286fe start_wqthread + 30

Debug info from gdb:

/tmp/mono-gdb-commands.DNbmkH:1: Error in sourced command file:
unable to debug self

=================================================================
Got a SIGSEGV while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries 
used by your application.
=================================================================

Кажется, проблема в драйвере OpenCL. Как я могу отследить и решить проблему?

Ответы [ 3 ]

0 голосов
/ 12 августа 2011

Была проблема с утечкой памяти во взаимодействии, и она вызвала высасывание всей доступной памяти, когда вышла за пределы 2 ГБ, она упала ... Так что спасибо всем, моя вина ...

0 голосов
/ 15 марта 2012

Это большой объем памяти в контексте CALayer, вам нужно освобождать слой каждый раз, когда вы меняете представление. Это случилось со мной, и вот как я решил это, вам нужно освобождать память каждый раз, когда вы меняете страницу, отображающую определенный контекст.

0 голосов
/ 06 августа 2011

Похоже, что это происходит в OpenCL (обратите внимание на 'C', это не OpenGL, но имеет отношение к нему).Вероятно, происходит то, что ваша программа пытается отобразить некоторую память графического процессора в свое адресное пространство, но это не удается, потому что не осталось части адресного пространства, она достаточно велика и имеет правильное выравнивание.И где-то в низкоуровневом коде указатель, возвращаемый mmap, не проверяется, что вызывает segfault.

Это явно ошибка либо Mono, либо вашего драйвера OpenCL / OpenGL, либо его привязок.Отправьте приведенную выше трассировку любому из разработчиков, сообщив об ошибке.

...