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!