是否需要在内核模式驱动程序中设置断点来调试用户模式计数器部分中的函数(使用Windbg)



我正在使用Windbg调试我的用户模式驱动程序(考虑USB)。我的驱动程序包(调试版本,64位)同时具有内核模式和用户模式代码。该包已成功安装在我的目标计算机中,模块也已加载(正如我可以使用windbg命令验证的那样:"lm")。我正在主机上以管理模式运行Windbg,并使用1394火线卡调试目标。

启动应用程序后,当我尝试在用户模式驱动程序中调试函数时,我发现尽管断点设置和启用正确,但预期的函数并没有达到。然后,我在内核代码中设置了一个函数的断点(一个经常出现的服务过程,在启用时会被击中)。这一次,这个内核模式驱动程序函数崩溃了,过了一段时间,上面设置的用户模式驱动程序功能也崩溃了,我可以调试它并遵循代码路径。

再次,当我关闭&重新启动应用程序,只有当内核模式驱动程序函数断点被启用并命中时,用户模式驱动程序功能才会被命中。但是,如果它被禁用,用户模式驱动程序功能就不会被击中。无论我们在内核模式或用户模式驱动程序上设置什么函数的断点,都会发生这种情况。

尽管模块已正确加载,但为什么会出现这种行为?我是否需要配置或确保一些东西,以便在启动应用程序时,不需要依赖内核模式部分?

我看到WinDBG在调试用户模式调用时有时表现得有点奇怪!

一个快速的建议是:如果您在Vista或更高版本上调试,请注意有多个会话正在运行。例如,

Each user logged on as has a different session]
The services run in session '0'

您可能没有在正确的会话中设置断点。

请参阅我的文章,了解为什么会出现这种行为:

http://www.osronline.com/article.cfm?id=576

通常情况下,最好在目标机器上调试用户模式代码,通过调试连接进行调试并不总是友好的。

最新更新