Все процедуры 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 можно вызывать в любом месте кода для проверки текущего состояния памяти и нарушений. Помещая в свой код несколько (или много) таких макросов, вы можете легко отследить, в какой части кода происходит нарушение.