http://blog.csdn.net/wangxmin2005/article/details/8128192
gdb调试过程中出现行号错位的情况,原因一般有两个:
1. 编译器的优化可能把某些语句给优化掉了。
解决这种情况很简单,makefile中-O2这类的编译优化去掉,换成最简单的g++ -g $^ -o $@ $(INCLUDES) $(LIBS)
2.文件格式转换问题。dos格式文件传输到unix系统时,会在每行的结尾多一个^M,造成文件格式混乱,换行错误,由此导致gdb调试中行号错误。
dos,unix格式处理的差别:DOS是回车+换行,而在UNIX下,只有回车,无换行!
用脚本来判断文件是哪种格式:
file filname|grep -qv ^M && echo file is unix formart || echo file is dos formart
其他方式判断文件格式:vim打开
这种有[dos]的为dos文件格式
这种即unix文件格式
解决方式
vim dos.txt :set fileformat=unix :w
这样文件就转换成unix格式文件了, 一般在windows机器上编写好了文件传到unix下就可能会出现这样的情况.
用命令:set ff?
可以看到dos或unix的字样.
用:set ff=unix把它强制为unix格式
也可以用sed 这样的工具来做:
sed 's/^M//' filename > tmp_filename
其中^M是同时Ctrl+V+M按出来的,表示回车。
最简单的方式:dos2unix filename