1

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

启动应用程序后,当我尝试在用户模式驱动程序中调试一个函数时,我观察到虽然断点已正确设置和启用,但预期的函数没有被命中。然后我在内核代码中设置了一个函数的断点(一个经常在启用时经常被命中的服务过程)。这次这个内核模式驱动程序函数闯入,并且在某些时候上面设置的用户模式驱动程序函数也闯入,我可以调试它并遵循代码路径。

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

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

4

2 回答 2

1

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

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

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

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

于 2014-02-10T11:36:14.837 回答
1

请在此处查看我的文章,了解有关您为何会出现此行为的信息:

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

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

于 2014-02-12T15:11:04.997 回答