Tengo una aplicación MPI con la que combina las fuentes C y Fortran. Ocasionalmente se cuelga debido a un error relacionado con la memoria, pero estoy teniendo problemas para encontrar el error (está en algún lugar del código de otra persona, que por el momento no estoy muy familiarizado). Todavía no he podido capturarlo con gdb, pero a veces se genera una traza inversa glibc como se muestra a continuación.Convierta una traza inversa libc a un número de línea fuente
El error probablemente esté cerca de "(main_main_ + 0x3bca) [0x804d5ce]", (pero con un error de memoria, sé que puede no ser el caso). Mi pregunta es, ¿alguien sabe cómo convertir + 0x3bca o 0x804d5ce en una línea particular del código?
Cualquier otra sugerencia para rastrear el error también sería apreciada. Estoy bastante familiarizado con los conceptos básicos de 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>
Gracias ...
Sí, que lo hizo. Gracias. "0x804d5ce está en main_main (mpi_Main_trian_kernel.f: 374)" línea 374 es: deallocate (cara) Así que no es el error, su justo donde está apareciendo. ¿Alguna sugerencia para rastrearlo? – davepc
@davepc: Su error probablemente sea corrupción de montón. Puedes intentar usar 'valgrind' para identificarlo. – jxh