2

我正在使用 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 依赖于底层调试器来实现诸如命中计数或打印消息(而不是仅仅在顶层实现它),我没有立即看到如何实现这一点。

4

1 回答 1

2

原来你可以创建一个宏来做到这一点!这是一个简单地跳过 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,是吗?

于 2013-06-04T22:06:25.487 回答