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