![](/img/trans.png)
[英]setting GDB breakpoint for C++ class member function written using template
[英]gdb: make a breakpoint on a class function in c++
假設以下課程:
class a {
public:
int getA(int a){
return 5;
}
int getA(int a, int b){
return 6;
}
};
int main(){
a cA;
std::cout << cA.getA(5) << std::endl;
return 0;
}
在gdb中,我可以使用以下命令在getA
函數上設置breakpoint
:
b a::getA
但這只在第一個函數上設置了一個b
,如何在第二個函數上設置b
(當然不使用行號)
在main()
添加一行:
std::cout << cA.getA(2,3) << std::endl;
現在,重復原始實驗。 您的結果會有所不同,現在:
(gdb) b a::getA
Breakpoint 1 at 0x40089d: a::getA. (2 locations)
“2個位置”是gdb告訴你它現在為兩個重載函數注入了斷點。 單步執行代碼將驗證這一點。
如果符號解析為乘法重載函數,則b
命令會在每個函數中設置斷點。
但是因為第二個重載函數是一個內聯函數,並且它從未在原始代碼中調用過,所以gcc甚至沒有編譯它,並且gdb
沒有設置斷點。
ba::getA(int,int)
應該可以解決問題。 即使是已經工作的那個也應該可以用ba::getA(int)
替換。
自己嘗試一下這里 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.