c++ debugging gdb eigen icc

c++ - información de depuración de icpc con la biblioteca Eigen



debugging gdb (0)

Eigen es una biblioteca popular de C ++, pero parece que icpc tiene un problema al generar información de depuración del código que usa Eigen. Estoy usando el compilador icpc versión 13.1.1. Comprobé con Eigen 3.2.8 y 3.1.3. Va a ser difícil recompilar todas las bibliotecas que necesito con otro compilador, así que ¿alguien ve una buena solución para que Eigen trabaje con un depurador?

El problema es que los valores de las variables no siempre se actualizan en el depurador. Aquí está main.cpp

#include "stdio.h" #include "/home/mylogin/include/Eigen/Core" using namespace std; int main(int argc, char* argv[]) { printf("Starting main/n"); double mytest = 3.0; // If the next line is commented out, the debugger works Eigen::Vector3d v(1,2,3); printf("This is mytest %f /n",mytest); return 0; }

Compilo con

icpc -O0 -debug -I/home/mylogin/include/ main.cpp

Entonces puedes ejecutar el depurador

idbc ./a.out Intel(R) Debugger for applications running on Intel(R) 64, Version 13.0, Build [80.215.23] ------------------ object file name: ./a.out Reading symbols from /mnt/io1/home/mylogin/a.out...done. (idb) break main Breakpoint 1 at 0x4005fb: file /mnt/io1/home/mylogin/main.cpp, line 142. (idb) run Starting program: /mnt/io1/home/mylogin/a.out [New Thread 18379 (LWP 18379)] Breakpoint 1, main (argc=1, argv=0x7fff8b2e89b8) at /mnt/io1/home/mylogin/main.cpp:8 8 printf("Starting main/n"); (idb) next Starting main 11 Eigen::Vector3d v(1,2,3); (idb) next 12 printf("This is mytest %f /n",mytest); (idb) next This is mytest 3.000000 13 return 0; (idb) print mytest $1 = 5.9415882155426741e-313

Verá en las últimas líneas que el ejecutable imprime "3.0" correctamente. También verá que la variable no está impresa correctamente por el depurador.

Tanto gdb como idbc muestran el problema. No parece ser porque está cerca del inicio o el final de la función main (). La CPU es

Intel(R) Xeon(R) CPU E5-2650 0 @ 2.00GHz

La versión de Linux es

Description: Scientific Linux release 6.4 (Carbon)

Gracias por las ideas!