gdb调试行号错位

http://blog.csdn.net/wangxmin2005/article/details/8128192

gdb调试过程中出现行号错位的情况,原因一般有两个:

1. 编译器的优化可能把某些语句给优化掉了。

  解决这种情况很简单,makefile中-O2这类的编译优化去掉,换成最简单的g++ -g $^ -o [email protected] $(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

时间: 2024-12-15 16:59:35

gdb调试行号错位的相关文章

GDB调试器使用总结

概述:GDB是linux下调试程序的神器,做为linux程序员,如果不能熟练的使用GDB进行程序调试,那将是很失败的事情.强大的功能使GDB的使用也变得比较复杂,如果是初学者肯定会比繁杂的命令吓到.下面是整理的一些我认为会比较有帮助的部分.下文中以">"开头的命令是linux的shell命令,以"(GDB)"开头的则是GDB内部命令. 0.转储功能(core dump): (1).开启转储功能:首先用 >ulimit -c 查看是否开启转储功能,如果命令

gdb调试命令的使用及总结

gdb调试命令的使用及总结 gdb是一个在UNIX环境下的命令行调试工具.如果需要使用gdb调试程序,请在gcc时加上-g选项.下面的命令部分是简化版,比如使用l代替list等等. 1.基本命令 命令 描述 backtrace(或bt) 查看各级函数调用及参数 finish 连续运行到当前函数返回为止,然后停下来等待命令 frame(或f) 帧编号 选择栈帧 info(或i) locals 查看当前栈帧局部变量的值 list(或l) 列出源代码,接着上次的位置往下列,每次列10行 list 行号

使用GDB命令行调试C/C++程序

#include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { int i; int a=0, b=0, c=0; double d; for (i=0; i<100; i++) { a++; if (i>97) d = i / 2.0; b++; } return 0; } GDB的使用 首先最重要的,你需要使用编译器的 "-g"选项来编译程序,这样可执行程序才能通过

使用GDB命令行调试器调试C/C++程序【转】

转自:https://linux.cn/article-4302-1.html 编译自:http://xmodulo.com/gdb-command-line-debugger.html作者: Adrien Brochard原创:LCTT https://linux.cn/article-4302-1.html译者: SPccman本文地址:https://linux.cn/article-4302-1.html 2014-11-25 21:48    评论: 31 收藏: 19 分享: 43

使用GDB命令行调试器调试C/C++程序

没有调试器的情况下编写程序时最糟糕的状况是什么?编译时跪着祈祷不要出错?用血祭召唤恶魔帮你运行程序?或者在每一行代码间添加printf("test")语句来定位错误点?如你所知,编写程序时不使用调试器的话是不方便的.幸好,linux下调试还是很方便的.大多数人使用的IDE都集成了调试器,但 linux 最著名的调试器是命令行形式的C/C++调试器GDB.然而,与其他命令行工具一致,DGB需要一定的练习才能完全掌握.这里,我会告诉你GDB的基本情况及使用方法. 安装GDB 大多数的发行版

Qt Quick调试之显示代码行号

QML 文档可以使用 console 对象来打印日志信息,可默认是无法输出行号的.帮助文档中说需要设置 QML_CONSOLE_EXTENDED 环境变量即可,测试了一下不管用.后来找到 qt.gitorious.org 上的一个文章(链接点这里),说 Qt 5.0 之后这个宏已经随风而去了.不过有更好用的方式,设置 QT_MESSAGE_PATTERN . 如果你使用qmlscene来调试qml文档,在Windows下这样设置: set QT_MESSAGE_PATTERN=%{file}:%

EasyUI datagrid : 启用行号、固定列及多级表头后,头部行号位置单元格错位的问题

症状如图: 上图中,行号列与checkbox 列融合了.解决方法是在datagrid 的 onLoadSuccess 事件中加入如下代码: var opts = $(this).datagrid('options'); if(opts.rownumbers){ var dgPanel = $(this).datagrid('getPanel'); var tdRownumber = dgPanel.find('.datagrid-header-rownumber').parent(); var

Linux下GDB调试与对拍(先挖个坑)

应为NOIP要复赛在NOI-Linux下编写程序,所以被迫选择Vim+Gdb(主要是Guide太丑了). 虽然GUIDE的调试功能已经对付大多数的调试,反正学一学GDB的使用也没什么坏处. 1 生成调试信息 要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中.使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点.如: gcc -g hello.c -o hello g++ -g hello.cpp -o hello 如果没有-g,你将看不见程序的函数名.变量名,

gdb调试命令

本篇摘自互联网,纯属自己学习笔记,然分享给看到我的博客的人们. 用GDB调试程序 GDB是一个强大的命令行调试工具.大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本.UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能. 于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能.而Windows下的图形软件基本上是各自为营,