已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。这种错误在OpenCL编程中发生的原因分析

      一段程序,在编译、链接时都不存在问题,可是在运行的时候出现了问题,提示找不到符号,从而程序终止。对于OpenCL编程来说,原因分析如下:

在OpenCL编程中,涉及到在GPU上运行的部分代码,如果出错,比如忘记写变量名,如下图所示:

已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。这种错误在OpenCL编程中发生的原因分析

此时点击本地Windows调试器进行运行是无法成功运行的,而且不会输出错误提示,但是输出窗口显示如下:

已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。这种错误在OpenCL编程中发生的原因分析

即,会出现一系列无法查找或打开PDB文件的错误,搜索网上会说这是链接出错,而对于OpenCL的项目来说,也有可能是代码出错了,这时如何定位代码出错位置?

解决方案:不点击“本地Windows调试器”,点击“调试”中的“开始执行(不调试)”,这时输出信息如下:

已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。这种错误在OpenCL编程中发生的原因分析

从中可以找到出错代码的位置:

已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。这种错误在OpenCL编程中发生的原因分析

代码还是要仔细写,否则为了找出错的位置需要好久。。。。。。

参考网站中评论内容:https://blog.****.net/sidely/article/details/49904807 

已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。这种错误在OpenCL编程中发生的原因分析

然而,错误并不是这么简单,之所以上面的错误没报错,是因为前面已经声明了全局变量program。而这并不是程序真正出错的原因,通过将各个可能出错的情况下的return语句前加上输出错误信息的代码,结果输出如下:


已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。这种错误在OpenCL编程中发生的原因分析

后来发现又是照着敲代码敲错。。。。。。