2013-06-04 49 views
2

我正在使用Visual Studio 2008調試我正在處理的一些CUDA代碼(NSight v3)。在Visual Studio 2008中繼續N次

我注意到了VS2008調試器的一些不錯的功能,例如只能使用「hitcount」功能每N次或N次後中斷。我也注意到能夠運行宏或打印出消息而不是中斷。但是,這些功能似乎都不能與NSight調試器一起使用(並且在NSid v1.5的NVidia網站上也注意到了這些功能)。

使用GDB,我可以簡單地鍵入「繼續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依靠底層調試器來實現命中計數或打印消息(而不僅僅是在頂層實現),所以我不會立即看到如何實現這一點。

回答

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更多的工作,呃?