最近调试某个.h里的inline函数时,调试器的当前调试行,和实际代码功能总是不符(用汇编窗口可以清楚的看到),正好差两行
这个问题还以为是大文件特有的,这个.h有一千多行
其实这个问题已经存在几个月了,今天实在忍不住,写了个简单的test函数到处插入,最终定位到一个函数有问题
template<typename T>
static bool get(lua_State* L, LuaType<Type_Bool>*, int index, T& value)
{
bool ok = lua_isboolean(L, index) != 0;
if (ok)
value = lua_toboolean(L, index) != 0;
else
{
bool ok = lua_tointeger(L, index) != 0;
if (ok)
value = lua_tointeger(L, index) != 0;
else
value = false;
}
return ok;
}
本以为是里面的行末注释有问题,删了注释发现还不行,所以就想看看这段函数的编码有没有问题,用UltraEdit打开,想找那个隐藏字符显示的功能一时没找到
换EditPlus,还是一时没找到,但是此时突然发现两个编辑器的行号不对应,再仔细一看,发现EditPlus里有几个行居然没换行显示在同一行里了!而UltraEdit是换行的
在EditPlus里重新把这个函数换行好,回到VS再调试再也没有源码调试错位问题了!
看来问题就在于调试器或者说链接器对文本的解析,跟VS Editor的解析,还是稍微有一点差距的