调试使用 mingw/msys2 构建的 Windows 服务
Debugging Windows service built with mingw/msys2
我在 Windows 使用 MSYS2 环境使用 QT 和 Boost Logger 构建的 Windows 服务中调试了一次崩溃。当我在退出前停止程序时,真正的主要问题就来了。该程序只是没有成功地存在并抛出这些坏男孩之一:
如果我在 gdb 中 运行 它可能是一个不同的故事。我在 windbg 中打开故障转储并获取一些信息,但由于未导出符号,所以它真的很神秘。
我的程序(称为服务)调用日志时发现一些问题。但我不能在这里做太多关于在哪里或什么的事情。我怎样才能得到有用的东西,这样我才能最终解决这个问题?
非常感谢!
似乎最简单和最自然的方法是将 gdb 附加到 运行 进程。我只是 运行 msys2 作为管理员,然后 运行 命令
gdb service.exe -p [processID]
任务管理器给了我进程 ID。一旦附加了进程,我就使用了命令
continue
让它继续运行。然后我让它崩溃,gdb 完美地给了我回溯。
我对此进行了一些搜索,这比尝试让 windbg 读取 g++ 生成的符号或读取汇编代码要简单得多。希望这对遇到同样问题的人有所帮助。
参考文献:
How to attach a process in gdb
我在 Windows 使用 MSYS2 环境使用 QT 和 Boost Logger 构建的 Windows 服务中调试了一次崩溃。当我在退出前停止程序时,真正的主要问题就来了。该程序只是没有成功地存在并抛出这些坏男孩之一:
如果我在 gdb 中 运行 它可能是一个不同的故事。我在 windbg 中打开故障转储并获取一些信息,但由于未导出符号,所以它真的很神秘。
我的程序(称为服务)调用日志时发现一些问题。但我不能在这里做太多关于在哪里或什么的事情。我怎样才能得到有用的东西,这样我才能最终解决这个问题?
非常感谢!
似乎最简单和最自然的方法是将 gdb 附加到 运行 进程。我只是 运行 msys2 作为管理员,然后 运行 命令
gdb service.exe -p [processID]
任务管理器给了我进程 ID。一旦附加了进程,我就使用了命令
continue
让它继续运行。然后我让它崩溃,gdb 完美地给了我回溯。
我对此进行了一些搜索,这比尝试让 windbg 读取 g++ 生成的符号或读取汇编代码要简单得多。希望这对遇到同样问题的人有所帮助。
参考文献:
How to attach a process in gdb