2016-07-31 161 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更改为打印信息,然后从程序调用它。