LINUX.ORG.RU

Найти причину сегфолта


0

0

Здравствуйте! Есть система Debian Squeeze x64. Туда поставлен комерческий софт (распространяется в виде исходников) для квантого-химических рассчетов. Я её скомпилировал использую ACML в качестве Blas и Lapack библиотек, openmpi, fftw2 (компилил сам) и scalapack (компилил сам). Во время компиляции ошибок не было. В результате большая часть софта работает, но несколько прог падает. Пока нашли 2: kgen и tetra. Вот что я смог про них найти:

root@host /opt/wien_2k # ldd kgen linux-vdso.so.1 => (0x00007fff46d7a000) libpthread.so.0 => /lib/libpthread.so.0 (0x00002b0d86432000) libgfortran.so.3 => /usr/lib/libgfortran.so.3 (0x00002b0d8664e000) libm.so.6 => /lib/libm.so.6 (0x00002b0d8693b000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00002b0d86bbd000) libc.so.6 => /lib/libc.so.6 (0x00002b0d86dd3000) /lib64/ld-linux-x86-64.so.2 (0x00002b0d86212000)

dmesg: [506583.894669] kgen[12028] trap divide error ip:40576a sp:7fff1c8f45a0 error:0 in kgen[400000+a000]

root@thunder /opt/wien_2k # ldd tetra linux-vdso.so.1 => (0x00007fffaafff000) libpthread.so.0 => /lib/libpthread.so.0 (0x00002b175df06000) libgfortran.so.3 => /usr/lib/libgfortran.so.3 (0x00002b175e122000) libm.so.6 => /lib/libm.so.6 (0x00002b175e40f000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00002b175e691000) libc.so.6 => /lib/libc.so.6 (0x00002b175e8a7000) /lib64/ld-linux-x86-64.so.2 (0x00002b175dce6000)

dmesg: [506609.316764] tetra[12095]: segfault at 4 ip 00000000004073ba sp 00007fff95de75e0 error 6 in tetra[400000+a000]

Опции компиляции: current:FOPT:-ffree-form -O2 current:FPOPT:-ffree-form -O2 current:LDFLAGS:$(FOPT) -lpthread current:DPARALLEL:'-DParallel' current:R_LIBS:-L/opt/acml4.4.0/gfortran64/lib -lacml current:RP_LIBS:-L/opt/scalapack/lib -lscalapack -lblacsF77 -lblacsC -lblacs -lblacsF77 -lblacsC -L/usr/lib/openmpi/lib -lmpi -L/opt/acml4.4.0/gfortran64/lib -lacml -L/opt/fftw2/lib -lfftw_mpi -lfftw -lm -lpthread current:MPIRUN:mpirun -n _NP_ -machinefile _HOSTS_ _EXEC_

Может кто-нибудь помочь разобраться в чем проблема?

Не хочу ставить ifort и mkl, потому что это будет нарушением лицензии.

★★★★★

Последнее исправление: vitruss (всего исправлений: 2)

может valgrind-ом посмотреть?

najar
()

ulimit -c unlimited
чтобы при падении создавало core

gdb <executable> <core>


запускаете gdb с дампом

gdb> bt

смотрите где упало по backtrace

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

Получилось что-то такое:

(gdb) run tetra.def Starting program: /opt/wien_2k/tetra tetra.def [Thread debugging using libthread_db enabled]

Program received signal SIGSEGV, Segmentation fault. 0x00000000004073ba in ados (ns=DWARF-2 expression error: DW_OP_reg operations must be used either alone or in conjuction with DW_OP_piece. ) at ados.f:53 53 dosold1=0.d0 (gdb) bt #0 0x00000000004073ba in ados (ns=DWARF-2 expression error: DW_OP_reg operations must be used either alone or in conjuction with DW_OP_piece. ) at ados.f:53 #1 0x0000000000406292 in arbdos (nflow=DWARF-2 expression error: DW_OP_reg operations must be used either alone or in conjuction with DW_OP_piece. ) at arbdos.f:30 #2 0x0000000000404301 in tetra () at tetra.f:286 #3 0x0000000000408bea in main () #4 0x00002aaaab68ac4d in __libc_start_main () from /lib/libc.so.6 #5 0x0000000000400f39 in _start ()

vitruss ★★★★★
() автор топика
Ответ на: комментарий от Sylvia

Спасибо большое, дальше буду мучить разработчиков, надеюсь они поправят...

vitruss ★★★★★
() автор топика

> распространяется в виде исходников

Перекомпилируйте с опциями -fbacktrace и -fdump-core, дамп и вывод программы при ошибке отправьте разработчикам.

anonymous-kun
()

вообще, баг с многопоточностью далеко не всегда можно выловить с помощью дебагера - симптомы у таких багов весьма не однозначные, т.е. плавающие. Было дело сам отлавливал такой.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.