我尝试使用gdb调试C ++代码。特别是,我想检查某个变量(粘度[j])是否不是NAN并且在某些范围内(eta_min和eta_max)。我使用以下代码执行此操作:
if (!crash)
{
if (viscosities[j]>=eta_min && viscosities[j]<=eta_max)
{}
else
{
std::cout<<"viscosities[j]: "<<viscosities[j]<<" ";
crash = true;
}
}
(我需要变量崩溃,因为循环的代码部分,它在循环开始之前被初始化为0)。
在gdb中,我尝试使用以下命令设置断点:
break nz.cc:238
(第238行是cout语句之一) 但是,断点设置为第246行:
Breakpoint 3 at 0xaeeb09: file /home/lev/aspect/aspect/source/material_model/nz.cc, line 246. (2 locations)
并且编译器永远不会在第238行停止。我通过vi验证了行号并确保重建可执行文件。有人可以告诉我为什么会这样吗?提前谢谢!
UPD:通过在可执行编译期间禁用优化来解决