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

时间:2019-06-24 19:46:59

标签: linux visual-studio visual-studio-2017 cross-platform visual-studio-2019

我正在使用Visual Studio 2019 Enterprise开发跨平台(Windows / Linux)x64 GUI应用程序。

在此2019版中,我们可以使用Visual Studio 调试平台(Windows-本机)和Linux-Ubuntu(在虚拟机中运行)。

您可以在这里看到它: https://devblogs.microsoft.com/cppblog/using-visual-studio-for-cross-platform-c-development-targeting-windows-and-linux/

因此,我遵循了本教程,并使用Visual Studio 2019 IDE在Ubuntu 18 VM中运行和调试了这个GUI示例应用程序。 完美!

现在,我尝试创建自定义GUI应用程序:

要使用跨平台GUI,我使用的是GLFW 3.3。

步骤:

  1. 创建一个Visual Studio CMake项目

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

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

  4. 编译和链接(在VS Windows和Linux目标上均为确定

  5. 运行(在Windows和Linux目标上均确定

但是...

当我在Windows安装程序中运行它时,一切正常...显示了GLFW窗口... 好! 当我在Linux调试程序(由Visual Studio)中运行它时,VS调试器命中glfwInit()行时,出现了以下错误:

Starting GLFW context, OpenGL 3.3

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

因此,当我选择Linux调试配置时,我的VM中没有GUI窗口。

在Internet上搜索时,我看到有必要对Visual Studio说“ ”,以便在launch.vs.json文件中导出DISPLAY linux环境变量。

您可以在这里看到它: https://docs.microsoft.com/en-us/cpp/build/get-started-linux-cmake?view=vs-2019

在我的VM Ubuntu中,我得到了DISPLAY:0

然后,我写了我的launch.vs.json文件:

"export DISPLAY=:0;${debuggerCommand}"

"export DISPLAY=:0.0;${debuggerCommand}"

详细信息:

如果我手动进入我的Ubuntu VM,然后双击已编译的应用程序,它将显示GLFW窗口,并且一切正常!

我的问题是:

如何使用Visual Studio 2019 IDE将DISPLAY环境变量导出到Linux VM以调试将在Virtual Box(VM)中运行的应用程序。

1 个答案:

答案 0 :(得分:1)

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

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

“ launch.json”的哪些属性我必须更改:

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

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

3-设置"projectTarget": "helloworld"。该属性不是VS 2019自动创建的。不是

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

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

6-删除行"processId: 0"。通过此行,只有root用户可以在Linux上进行部署和调试。

7-在pipeArgs中添加新行:"--tty=${debugInfo.tty}"。创建CMake Project VS2019时自动生成此行

所以pipeArgs是:

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