分类: C/C++
2010-07-08 13:30:51
|
调试环境:
使用windows上sourceinsight编辑程序,然后ftp到服务器上,使用gcc编译,最后使用gdb进行调试。
调试过程:
使用gdb调试,跟踪进入HQueryrecordAsDin函数时,gdb显示停在第8行上。这个显示让人很诧异,因为函数还没有执行,怎么就已经跳过了第一个语句呢?此时,如果使用next单步执行,则程序显示第9行。通过打印i的测值,我发现,执行next前,程序虽然显示的是第8行,但实际上语句还未执行,说明gdb显示的语句行不正确。
怪异的是,如果把上面已经注释掉的for语句部分删除,则gdb工作恢复正常。一个已经被注释的语句怎么会影响调试器的运行呢?
在几次尝试以后,确认只要把for语句最后的几个看不到的字符删除,则程序调试正常。检查该字符,该字符为ascii“0D”。直接在unix机器上使用vi查看代码,发现该语句在unix上实际显示为:
|
估计是该字符在编译器和调试器内的意义不同,导致gdb下调试环境内行号的混乱。