Eigen是一个流行的C ++库,但是icpc似乎在使用Eigen的代码生成调试信息时遇到了问题。我正在使用编译器icpc版本13.1.1。我用Eigen 3.2.8和3.1.3进行了检查。用另一个编译器重新编译我需要的所有库很难,所以有人看到一个很好的解决方案让Eigen与调试器一起工作吗?
问题是变量值总是在调试器中得到更新。这是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;
}
我用
编译icpc -O0 -debug -I/home/mylogin/include/ main.cpp
然后你可以运行调试器
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
您在最后几行中看到可执行文件打印了" 3.0"正确。您还会看到调试器未正确打印变量。
gdb和idbc都显示问题。它似乎并不是因为它接近函数main()的开头或结尾。 CPU是
Intel(R) Xeon(R) CPU E5-2650 0 @ 2.00GHz
Linux版本
Description: Scientific Linux release 6.4 (Carbon)
感谢您的想法!