【问题标题】:VS Debugging during program runtime程序运行时的 VS 调试
【发布时间】:2014-02-20 16:28:13
【问题描述】:

为什么调试器必须停止执行代码才能显示变量值?

显然这可以通过明确的方式来完成,例如label.text = var.tostring().

我可以通过获取变量地址来做到这一点,而不是将像 CheatEngine 这样的内存扫描仪附加到我的进程以在执行期间查看变量值。

看起来 VS 调试器虽然强大,但它并没有为我提供此选项,因为内存窗口在执行期间被阻塞。

很可能我只是不了解一些调试范例。

【问题讨论】:

  • 在哪些情况下需要这种功能?
  • 你用的是什么版本?是 Express 版吗?
  • VS 2013 Express for Desktop
  • 每当我需要在执行期间观察变量并且它的变化率不需要断点或断点发生时只会破坏工作流程。我想大多数人都是通过明确的“开发者框架”来做到这一点的,但第 n 次构建它让我思考。
  • 减慢时间是调试的主要要求。调试器无法跟上处理器更改变量值的速度(纳秒)和垃圾收集器移动它们的速度(毫秒)。你的眼睛也同样受到限制。您可以编写“当命中”表达式以在“输出”窗口中显示消息。

标签: c# visual-studio debugging


【解决方案1】:

VS 调试器实际上是跨 CLR 调试器 (ICorDebug) 的一个薄层,它要求停止执行给定线程以检查诸如局部变量、堆栈帧、进行方法调用等值...

当然,如果 VS 愿意,它可以随时进行内存扫描,因为读取内存实际上并不需要任何类型的基础设施。但这对用户来说不太可能非常有用,因为他们真的没有办法将他们想要检查的值(本地和 this)映射到给定的内存地址。即使他们这样做了,这些信息也只在下一次 GC 调用或当前堆栈帧被弹出之前相关。这将是一个相当混乱的体验

【讨论】:

  • 我知道这会导致混乱,当使用错误的方式时,尤其是在频繁 GC 发生以正确使用内存的大型环境中。事实上,GC 是一种内存扫描方法。这就是为什么我首先想到调试器,以便它可以跟踪 GC 事件、内存转移等。感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 2020-02-06
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-25
  • 1970-01-01
相关资源
最近更新 更多