我正在使用Windbg来调试我的用户模式驱动程序(考虑使用USB)。我的驱动程序包(调试版本,64位)同时具有内核模式和用户模式代码。软件包已成功安装在我的目标机器中,模块也已加载(因为我可以使用windbg-command验证:'lm “)。我在主机上以管理员模式运行Windbg并使用1394 firewire卡调试目标。
在开始应用程序之后,当我尝试在用户模式驱动程序中调试函数时,我发现虽然正确设置并启用了断点,但预期函数没有被命中。然后我在内核代码中设置一个函数的断点(一个经常在启用时被命中的重复服务过程)。这次这个内核模式驱动程序函数入侵,并且在某个时间之后上面设置的用户模式驱动程序函数也被打破了,我可以调试它并遵循代码路径。
再次,当我关闭&重启应用程序,只有当启用并命中内核模式驱动程序功能断点时,才会触发用户模式驱动程序功能。但是,如果禁用,则不会命中用户模式驱动程序功能。无论我们在内核模式或用户模式驱动程序上设置断点的功能如何,都会发生这种情况。
为什么会出现这种情况,虽然模块已正确加载?我是否需要配置或确定某些内容,以便在启动应用程序时,我不需要依赖内核模式部分?
答案 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'
您可能没有在正确的会话中设置断点。