Visual Studio中远程GDB调试器的输出结果

4

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


我只知道这个:https://blogs.msdn.microsoft.com/vcblog/2015/11/18/announcing-the-vs-gdb-debugger-extension/ - proton
1个回答

2

在我看来,ssh/gdb管道的MSVC应该将stdout和stderr都传递到输出或调试窗口中,但至少在MSVC 2017版本15.3中没有这样做。希望微软以后会为我们实现这一点。

与此同时,在gdbserver模式下可以使用解决方法。被调试程序的stdout最终出现在ssh虚拟终端中。它可以通过将Debug/solution Properties/Debugging/Program Arguments设置为>/tmp/stdout来重定向到/tmp/stdout,然后可以通过tail -f /tmp/stdout在另一个终端中查看。

另一种查看stdout的方法是在调试器启动时在单独的窗口中显示它,就像Win32 Console进程中出现的新控制台一样。这可以通过在运行相同机器上的X服务器上实现。例如,在Windows 7上Xming可以很好地工作(请注意,远程Linux机器必须允许在c:\Program Files (x86)\Xming\X0.hosts中)。远程Linux机器上的X的DISPLAY环境变量必须设置为调试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"`"让shell为您填充IP。这次通过将Debug/solution Properties/Debugging/Program Arguments设置为|xless -f来管道stdout(在远程Linux机器上必须安装xless,例如通过apt-get install xless)。

请注意,当重定向时,stdout并不总是由调试程序刷新新行,因此在main()中的第一次调用setvbuf(stdout, NULL, _IONBF, 0)会有所帮助。

还有一点需要注意的是,看起来stderr被MSVC调试管道吃掉了,因此无法重定向而不导致调试失败,但在main()中使用stderr=stdout会有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接