freeglut 无法使用 valgrind 打开显示

Posted

技术标签:

【中文标题】freeglut 无法使用 valgrind 打开显示【英文标题】:freeglut fails to open display with valgrind 【发布时间】:2012-05-03 22:40:22 【问题描述】:

我正在使用 Valgrind 插件在 Ubuntu 12.04 上运行 Eclipse IDE。我用 C++ 开发游戏已经有一段时间了,我似乎在某个地方出现了内存错误。通常,我使用 Valgrind 跟踪这些。但是,当我运行 valgrind 时,过剩无法初始化。我应该注意,当我不使用 valgrind 时,游戏初始化没有问题。我的main函数的代码如下:

int main(int argc, char** argv) 
  char windowTitle[12] = "Game Window";
  printf("Initializing Glut...\n");
  glutInit(&argc, argv);
  printf("Glut initialized!\n");
  alutInit(&argc, argv);
  Game_Object* game = new Game_Object(windowTitle, 1200, 675, argc, argv);
  delete game;
  printf("game ended\n");
  return 0;

输出到控制台的结果是:

Initializing Glut
freeglut (/home/dsnettleton/Documents/Programming/Eclipse/workspace/Plutoids/Debug/Plutoids): failed to open display ''

显然,该程序在运行 valgrind 时并没有走得太远。 处于我开发的最后阶段,只是为了清除内存错误而陷入困境,真是令人沮丧。什么可能导致 glut 无法初始化,我可以做些什么来解决这个问题?

【问题讨论】:

不是您问题的真正答案,但是:您是否尝试使用垃圾收集器,例如 Boehm_CG 进行内存调试。 Mozilla 正是为了这个目的而使用它。 hpl.hp.com/personal/Hans_Boehm/gc/leak.html 我试过了,但它没有给我任何额外的控制台输出。我不认为问题本身就是泄漏。它可能与无效指针有关,或者可能在某处双重释放一些内存(每隔一段时间,当我结束程序时,它会因损坏的双链表消息而崩溃)。 【参考方案1】:

这是我的猜测:您的 IDE 可能缺少 $DISPLAY 环境变量。在启动 Valgrind 之前,您必须在某个地方配置环境以设置 $DISPLAY

启动终端和echo $DISPLAY。它的值大概是:0.0

在最坏的情况下,我会尝试在 C 代码中使用 setenv() 或在启动 Valgrind 的命令行中设置 DISPLAY(这些情况都没有经过测试,它们可能不起作用)。

【讨论】:

就是这样。我不得不将参数 -DISPLAY=:0.0 添加到 valgrind。非常感谢;我正在拔头发。【参考方案2】:

您还必须在 Eclipse 中添加此环境变量 DISPLAY:=0.0。 在可执行文件的启动配置中,将 Display 变量添加到 Environment 选项卡,或选择继承环境。

运行->运行配置...->环境

现在点击

新的

并添加

显示:0

在里面

【讨论】:

聪明。谢谢。添加具有以下功能的新变量:变量:DISPLAY:0 VALUE:leave empty

以上是关于freeglut 无法使用 valgrind 打开显示的主要内容,如果未能解决你的问题,请参考以下文章

Valgrind - 打开 Windows 内存转储

无法在 Visual Studio C++ 2013 中 #include freeglut 的 OpenGL

在没有 IDE 的情况下使用 freeglut

windows上编译freeglut库

Eclipse 中的 Valgrind 无法连接到 X 服务器

使用 freeglut 保持纵横比和比例独立于窗口大小