Невозможно открыть / dev / ttyUSB0 при отладке с помощью кода Visual Studio в Linux - PullRequest
0 голосов
/ 26 августа 2018

Я заметил, что попытки открыть / dev / ttyUSB0 потерпят неудачу, когда я запускаю свой код с отладчиком VSCode.

Тот же код будет работать правильно, когда я запускаю программу в GDB в командной строке.

main.cpp:

#include <iostream>
#include <fcntl.h>

int main(int argc, char** argv){
    int reg_fd = open("other_file.txt", O_RDWR);
    int dev_fd = open("/dev/ttyUSB0", O_RDWR); 
    std::cout << "reg_fd: " << reg_fd << std::endl;
    std::cout << "dev_fd: " << dev_fd << std::endl;
    return 0;
}

скомпилировано с:

g++ -g ./main.cpp

Когда я отлаживаю с помощью gbd из командной строки, он работает нормально:

$gdb ./a.out
GNU gdb (Ubuntu 8.1-0ubuntu3) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./a.out...done.
(gdb) run
Starting program: /home/bob/stackoverflowQ/a.out 
reg_fd: 3
dev_fd: 4
[Inferior 1 (process 20129) exited normally]
(gdb) 

При запуске внутри отладчика VSCode я получаю:

reg_fd: 3
dev_fd: -1

Вот мой launch.json:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/a.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

Если я заменим "/ dev / ttyUSB0" на "/ dev / urandom", тогда и командная строка gdb, и отладчик VSCode будут работать нормально.

Это заставляет меня думать, что проблема может быть связана с некоторой переменной среды или настройкой среды, которые мне нужно указать в файле запуска.

Кто-нибудь знает, как я могу заставить это работать в VSCode?

Спасибо.

Правки:

  1. На случай, если кто-нибудь найдет это и вопрос останется без ответа. Я обнаружил, что можно запустить мою программу из командной строки, а затем подключить отладчик VSCode C ++ к запущенному процессу. Когда сеанс отладки установлен таким образом, открытие / dev / ttyUSB0 прошло успешно.
  2. Для пояснения, я запускаю это на машине с Ubuntu 18.04 с кодом Visual Studio на нативном Linux.
  3. Мой пользователь является частью группы дозвона.
...