是否有必要在内核模式驱动程序中设置断点以在其用户模式对应部分中调试函数(使用Windbg)?

时间:2014-02-07 06:19:29

标签: windows debugging driver windbg umdf

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

在开始应用程序之后,当我尝试在用户模式驱动程序中调试函数时,我发现虽然正确设置并启用了断点,但预期函数没有被命中。然后我在内核代码中设置一个函数的断点(一个经常在启用时被命中的重复服务过程)。这次这个内核模式驱动程序函数入侵,并且在某个时间之后上面设置的用户模式驱动程序函数也被打破了,我可以调试它并遵循代码路径。

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

为什么会出现这种情况,虽然模块已正确加载?我是否需要配置或确定某些内容,以便在启动应用程序时,我不需要依赖内核模式部分?

2 个答案:

答案 0 :(得分:1)

请参阅我的文章,了解您为何会出现此行为的信息:

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

通常最好在目标计算机上调试用户模式代码,在调试连接上执行此操作并不总是很友好。

答案 1 :(得分:0)

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

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

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

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