私は、CソースとFortranソースの両方を組み合わせたMPIアプリケーションを持っています。メモリ関連のバグによってクラッシュすることもありますが、バグを見つけるのが難しいです(他の人のコードのどこかにありますが、現時点ではよく知られていません)。私はまだgdbでキャッチできませんでしたが、時にはglibcバックトレースが以下のように出力されることがあります。libcバックトレースをソース行番号に変換する
バグはおそらく "(main_main_ + 0x3bca)[0x804d5ce]"に近いです(ただし、メモリエラーが発生している可能性があります)。私の質問は、+ 0x3bcaや0x804d5ceをコードの特定の行に変換する方法を知っている人はいますか?
バグを追跡するための他の提案もありがたいです。私はgdbの基本をよく知っています。
*** glibc detected *** /home/.../src/finite_element: munmap_chunk(): invalid pointer: 0x09d83018 ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x73e42)[0xb7409e42]
/lib/i386-linux-gnu/libc.so.6(+0x74525)[0xb740a525]
/home/.../src/finite_element(main_main_+0x3bca)[0x804d5ce]
/home/.../src/finite_element[0x804e195]
/home/.../src/finite_element(main+0x34)[0x804e1e8]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xb73af4d3]
/home/davepc/finite-element/src/finite_element[0x8049971]
======= Memory map: ========
08048000-08056000 r-xp 00000000 08:05 1346306 /home/.../src/finite_element
08056000-08057000 r--p 0000d000 08:05 1346306 /home/.../src/finite_element
08057000-08058000 rw-p 0000e000 08:05 1346306 /home/.../src/finite_element
09d1b000-09d8f000 rw-p 00000000 00:00 0 [heap]
b2999000-b699b000 rw-s 00000000 08:03 15855 /tmp/openmpi-sessions-_0/37612/1/shared_mem_pool.babel
b699b000-b6b1d000 rw-p 00000000 00:00 0
b6b31000-b6b3d000 r-xp 00000000 08:03 407798 /usr/lib/openmpi/lib/openmpi/mca_osc_rdma.so
b6b3d000-b6b3e000 r--p 0000b000 08:03 407798 /usr/lib/openmpi/lib/openmpi/mca_osc_rdma.so
b6b3e000-b6b3f000 rw-p 0000c000 08:03 407798 /usr/lib/openmpi/lib/openmpi/mca_osc_rdma.so
<snip>
あなたがgdb
であり、あなたはデバッグシンボルを持っている場合、それは非常に簡単です...
はい、それをやっています。ありがとうございました。 "0x804d5ceはmain_main(mpi_Main_trian_kernel.f:374)にあります" Line 374は deallocate(Face) です。これはバグではなく、そのバグではありません。それを追跡するための提案はありますか? – davepc
@davepc:あなたのバグはヒープ破損の可能性が高いです。 'valgrind'を使ってそれを識別することができます。 – jxh