Arch-Linux

GDB 在 Arch Linux 上拋出錯誤

  • August 5, 2019

當我嘗試單步執行程序時,gdb 拋出此錯誤

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.

這是我要調試的程序。

#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);
}

程式碼沒有問題,因為它執行正常。我想這是我在 Arch 上安裝 GDB 的問題。遇到cin或時會顯示錯誤cout

當我嘗試在我的 Ubuntu VM 中執行它時,這個錯誤沒有顯示

我已經針對這個問題填寫了一份錯誤報告:https ://bugs.archlinux.org/task/47220

發生這種情況是因為找不到 ostream 源文件。

解決方法 1

您可以剝離libstdc++ 庫:

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

然後 gdb 將不會嘗試打開源文件,錯誤將不再出現。

您可以通過重新安裝它來切換回未剝離的版本:

sudo pacman -S gcc-libs

解決方法 2

您可以在 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

引用自:https://unix.stackexchange.com/questions/246143