2011-07-31 128 views
7

設置斷點我有一個類看起來是這樣的:類成員函數沒有成功

namespace madoka 
{ 
class polarizable_sites 
{ 
public: 
void resize(const size_t dim_); 
void clear(void); 
}; 
} 
在gdb

,我可以

b 'madoka::polarizable_sites::clear()' 

上明確設置斷點但是,成員函數調整大小, a

b 'madoka::polarizable_sites::resize(const size_t)' 

不起作用。 GDB報錯:

the class madoka::polarizable_sites does not have any method named resize(const size_t) Hint: try 'madoka::polarizable_sites::resize(const size_t)' or 'madoka::polarizable_sites::resize(const size_t)' (Note leading single quote.)

我想知道爲什麼自函數樣式自動完成的TAB。

BTW:我使用GDB

GNU gdb (Ubuntu/Linaro 7.2-1ubuntu11) 7.2 Copyright (C) 2010 Free Software Foundation, Inc.

與編譯器

g++ (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2 Copyright (C) 2010 Free Software Foundation, Inc.

+1

你總是可以使用file:linenumber。 –

+0

@yi_H好吧,使用函數名會更好,因爲如果更改源代碼,可能會更改linenumber,並且跟蹤起來會有些困難。 – xis

+0

我意識到這一點,它只是一種解決方法 –

回答

3

函數可能被內聯。如果它是GDB語法中的x86代碼,請嘗試添加__asm int 3,然後執行代碼。這個技巧爲我調試MSVC x86代碼節省了很多時間。

+0

這是gcc,不需要破解;) –

+2

這可能適用於GCC'asm(「int $ 0x3」);'請記住,這個斷點將被編譯進去,並且只能在你不能破內嵌或其他優化的代碼。它會導致代碼的變化,並可以顯示/隱藏Heisenbugs。 – Coder

0

我猜編譯器剝離限定符const,

嘗試B'馬多卡:: polarizable_sites :: resize(size_t)'

+0

不,它不起作用。 – xis