| |
Все процедуры PETSc возвращают целое число, указывающее, возникла
ли ошибка при вызове. Макрос CHKERRQ(ierr) в PETSc проверяет
значение ierr и вызывает обработчик ошибок PETSc, при их обнаружении.
CHKERRQ(ierr) нужно использовать во всех процедурах,
чтобы обеспечить полный контроль ошибок. Ниже приведена трасса,
созданная контролем ошибок в примере программы PETSc. Ошибка возникла
в строке 1673 файла
${PETSC_DIR}/src/mat/impls/aij/seq/aij.c
и была вызвана попыткой распределения памяти для слишком большого
массива. Процедура была вызвана в программе ex3.c, в строке
71.
eagle:mpirun -np 1 ex3 -m 10000 PETSC ERROR: MatCreateSeqAIJ() line 1673 in src/mat/impls/aij/seq/aij.c PETSC ERROR: Out of memory. This could be due to allocating PETSC ERROR: too large an object or bleeding by not properly PETSC ERROR: destroying unneeded objects. PETSC ERROR: Try running with -trdump for more information. PETSC ERROR: MatCreate () line 99 in src/mat/utils/gcreate.c PETSC ERROR: main() line 71 in src/sles/examples/tutorials/ex3.c MPI Abort by user Aborting program ! Aborting program! p0 28969: p4 error: : 1
При использовании версий библиотек PETSc для отладки (откомпилированных с опцией BOPT=g) можно также проверять нарушения памяти (запись за границами массива и т.д.). Макрос CHKMEMQ можно вызывать в любом месте кода для проверки текущего состояния памяти и нарушений. Помещая в свой код несколько (или много) таких макросов, вы можете легко отследить, в какой части кода происходит нарушение.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |