2012-08-31 56 views
1

我已經在本地構建了Chromium,我試圖用GDB進行調試。出於某種原因,某些斷點似乎沒有打中。例如,當我做設置一個斷點,但斷點沒有命中

b InjectedScriptBase::makeEvalCall 

GDB提示

Make breakpoint pending on future shared library load? (y or [n]) y 
Breakpoint 1 (InjectedScriptBase::makeEvalCall) pending. 

,但相關的代碼被觸發時,斷點未命中。

我在做什麼錯?我目前假設相關符號在運行時被加載,但我應該分別加載它們嗎?

+0

這些符號應該在加載時已經可用。您是否使用調試符號構建? –

回答

1

根據Chromium sources這個功能有相當長的簽名:

void InjectedScriptBase::makeEvalCall(ErrorString* errorString, ScriptFunctionCall& function, RefPtr<TypeBuilder::Runtime::RemoteObject>* objectResult, TypeBuilder::OptOutput<bool>* wasThrown) 

所以這是值得用Tab completition,同時設置斷點。請嘗試以下操作:

b 'InjectedScriptBase::makeEvalCall 

,推動Tab鍵自動完成功能名稱。 gdb應該爲你查找符號表和自動完成函數名稱。那麼你應該可以設置斷點。

+0

謝謝。 '''在'b''中有故意嗎? – Randomblue

+0

是的,不要忘記添加尾隨''' – ks1322

0

確保您有足夠的內存來調試Chromium。或嘗試在具有更多內存的另一臺計算機上進行調試。