如何解决OpenCL 日志文件定位错误,就像代码是一个长行
我生成了一个日志文件(在 OSX 上使用 OpenCL)
void printErrors(const Program& program,const Device& device){
string buildlog = program.getBuildInfo<CL_PROGRAM_BUILD_LOG>(device);
ofstream file("./error.txt");
file << buildlog << endl;
file.close();
}
但是生成的文件似乎将代码解释为一个很长的行。例如,错误位于 <program source>:1:10604:
。这对于调试来说不是很方便。您知道如何获得像 <program source>:line:column:
这样的好位置吗?
顺便说一下,对于每个错误/警告,整个程序都会复制到日志文件中。您知道如何避免这种行为吗?
源代码是这样生成的:
ifstream file("./kernel.cl");
string source;
while (!file.eof()){
char line[256];
file.getline(line,255);
source += line;
}
const char* kernel_source = source.c_str();
program = Program(context,kernel_source);
int result = program.build(device);
if (result == CL_BUILD_PROGRAM_FAILURE) printErrors(program,device);
而且文件 kernel.cl 真的很标准,每行末尾都有分号。
解决方法
我认为您的问题在这里:
char line[256];
file.getline(line,255);
source += line;
getline
将不包含换行符,因此您需要明确插入它们。试试这个:
source += line;
source += "\n";
这也应该可以解决错误消息中包含整个单行源代码的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。