评价C++表达式调试时,我最近注意到,有GDB调试程序时,以评估“复杂”表述的能力,我想知道它是如何做到这一点。例如,用下面的代码:如何GDB在运行时
int main() {
std::vector<int> v = {1, 2, 3};
int k = 0;
std::cin >> k;
v.push_back(k);
return v.at(0);
}
我能够编译程序g++ -g myprogram.cpp
和调试它GDB,让我键入像print v.at(4);
事情(后k
动态进入其打印正确的值)和print v.at(2) == 3
评估为真。
我想知道GDB是如何做到这一点的。 This SO question暗示它是“内存中编译”的东西,但没有进一步详细说明,所以我想知道它是否使用某种JIT来使这一切工作或别的东西?他们是在我编写并运行它时编译内联代码吗?他们是否有一个框架来在调试环境中实时评估C++?实质上,我想在调试器中重现这一点,我正在写这些调试器来评估断点处的表达式,这就是为什么我很好奇GDB如何执行它。
目前还不清楚你希望得到什么样的答案。 Gdb能够在被调试程序的上下文中分析C和C++表达式,并且可以在二进制文件中包含调试信息的帮助下,也可以在可用时使用源代码。但是你已经知道了,而且这个场地的细节会很长。 –
@JohnBollinger我想我将不得不“使用源”,但我想知道的是他们如何评估表达式。他们是在我编写并运行它时编译内联代码吗?他们是否有一个框架来在调试环境中实时评估C++?实质上,我想在调试器中重现这一点,我正在写这些调试器来评估断点处的表达式,这就是为什么我很好奇GDB如何执行它。谢谢! – llk
你的问题似乎更关注于C++。我建议你删除C标签。 – tambre