2012-08-31 55 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。或尝试在具有更多内存的另一台计算机上进行调试。