我在 ubuntu 上的 VSCode 中有以下代码(
Main.cpp
)并使用 gdb 进行调试:
#include <iostream>
#include <string>
std::string return_string(){//Line 4
std::string abc = "abc";
return(abc);
}
int main(){//Line 9
std::string abc = return_string();//Line 10
std::cout<<abc<<std::endl;//Line 11
return 0;
}
在第 10 行命中断点后,按 F10 希望到达第 11 行,却将我带入
basic_string.h
文件,该文件是一个 C++ 文件,不属于我的项目。有没有办法不进入此类本机 C/C++ 文件?我看过:
但这似乎是在谈论使用 gdb raw 并建议在 gdb 中指定
skip
命令(https://sourceware.org/gdb/onlinedocs/gdb/Skipping-Over-Functions-and-Files.html) 。然而,我通过 VSCode 界面运行调试器,该界面在 gdb 上提供了一个封装层,而无需用户使用原始 gdb 命令 - F10
跨过,F11
跨入等等。
有没有办法通过在编译和链接自身时单步执行代码来防止在调试时输入某些文件?目前,我的 makefile 发出以下用于编译和链接的命令:
(compiling) g++ -fno-common -fPIC -fno-strict-aliasing -fexceptions -fopenmp -c -g -std=c++14 -MMD -MP -MF "build/Debug/GNU-Linux/_ext/1/Main.o.d" -o build/Debug/GNU-Linux/_ext/1/Main.o ../src/Main.cpp
(linking) g++ -fno-common -fPIC -fno-strict-aliasing -fexceptions -fopenmp -o dist/Debug/GNU-Linux/linux build/Debug/GNU-Linux/_ext/1/Main.o -lm -lpthread -ldl
您已经有了大部分答案——gdb 的
skip
命令。缺少的部分是您希望在运行 IDE 时自动执行这些命令。为此,请在用户主目录中创建并编辑一个 ~/.gdbinit
文件。添加一行以将“可信”路径添加到另一个 .gdbinit 文件,该文件位于项目的可执行文件夹中:
add-auto-load-safe-path /home/your_username/your_project/your_bin_dir/.gdbinit
然后编辑您刚刚引用的特定于项目的 .gdbinit 文件,并添加您想要自动执行的命令,每行一个。例如,这个 .gdbinit 使用正则表达式跳过
std
命名空间内的任何内容:
skip -rfunction ^std::.*