先把namgle後的名稱找出來,使用之前nm可以列出,如果還不確定,可以使用c++filt轉出prototype,c++filt之所以可以反轉,乃是因為namgle是有規則的(好像有點廢話)
比方說code如下
class foo{
int a,b;
public:
void func(int x,int y);
};
void foo::func(int x,int y){
a=x;
b=y+2;
}
int main(void){
foo f1, f2;
printf("f1:%p, f2: %p\n",&f1,&f2);
f1.func(5,1);
f2.func(-4,2);
return 0;
}
找出foo這個function在被namgle之後的名稱可以用
nm name | grep foo | c++filt
或者
nm -C name | grep foo
可以看到名稱為_ZN3foo4funcEii
進入gdb,這下子就可以用b *_ZN3foo4funcEii來設定break point了,跟之執行run
停止後gdb很好心的印出了function call的prototype,會發現多了一個this,這也是C++的object pointer來源
沒有留言:
張貼留言