GDB lança erro no Arch Linux

3

Quando tento percorrer um programa, o gdb gera esse erro

std::ostream::operator<< (this=0x6013c0 <std::cout@@GLIBCXX_3.4>, __n=2)
at /build/gcc/src/gcc-build/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/ostream.tcc:110
110     /build/gcc/src/gcc-build/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/ostream.tcc: No such file or directory.

Este é o programa que estou tentando depurar.

#include <iostream>

int printPrime(int, int);

int main()
{
    int t, c;
    std::cin >> t;
    c = t;
    int m[t], n[t];
    while (t--) {
        std::cin >> m[t] >> n[t];
    }
    while (c--) {
        printPrime(m[c], n[c]);
        std::cout << std::endl;
    }
    return 0;
}

int printPrime(int m, int n)
{
    do {
        int c = m;
        int lim = c>>2;
        if (c <= 1)  continue;
        while (c-- && c>lim) {
            if (m%c == 0) {
                if (c == 1) {
                    std::cout << m << std::endl;
                    break;
                }
                break;
            }
        }
    } while(m++ && m<=n);
}

Não há problema com o código do programa, uma vez que ele é executado corretamente. Eu acho que é um problema com a minha instalação do GDB no Arch. O erro é exibido quando encontra cin ou cout .

Este erro não aparece quando tentei executá-lo na minha VM Ubuntu

    
por mbtamuli 29.11.2015 / 01:30

2 respostas

1

Eu preenchai um relatório de bug contra esse problema: link

Isso acontece porque o arquivo de origem do ostream não pode ser encontrado.

Solução 1

Você pode remover a biblioteca libstdc ++:

sudo strip /usr/lib/libstdc++.so.6

E então o gdb não tentará abrir o arquivo de origem e o erro não aparecerá mais.

Você pode voltar para a versão sem restrições, reinstalando-a com:

sudo pacman -S gcc-libs

Solução 2

Você pode adicionar uma regra de substituição no gdb:

gdb tst
(gdb) set substitute-path /build/gcc/src/gcc-build/x86_64-unknown-linux-gnu/libstdc++-v3/include /usr/include/c++/5.2.0
    
por 01.12.2015 / 11:36
0
Atualização de

2017 - Note que você pode agora em launch.json

"setupCommands": [
  {
    "description": "Enable pretty-printing for gdb",
    "text": "-enable-pretty-printing",
    "ignoreFailures": true
  },
  {
    "text": "set substitute-path /build/gcc/src/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include /usr/include/c++/7.2.0"
  }
 ],
    
por 18.11.2017 / 17:06