2013-05-08 47 views
0

如果我想擴展一個內置別名(比如'b'),我需要默認實現。LLDB內置別名在哪裏

我在哪裏可以找到這個?我假設他們會在磁盤上的某個地方,但我無法在任何地方找到它。

回答

3

如果在LLDB鍵入help -a提示你將看到內建別名列出:

b   -- ('_regexp-break') Set a breakpoint using a regular expression to specify the location, where <linenum> is in decimal and <address> is in hex. 

這是一個別名一個正則表達式的命令,這是一種嘗試以匹配其輸入針對LLDB命令的形式一個或多個正則表達式並執行取決於該匹配的擴展。

例如_regexp_break,這是你關心什麼:

_regexp-break  -- Set a breakpoint using a regular expression to specify the location, where <linenum> is in decimal and <address> is in hex. 

我不認爲目前LLDB有辦法看到的正則表達式命令「內容」,但由於它是一個開源項目中,可以通過查看源弄明白:

const char *break_regexes[][2] = {{"^(.*[^[:space:]])[[:space:]]*:[[:space:]]*([[:digit:]]+)[[:space:]]*$", "breakpoint set --file '%1' --line %2"}, 
            {"^([[:digit:]]+)[[:space:]]*$", "breakpoint set --line %1"}, 
            {"^\\*?(0x[[:xdigit:]]+)[[:space:]]*$", "breakpoint set --address %1"}, 
            {"^[\"']?([-+]?\\[.*\\])[\"']?[[:space:]]*$", "breakpoint set --name '%1'"}, 
            {"^(-.*)$", "breakpoint set %1"}, 
            {"^(.*[^[:space:]])`(.*[^[:space:]])[[:space:]]*$", "breakpoint set --name '%2' --shlib '%1'"}, 
            {"^\\&(.*[^[:space:]])[[:space:]]*$", "breakpoint set --name '%1' --skip-prologue=0"}, 
            {"^(.*[^[:space:]])[[:space:]]*$", "breakpoint set --name '%1'"}}; 

這是字符串對的陣列,並且每對限定了正則表達式和匹配時相應的擴展。 (供您參考,這個代碼是lldb/source/Interpreter/CommandInterpreter.cpp

如果你最終確定你自己的,你喜歡它這麼多,你想它總是可用的,你可以在「滾你自己」的定義每個會話的修改命令在~/.lldbinit