VS2017 - 如何为远程调试配置项目
VS2017 - How to configure project for remote debugging
我想在我的 Raspberry Pi (OS: Raspbian) 上创建一个 MP3 播放器。问题是,我没有任何 Linux 编程经验,而且由于跨平台编译,我在项目配置方面遇到了很大的问题。我想添加两个库:
我可以在 linux 机器上用 gcc -O2 test.cpp -lmpg123
编译代码,但我不能强制 Visual Studio 查看那些库。
我在尝试远程调试我的程序时使用 wiringPi 库时也遇到了问题,因为我必须 运行 它作为 GPIO 配置的根。有什么办法可以强制 Visual Studio 到 运行 我的具有 root 权限的编译代码?
就我个人而言,我有着悠久的 C/C++/MFC/Windows 编程经验,但完全没有 Linux 经验。我大约一年前开始为 Raspberry 编程,当时我从儿子那里得到了一个生日礼物。有了 C/C++ 的历史,它真的不那么难,但你只需要稍微阅读一下,因为在 Linux 上很多是相同的,但很多不是 :)。多读多读,你就是一位经验丰富的 Linux 程序员了!恐怕需要一些时间。
所以,我认为我在这方面是一个经验丰富的新手 :)。我在 www.die.net(和其他 Linux 手册页)上找到了很多信息。如果你在那里搜索一个函数,比如 printf(),请查看 (3) 页 - 它们解释了你应该如何使用 'm.
但是,尽管 VS2017 在这方面做得非常好,但它并不总是像您希望的那样顺利。有时只需要重新启动 Raspberry,重新启动 VS 并重试。 Linux 交叉编译在 VS 中很新,还不完善。
几点提示:
- 首先使用带有新鲜 Stretch 图像的 Raspberry。当然在 sudo apt-get update && sudo apt-get -y upgrade.
之后
- 将 Visual Studio 中的调试器设置为 gdb 而不是 gdbserver。这将防止某些调试问题。
- 将所有源文件(.h 和 .cpp)放在项目的主文件夹中 main.cpp 旁边。如果将它们放在不同的目录中,然后再包含在您的项目中,您可以调试程序,但无法单步执行。
- 从简单开始,并在开发时经常调试您的程序。在下次检查之前不要添加太多代码。在交叉编译设置中,可能(并且将会)出错的事情比正常情况多得多。
- VS2017 默认 Linux 包含 C:\Program Files (x86)\Microsoft Visual Studio17\Community\Common7\IDE\VC\Linux\include 中的文件。如果您需要其他的,请将它们放在您自己的文件夹中并包含路径。
交叉编译VS本身不做任何编译,你用它来维护你的项目。当必须编译项目时,所有必要的文件都被复制到Raspberry,VS调用那里的编译器和链接器。
关于如何为远程调试配置项目的问题:最好从 Visual Studio 2017 中的 Blink 示例开始(文件、新建、项目、已安装、Visual C++、跨平台,Linux => 闪烁)。它应该 运行 没有问题。从那里,您可以进一步构建您的项目。
在 Blink 示例中,他们使用 wiringPiSetupSys() 和远程命令 gpio export 17 out 到 运行 您的程序,无需 sudo。我发现将其更改为 wiringPiSetup() 并禁用远程命令,仍然可以 运行 并调试程序。在 Raspberry 上,我可以通过发出 ./[programname] 从它的文件夹中 运行 程序。如果这对您不起作用,您可以通过发出 sudo ./[programname].
来 运行 程序
我想在我的 Raspberry Pi (OS: Raspbian) 上创建一个 MP3 播放器。问题是,我没有任何 Linux 编程经验,而且由于跨平台编译,我在项目配置方面遇到了很大的问题。我想添加两个库:
我可以在 linux 机器上用 gcc -O2 test.cpp -lmpg123
编译代码,但我不能强制 Visual Studio 查看那些库。
我在尝试远程调试我的程序时使用 wiringPi 库时也遇到了问题,因为我必须 运行 它作为 GPIO 配置的根。有什么办法可以强制 Visual Studio 到 运行 我的具有 root 权限的编译代码?
就我个人而言,我有着悠久的 C/C++/MFC/Windows 编程经验,但完全没有 Linux 经验。我大约一年前开始为 Raspberry 编程,当时我从儿子那里得到了一个生日礼物。有了 C/C++ 的历史,它真的不那么难,但你只需要稍微阅读一下,因为在 Linux 上很多是相同的,但很多不是 :)。多读多读,你就是一位经验丰富的 Linux 程序员了!恐怕需要一些时间。
所以,我认为我在这方面是一个经验丰富的新手 :)。我在 www.die.net(和其他 Linux 手册页)上找到了很多信息。如果你在那里搜索一个函数,比如 printf(),请查看 (3) 页 - 它们解释了你应该如何使用 'm.
但是,尽管 VS2017 在这方面做得非常好,但它并不总是像您希望的那样顺利。有时只需要重新启动 Raspberry,重新启动 VS 并重试。 Linux 交叉编译在 VS 中很新,还不完善。
几点提示:
- 首先使用带有新鲜 Stretch 图像的 Raspberry。当然在 sudo apt-get update && sudo apt-get -y upgrade. 之后
- 将 Visual Studio 中的调试器设置为 gdb 而不是 gdbserver。这将防止某些调试问题。
- 将所有源文件(.h 和 .cpp)放在项目的主文件夹中 main.cpp 旁边。如果将它们放在不同的目录中,然后再包含在您的项目中,您可以调试程序,但无法单步执行。
- 从简单开始,并在开发时经常调试您的程序。在下次检查之前不要添加太多代码。在交叉编译设置中,可能(并且将会)出错的事情比正常情况多得多。
- VS2017 默认 Linux 包含 C:\Program Files (x86)\Microsoft Visual Studio17\Community\Common7\IDE\VC\Linux\include 中的文件。如果您需要其他的,请将它们放在您自己的文件夹中并包含路径。
交叉编译VS本身不做任何编译,你用它来维护你的项目。当必须编译项目时,所有必要的文件都被复制到Raspberry,VS调用那里的编译器和链接器。
关于如何为远程调试配置项目的问题:最好从 Visual Studio 2017 中的 Blink 示例开始(文件、新建、项目、已安装、Visual C++、跨平台,Linux => 闪烁)。它应该 运行 没有问题。从那里,您可以进一步构建您的项目。
在 Blink 示例中,他们使用 wiringPiSetupSys() 和远程命令 gpio export 17 out 到 运行 您的程序,无需 sudo。我发现将其更改为 wiringPiSetup() 并禁用远程命令,仍然可以 运行 并调试程序。在 Raspberry 上,我可以通过发出 ./[programname] 从它的文件夹中 运行 程序。如果这对您不起作用,您可以通过发出 sudo ./[programname].
来 运行 程序