評價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