在Visual Studio中输出远程GDB调试器

时间:2016-05-25 14:28:51

标签: visual-studio gdb cross-platform

是否可以在Visual Studio中访问远程GDB会话的stdout?我正在使用Visual Studio Visual C ++进行Linux开发,并希望能够访问所有printf'd数据。

1 个答案:

答案 0 :(得分:1)

恕我直言,stdout和stderr应该通过MSVC的ssh / gdb管道传递到输出或调试窗口,但它们不是,至少在MSVC 2017版本15.3中。希望微软稍后能为我们实现这一点。

与此同时,可以在gdbserver模式下使用解决方法。 Debuggee的stdout最终在ssh虚拟终端中的某个地方。它可以被重定向,例如通过将调试/解决方案属性/调试/程序参数设置为/tmp/stdout>/tmp/stdouttail -f /tmp/stdout,可以通过c:\Program Files (x86)\Xming\X0.hosts在另一个终端中观看。

另一种查看stdout的方法是在调试器启动时在单独的窗口中显示它,就像Win32 Console进程中出现的新控制台一样。这可以通过在与MSVC相同的机器上运行的X服务器来实现。例如。 Xming在Windows 7上运行正常(请注意,DISPLAY中必须允许远程Linux机器)。必须将远程Linux计算机上的X 192.168.1.10:0环境变量设置为调试Windows计算机的显示,例如到export DISPLAY=192.168.1.10:0。将调试/解决方案属性/调试/预启动命令设置为export DISPLAY="`sed -e 's/ .*/:0/'<<<"$SSH_CLIENT"`"(用Windows机器替换IP地址)或让shell通过|xless -f为您填写IP。这次通过将Debug / solution Properties / Debugging / Program Arguments设置为apt-get install xless来管道stdout(xless必须安装在远程Linux机器上,例如setvbuf(stdout, NULL, _IONBF, 0))。

请注意,调试对象在重定向时不会使用新行刷新stdout,因此main()中的stderr=stdout作为main()中的第一个调用会有所帮助。

看起来stderr被MSVC调试管道吃掉了,所以如果没有调试失败就无法重定向,但numpy.random.shuffle中的numpy.random.shuffle会有所帮助。