Visual Studio - X11:DISPLAY环境变量丢失

5
我正在开发一个跨平台(Windows / Linux)x64 GUI应用程序,使用Visual Studio 2019 Enterprise。
在这个2019版本中,我们可以使用Visual Studio来调试两个平台(Windows - Native和Linux - Ubuntu(在虚拟机中运行))。
您可以在此处查看它:https://devblogs.microsoft.com/cppblog/using-visual-studio-for-cross-platform-c-development-targeting-windows-and-linux/ 所以,我遵循了这个教程,并且在我的Ubuntu 18 VM上使用Visual Studio 2019 IDE运行和调试了这个GUI示例应用程序。完美!
现在,我尝试做我的自定义GUI应用程序:
为了进行跨平台GUI,我正在使用GLFW 3.3。
步骤:
  1. 创建一个Visual Studio CMake项目

  2. 编写C++代码和CMakeLists.txt

  3. 添加VS调试配置(Windows x64和Linux x64)

  4. 编译和链接(在VS Windows和Linux目标上都OK)

  5. 运行(在VS Windows和Linux目标上都OK)

但是...

当我在Windows环境下运行它时,所有的都好...出现了一个GLFW窗口...很好! 当我在Linux-debug中运行它(通过Visual Studio),当VS debugger到达glfwInit()这一行时,我收到了以下错误:

Starting GLFW context, OpenGL 3.3

Glfw Error 65544: X11: The DISPLAY environment variable is missing

所以,当我选择Linux调试配置时,在我的虚拟机中没有GUI窗口。

在互联网上搜索后,我发现需要告诉Visual Studio在launch.vs.json文件中导出DISPLAY linux环境变量。

你可以在这里看到: https://learn.microsoft.com/en-us/cpp/build/get-started-linux-cmake?view=vs-2019 在我的 Ubuntu 虚拟机中,我获得了 DISPLAY:0
然后,我编写了 launch.vs.json 文件:
"export DISPLAY=:0;${debuggerCommand}"
或者
"export DISPLAY=:0.0;${debuggerCommand}"
细节如下:
如果我手动进入我的 Ubuntu 虚拟机并双击已编译的应用程序,则会显示 GLFW 窗口并且一切正常!
我的问题是:
如何使用 Visual Studio 2019 IDE 将 DISPLAY 环境变量导出到 Linux VM 中,以便调试将在 Virtual Box (VM) 中运行的应用程序。
1个回答

6

微软C++团队的一些好人(感谢Ion、Erika和Elisabeth)帮助了我,我找到了解决方案。

问题与Visual Studio自动生成的“launch.json”文件有关。

我需要更改的“launch.json”属性包括:

1- 设置"name": "helloworld"。默认值为" "

2- 设置"project": "CMakeLists.txt"。默认值为" "

3- 设置"projectTarget": "helloworld"。这个属性在VS2019中不会自动生成。

4- 设置"cwd": "${debugInfo.defaultWorkingDirectory}"。默认值为"${debugInfo.defaultRemoteDirectory}"

5- 在pipeArgs中添加"export DISPLAY=:0;"

6- 删除"processId: 0"这一行。有了这一行,只有root用户才能在Linux上部署和调试。

7- 在pipeArgs内添加一个新行:"--tty=${debugInfo.tty}"。这一行在创建CMake项目VS2019时不会自动生成。

因此,pipeArgs为:

"pipeArgs": [
          "/s",
          "${debugInfo.remoteMachineId}",
          "/p",
          "${debugInfo.parentProcessId}",
          "/c",
          "export DISPLAY=:0;${debuggerCommand}",
          "--tty=${debugInfo.tty}"
        ]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接