与特征库

时间:2016-07-05 13:53:23

标签: c++ debugging gdb eigen icc

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)

感谢您的想法!

0 个答案:

没有答案