2016-05-25 4 views
3

Возможно ли иметь доступ к стандартным выводам удаленной сессии GDB в Visual Studio? Я использую Visual Studio Visual C++ для разработки Linux и хотел бы иметь доступ ко всем данным printf'd.Вывод удаленного отладчика GDB в Visual Studio

+0

Мне известно только об этом https://blogs.msdn.microsoft.com/vcblog/2015/11/18/announcing-the-vs-gdb-debugger-extension/ – control

ответ

1

IMHO как stdout, так и stderr должны быть переданы в окно вывода или отладки с помощью ssh/gdb-канала MSVC, но они не являются, по крайней мере, в MSVC 2017, версия 15.3. Надеюсь, Microsoft это будет для нас позже.

В то же время обходной путь можно использовать в режиме gdbserver. Стенд Debuggee заканчивается где-то в виртуальном терминале ssh. Он может быть перенаправлен, например. до /tmp/stdout, установив Debug/solution Properties/Debugging/Program Arguments на >/tmp/stdout, который можно посмотреть в другом терминале на tail -f /tmp/stdout.

Другой способ увидеть stdout - показать его в отдельном окне, когда начинается отладчик, подобно новой консоли в процессе консоли Win32. Это может быть достигнуто с помощью X-сервера, работающего на том же компьютере, что и MSVC. Например. Xming отлично работает в Windows 7 (обратите внимание, что удаленная Linux-машина должна быть разрешена в c:\Program Files (x86)\Xming\X0.hosts). X DISPLAY переменная среды на удаленном компьютере Linux должна быть настроена на отображение отладочной машины Windows, например. до 192.168.1.10:0. Установите Debug/solution Properties/Debugging/Pre-Launch Command на export DISPLAY=192.168.1.10:0 (замените IP-адрес вашей машиной Windows) или дайте оболочке заполнить IP-адрес для вас export DISPLAY="`sed -e 's/ .*/:0/'<<<"$SSH_CLIENT"`". В этом случае вывести stdout в трубку, установив параметры Debug/solution/Debugging/Program Arguments на |xless -f (xless должен быть установлен на удаленном компьютере Linux, например, apt-get install xless).

Обратите внимание, что stdout не всегда продувается debuggee с новой строкой при перенаправлении, поэтому setvbuf(stdout, NULL, _IONBF, 0) в качестве первого вызова в main() поможет.

Похоже, что stderr съедается трубой отладки MSVC, поэтому ее нельзя перенаправить без отладки, но stderr=stdout в main() поможет.

Смежные вопросы