The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Программирование в Linux" / Оглавление документа
next up previous contents
Next: Параллельное программирование Up: Простые примеры PETSc Previous: Нелинейные решатели   Contents

Контроль ошибок

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



2004-06-22



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру