Windows 上的无头调试
Headless debugging on Windows
有一个我想修复的错误,它只发生在没有 GUI Windows 服务器 运行 的 Windows 服务器上。我已经在 Google Compute Engine 上设置了一台 Windows Server 2019 机器,它重现了这个错误,我想调试它。
理想情况下,我想使用 gdb,但由于程序是使用 Visual Studio 2019 构建的,gdb 无法读取调试符号。
我没有 Windows 机器,所以使用 Visual Studio 会很困难。我可以设置一个 VM,但如果有一种在终端中执行此操作的方法,那将是首选。
我进行了相当彻底的 Google 搜索,但没有找到任何结果。真的没有Windows无头调试C++代码的解决方案吗?
除了通常的 Visual Studio,MS 有 2 个来自 MS 的名为 CDB and NTSD so you don't actually need Visual Studio GUI to do the debugging. In fact there are a lot of debugging environments in Windows 的控制台调试器。只需将它们安装在您的 Windows 服务器中并从您的终端
远程控制它们
自 PDB format has been published long time ago and LLVM on Windows does support it 以来,您还可以使用 LLDB 调试 MSVC 编译的代码。尽管
Linux 上不知道当前的 LLDB
并且由于您拥有源代码,有时老式 printf
调试器是分析问题的最佳方式
如果您可以获得 Windows VM,那么 remote debugging 会好得多。事实上,几乎所有调试器都支持该功能,包括 GDB 或 LLDB,因此即使您没有源代码,您仍然可以 运行 any Windows 调试器和从远程机器逐步执行指令而不是高级代码行
另一种方法是采用 memory dump and debug later. After getting the dump file, just drag it into your VS solution or any debugging tool like WinDbg 然后 select "Start Debugging"。现在您可以单步执行 instructions/code 行并检查变量的值,或者跳转到任意函数的堆栈帧,就好像您真的 运行 运行故障应用程序一样
有很多方法可以转储进程的内存。您可以将 Windows 设置为在您的应用程序崩溃时自动保存转储文件,或者仅在 运行 时间内手动捕获内存快照。比较 2 个快照对于检测内存泄漏也很有用。有关如何执行此操作的更多信息,请阅读
还有一种简单的方法可以使用 task manager(或任何其他类似工具)
转储实时进程
有一个我想修复的错误,它只发生在没有 GUI Windows 服务器 运行 的 Windows 服务器上。我已经在 Google Compute Engine 上设置了一台 Windows Server 2019 机器,它重现了这个错误,我想调试它。
理想情况下,我想使用 gdb,但由于程序是使用 Visual Studio 2019 构建的,gdb 无法读取调试符号。
我没有 Windows 机器,所以使用 Visual Studio 会很困难。我可以设置一个 VM,但如果有一种在终端中执行此操作的方法,那将是首选。
我进行了相当彻底的 Google 搜索,但没有找到任何结果。真的没有Windows无头调试C++代码的解决方案吗?
除了通常的 Visual Studio,MS 有 2 个来自 MS 的名为 CDB and NTSD so you don't actually need Visual Studio GUI to do the debugging. In fact there are a lot of debugging environments in Windows 的控制台调试器。只需将它们安装在您的 Windows 服务器中并从您的终端
远程控制它们自 PDB format has been published long time ago and LLVM on Windows does support it 以来,您还可以使用 LLDB 调试 MSVC 编译的代码。尽管
Linux 上不知道当前的 LLDB并且由于您拥有源代码,有时老式 printf
调试器是分析问题的最佳方式
如果您可以获得 Windows VM,那么 remote debugging 会好得多。事实上,几乎所有调试器都支持该功能,包括 GDB 或 LLDB,因此即使您没有源代码,您仍然可以 运行 any Windows 调试器和从远程机器逐步执行指令而不是高级代码行
另一种方法是采用 memory dump and debug later. After getting the dump file, just drag it into your VS solution or any debugging tool like WinDbg 然后 select "Start Debugging"。现在您可以单步执行 instructions/code 行并检查变量的值,或者跳转到任意函数的堆栈帧,就好像您真的 运行 运行故障应用程序一样
有很多方法可以转储进程的内存。您可以将 Windows 设置为在您的应用程序崩溃时自动保存转储文件,或者仅在 运行 时间内手动捕获内存快照。比较 2 个快照对于检测内存泄漏也很有用。有关如何执行此操作的更多信息,请阅读
还有一种简单的方法可以使用 task manager(或任何其他类似工具)
转储实时进程