diff options
author | Raphael Isemann <teemperor@gmail.com> | 2020-05-06 12:21:53 +0200 |
---|---|---|
committer | Raphael Isemann <teemperor@gmail.com> | 2020-05-06 12:37:52 +0200 |
commit | aaf68cd9ce2fda224e02fd0f860e6372b4b00e47 (patch) | |
tree | c5ace5e62730afc1cad2fa24bf2929fbcb474fb8 /lldb/source/Commands/CommandObjectBreakpoint.cpp | |
parent | fedd52682ec70fd13b08eeac99ee0954292af9da (diff) | |
download | llvm-aaf68cd9ce2fda224e02fd0f860e6372b4b00e47.zip llvm-aaf68cd9ce2fda224e02fd0f860e6372b4b00e47.tar.gz llvm-aaf68cd9ce2fda224e02fd0f860e6372b4b00e47.tar.bz2 |
[lldb] Warn the user about starting the --func-regex parameter with an asterisk
Summary:
Sometimes users think that setting a function regex for all function that contain the word 'needle' in their
name looks like this: `*needle*`. However, LLDB only searches the function name and doesn't fully match
it against the regex, so the leading and trailing '*' operators don't do anything and actually just cause the
regex engine to reject the regular expression with "repetition-operator operand invalid".
This patch makes this a bit more obvious to the user by printing a warning that a leading '*' before this
regular expression here doesn't have any purpose (and will cause an error). This doesn't attempt to detect
a case where there is only a trailing '*' as that would involve parsing the regex and it seems the most
common way to end up in this situation is by doing `rbreak *needle*`.
Reviewers: JDevlieghere
Reviewed By: JDevlieghere
Differential Revision: https://reviews.llvm.org/D78809
Diffstat (limited to 'lldb/source/Commands/CommandObjectBreakpoint.cpp')
-rw-r--r-- | lldb/source/Commands/CommandObjectBreakpoint.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/lldb/source/Commands/CommandObjectBreakpoint.cpp b/lldb/source/Commands/CommandObjectBreakpoint.cpp index 661ebc7..e62a115 100644 --- a/lldb/source/Commands/CommandObjectBreakpoint.cpp +++ b/lldb/source/Commands/CommandObjectBreakpoint.cpp @@ -622,6 +622,14 @@ protected: result.AppendErrorWithFormat( "Function name regular expression could not be compiled: %s", llvm::toString(std::move(err)).c_str()); + // Check if the incorrect regex looks like a globbing expression and + // warn the user about it. + if (!m_options.m_func_regexp.empty()) { + if (m_options.m_func_regexp[0] == '*' || + m_options.m_func_regexp[0] == '?') + result.AppendWarning( + "Function name regex does not accept glob patterns."); + } result.SetStatus(eReturnStatusFailed); return false; } |