Arch-Linux
GDB 在 Arch Linux 上拋出錯誤
當我嘗試單步執行程序時,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