2016-07-31 50 views
-1

我已經包含helper_cuda.h,我在我的代碼中的每個CUDA調用上都使用了宏checkCudaErrors。我已經通過下面的代碼強制的錯誤:checkCudaErrors不打印錯誤信息

checkCudaErrors(cudaMalloc(&GPUCameraData, sizeof(float) /*<-- Should be HCameraData */)); 
checkCudaErrors(cudaMemcpy(GPUCameraData, CPUCameraData, sizeof(HCameraData) 
                 , cudaMemcpyHostToDevice)); 

應用簡單地,錯誤代碼1退出時,它應該,但不打印信息。如果我在第一行中斷並進入第二行,則看到_cudaGetErrorEnum()helper_cuda.h的確返回"cudaErrorInvalidValue",但輸出中沒有打印任何信息。

我使用的開發環境是Visual Studio 2013,我已經在調試和發佈模式下對此進行了測試。

注意:我與OpenGL和glGetError有同樣的問題。看起來好像任何fprintf(stderr, ...);來自不是直接在我自己的文件結構中的代碼的調用都不會打印任何東西。

+1

您是從命令行還是在VS中運行程序?如果您正在VS內運行該程序,請嘗試從命令行運行該程序。如果錯誤打印輸出發生在那裏,但不在VS中,那麼你需要檢查你的VS配置(即[找出stderr管道路由到...](http://stackoverflow.com/questions/2683249/redirect- stdout-and-stdr-to-the-output-debug-console-of-microsoft-visual-studi)) –

+0

@RobertCrovella我將stderr管道路由到錯誤日誌文本文件,現在錯誤消息正確地打印在那裏。我將嘗試弄清楚如何將它們路由到VS IDE中的輸出日誌。隨意添加您的建議作爲答案。 – henrikdahlberg

回答

0

原因可能是您正在創建一些其他類型的應用程序,而不是默認的C++應用程序(在您的情況下重新編譯CUDA和OpenGL),即您是否將此代碼編譯爲要用於另一個不是C++的項目的庫,或某種鏈接問題(您有哪些類型的項目......需要信息!)。當我將cuda代碼編譯爲Matlab-Mex文件時,我會遇到同樣的問題,該文件將使用「checkCudaErrors」內使用的命令「mexPrintf」而不是「fprintf」進行打印。您可以測試將helper_cuda.h中的打印命令從fprintf更改爲打印信息,然後從程序調用它。