GDB指向源代码中错误的当前行,编译时未进行优化

GDB指向源代码中错误的当前行,编译时未进行优化,gdb,g++,Gdb,G++,我有一个问题,GDB标记指向源中的错误行。 到目前为止,我可以说它实际上应该指向的标记前进了大约3行。 我查看了一些类似的案例,注意到优化级别可能会引入此错误,但我根本没有使用优化(甚至没有指定-O) 我的环境是: Ubuntu 14.04, Emacs 24.3.1, 通用条款4.8.2, GDB 7.7.1 我尝试调试的源代码是: #line 5 "DifferentStrings.cpp" #include <string> #include <vector> #i

我有一个问题,GDB标记指向源中的错误行。 到目前为止,我可以说它实际上应该指向的标记前进了大约3行。 我查看了一些类似的案例,注意到优化级别可能会引入此错误,但我根本没有使用优化(甚至没有指定-O)

我的环境是: Ubuntu 14.04, Emacs 24.3.1, 通用条款4.8.2, GDB 7.7.1

我尝试调试的源代码是:

#line 5 "DifferentStrings.cpp"
#include <string>
#include <vector>
#include <cassert>
#include <iostream>

#define MAX 50

using namespace std;

class DifferentStrings {
  public:

    int getDist(string A, string B) {
        assert(A.length()==B.length());
        int dist=0;
        for(unsigned int i=0; i<A.length(); i++)
            if (A[i]!=B[i])
                dist++;
        return dist;
    }

    int minimize(string A, string B) {
        int minDist=MAX;
        for(unsigned int i=0; i<B.length()-A.length(); i++) {
            string subB = B.string::substr(i,A.length());
            int thisDist = getDist(A,subB);
            if (minDist > thisDist)
                minDist = thisDist;
        }
        return A.length()-minDist;
    }
};

int main() {
    string s1("koder");
    string s2("topcoder");
    DifferentStrings ds;
    int i = ds.minimize(s1, s2);
    cout << i << endl;
    return 1;
}
// Powered by FileEdit
#第5行“differentitstrings.cpp”
#包括
#包括
#包括
#包括
#定义最大值50
使用名称空间std;
类差异字符串{
公众:
int getDist(字符串A、字符串B){
断言(A.length()==B.length());
int-dist=0;

对于(无符号整数i=0;i,如n.m和Karoly所述

#line 5 "DifferentStrings.cpp"

此行导致GDB指向错误的位置

#第5行“differentitstrings.cpp”
--你认为这是在做什么?最小示例发生了什么?n.m:该代码来自topcoder的默认设置。我尝试注释掉该行,但仍然不起作用。Karoly Horvath:你的意思是我应该给出较小的示例代码?因为它是由
\line
指令3行引起的(
main
)足以完全重现这个问题。哇,我不知道。当我注释出来时,它在返回1后仍然跳到wierd位置,所以我认为这没有效果。