天天看点

windbg调试服务程序

    相比通过输出日志来跟踪程序运行状态,我更倾向使用调试器。虽然我早知调试服务很麻烦,总不会比调试驱动还麻烦吧?基于这个想法,我尝试了在win7上使用windbg调试服务并记录于此。

    windows上服务程序可分为两部分:服务安装程序和后台服务程序本身。服务安装程序路数比较固定,几乎不会出错,所以本文仅记录了调试后台服务程序的过程。我在服务管理器中创建了一个显示名为test的服务,ImagePath为:C:\Users\Administrator\Desktop\svr\Debug\srv.exe。

1.设置srv.exe,使其启动时自动启动windbg,这么设置的原因是为了方便调试服务的入口函数ServiceMain。用管理员权限开启windbg目录下的gflags.exe,在"Image File"标签页中填写Image名字(不用写全路径,当exe启动时,加载器会搜索注册表HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\currentversion\image file execution options下的项,如果有同名项,就为其加载Debugee)和调试器的路径。

windbg调试服务程序

2.设置test服务的属性,允许服务以交互式启动。

windbg调试服务程序

(一般情况下,这样设置就可以在服务管理器中右键启动服务。但是有些机器可能会失败,这可能是注册表路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows\NoInteractiveServices被置1----禁止服务交互)

3.设置结束后,即可在服务管理器中右键启动服务。启动时,Win7会弹出"Interactive Services Detection"对话框,选"View the message"即可以windbg调试的方式启动服务。

windbg调试服务程序

继续阅读