我正在使用 Visual Studio 2008 调试我正在处理的一些 CUDA 代码 (NSight v3)。
我注意到 VS2008 调试器的几个不错的功能,例如使用“hitcount”功能每 N 次或 N 次后才中断的能力。我还注意到能够运行宏或打印消息而不是中断。然而,这些功能似乎都不适用于 NSight 调试器(正如 NVidia 网站上针对 NSight v1.5 的说明)。
使用 GDB,我只需输入“Continue 300”即可继续 300 次。这对于循环的第 300 次迭代非常有用。如何在 Visual Studio 2008 中执行此操作?请注意,我不想在第 N 次遇到某个断点时中断,我想在第 N 次遇到任何断点时中断。
也能解决我的问题的是能够从任何一个(但只有一个!)CUDA 线程的循环中打印出特定变量。由于调试器足够好,不会在线程之间跳转,因此我可以使用如下的 GDB 脚本来完成此操作:
c
print my_value
c
print my_value
... N - 2 more times
我显然会使用 Python 或 bash 或其他东西来生成它。
由于 VS2008 显然依赖于底层调试器来实现命中计数或打印消息等功能(而不是仅在顶层实现),因此我不知道如何立即完成此操作。
最佳答案
事实证明,您可以创建一个宏来执行此操作!下面是一个可以跳过 5 次的内容:
Option Strict Off
Option Explicit Off
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics
Public Module RecordingModule
Sub ClickContinue()
DTE.Debugger.Go(True)
DTE.Debugger.Go(True)
DTE.Debugger.Go(True)
DTE.Debugger.Go(True)
DTE.Debugger.Go(True)
End Sub
End Module
这个会提示您输入一个号码,然后继续多次。
Option Strict Off
Option Explicit Off
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics
Public Module RecordingModule
Sub ClickContinue()
numToSkip = InputBox("How many times to continue?")
For i = 0 To CInt(numToSkip)
DTE.Debugger.Go(True)
Next
End Sub
End Module
我通过使用“记录宏”功能并(稍微)修改结果得到了这些。比 Continue N
需要做更多的工作,是吗?
关于visual-studio - 在 Visual Studio 2008 中继续 N 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16925568/