【问题标题】:Kernel debugging in visual studio: Watch window array lengthVisual Studio 中的内核调试:观察窗口数组长度
【发布时间】:2017-03-05 07:46:44
【问题描述】:

我正在使用 Visual Studio 进行内核调试。是的,我知道所有的教程都说要使用 WinDbg,但是 Visual Studio 现在对于内核调试来说实际上非常出色。这是最近的发展。

当我在监视窗口中有一个指针时,假设它是一个数组,我想一次在其列表中查看多个项目作为下拉列表。通常在 Visual Studio 中,您会在指针后添加“,AMOUNT”以获取多个项目,但这在内核调试模式下不起作用。

这个选项可用吗?

[编辑] 根据要求,我附上了一张示例图片。在监视窗口中,我多次尝试访问“ProcessPath”变量中的数据。

【问题讨论】:

  • 你的意思是像VC++/VC指针这样的通用应用程序调试效果很好?你能分享一个使用一个驱动器的简单示例吗?您是如何在监视窗口中输入文本的?可以分享一下屏幕截图吗?
  • 我已附上图片。
  • 工具->选项->调试下的“使用原生兼容模式”或“使用原生兼容模式”是开启了吗?不是真正的内核调试专家,但我只是遇到了类似的问题,比如两个调试选项会影响调试监视窗口。如果仍然没有帮助,请分享一个简单的示例,以便我可以设置环境并重现此问题。
  • 我在 Debugging->General 部分找不到该选项。您的意思是说“使用本机兼容模式”两次吗?我目前使用的是 2013,它是 2015 的选项吗?我之前已经切换环境进行测试,所以可以再次这样做。如果你以前没有做过内核调试,那么它有点像 PITA 来设置和运行。最简单的方法是使用微软提供的hello world app。在其中,您所要做的就是创建一个用于测试的 char* 变量。
  • 我希望反对者留下一个理由来解释为什么这不是一个好问题。这本可以帮助 OP 修复它,或者我们其他人提出更好的问题。

标签: c++ visual-studio debugging kernel watch


【解决方案1】:

在内核模式调试期间,Watch 窗口似乎可以通过 WinDBG 表达式求值器工作。也就是说,它的工作方式与 WinDBG 的 Watch 窗口几乎相同。因此,您的问题实际上与 Visual Studio 无关,而归结为 WinDBG 的手表。

这就是为什么,amount 语法将导致显示amount 作为结果-WinDBG 将, 视为“评估和丢弃”,就像c++ 一样。这也解释了为什么要在变量前加上 $!,这是局部变量的 WinDBG 语法。

虽然 WinDBG 支持相当多的 c++ 语法,但遗憾的是它无法识别 c++ cast-to-array 语法,例如 (char(*)[4])$!ProcessPath(顺便说一句,这在 VS 调试器中调试用户模式目标时有效)。

我还没有找到一种在 WinDBG 中转换为数组的方法。似乎唯一可用的解决方法是添加要观看的特定数组元素,例如

ProcessPath[0]
ProcessPath[1]
ProcessPath[2]
ProcessPath[3]
ProcessPath[4]
ProcessPath[5]
ProcessPath[6]
ProcessPath[7]
ProcessPath[8]

【讨论】:

  • 感谢您的回答。我会给你一个赞成票,但不能真正认为这是一个解决方案。还不如给你50分……否则它就会消失。
猜你喜欢
  • 1970-01-01
  • 2021-02-27
  • 1970-01-01
  • 2016-08-30
  • 1970-01-01
  • 2020-11-23
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
相关资源
最近更新 更多