我工作的VS 2010 Express和尝试做一些文件的读取和解析工作优化使功能立即返回而不是执行
我的功能是这样的......(我放弃了枯燥的部分)
void SomeClass::SomeFunc(char *ALName, std::map<...> *chromList, std::map<...> *chromLine)
{
ifstream file;
char tmpBuff[500];
char tmpBuff2[500];
char fileName[350];
char tmp[350];
char *pch;
char *pch2;
.....
file.open(fileName);
while (file.getline(tmpBuff, 500))
{
....
if (some_condition == 0)
{
pch2 = strtok(NULL, ",");
pch = strtok(NULL, ",");
(*chromList)[pch2] = do_some_work(atoi(pch), tmpBuff2);
strcpy(tmp, get_chrom_line(tmpBuff2));
(*chromLine)[pch2] = tmp;
}
}
file.close();
}
当我更改为优化释放设置为最大速度时,此功能被跳过。调试器进入函数并立即返回。
当我与调试设置运行或设置为禁用优化标志解除,功能运行良好。
可能的原因是什么? 我可以把一个预处理定义给力“不优化”这一功能,而其余代码得到优化
谢谢! 伊詹
我觉得无聊的部分可能很重要。由于您正在从文件中读取,编译器必须假设副作用,并且可能无法优化读数。 –
使用优化进行调试非常棘手,因为执行的代码不一定处于相同的位置/顺序。此外,您不一定依赖显示实际值的值。 – crashmstr
- > 1无聊的部分主要包含文件路径连接和简单的strtok&strcmp调用。 - > 2我没有试图调试发布代码,但我可以看到它没有任何作用。 – iKatalan