我正在使用并行运行的大型模拟代码。用户编写代码来初始化模拟,然后运行整个程序。我只有在使用3个以上的处理器时才会出现seg错误(SIGSEGV
),并且当我在gdb 下运行时, 不会发生。我一般很少使用gdb或并行代码。我该如何调试这样的问题?使用gdb时会发生什么样的问题?
详细说明:
要使用gdb
,我做了:
mpiexec -np 4 xterm -e gdb <PROGRAM>
然后打开了4个xterms,我在每个中都说run
......代码正常执行。刚跑,
mpiexec -np 4 <PROGRAM>
我得到了:
Program received signal SIGSEGV: Segmentation fault - invalid memory reference.
Backtrace for this error:
Program received signal SIGSEGV: Segmentation fault - invalid memory reference.
Backtrace for this error:
#0 0x113a1170d
#1 0x113a11c1b
#2 0x113edf5a9
#0 0x11122d70d
#1 0x11122dc1b
#2 0x1116d95a9
#3 0x10d1e9a44
#4 0x10d25c201
#5 0x10d1cb2ea
#6 0x10d1b3df4
#7 0x10d36e1f3
#3 0x10f9d4a44
#4 0x10fa47201
#5 0x10f9b62ea
#6 0x10f99edf4
#7 0x10fb591f3
我使用Makefile的预设'debug'选项编译:
FFLAGS_DEBUG = -ggdb -c -O0 -fdefault-real-8 -fdefault-double-8 \
-pedantic -Wall -Waliasing \
-Wsurprising -Wconversion -Wunderflow \
-ffpe-trap=invalid,zero,overflow -fbounds-check \
-fimplicit-none -fstack-protector-all