[lldb] Print children-count warning for dwim-print and expr (#149088)
When dumping variables, LLDB will print a one-time warning about truncating children (when the children count exceeds the default `target.max-children-count`). But we only do this for `frame variable`. So if we use `dwim-print` or `expression`, the output gets truncated but we don't print a warning. But because we store the fact that we truncated some output on the `CommandInterpreter`, we fire the warning next time we use `frame variable`. E.g.,: ``` (lldb) p arr (int[1000]) { [0] = -5 [1] = 0 [2] = 0 <-- snipped --> [253] = 0 [254] = 0 [255] = 0 ... } (lldb) v someLocal (int) someLocal = 10 *** Some of the displayed variables have more members than the debugger will show by default. To show all of them, you can either use the --show-all-children option to frame variable or raise the limit by changing the target.max-children-count setting. ``` This patch prints the warning for `dwim-print` and `expression`. I only added a test for the `target.max-children-count` for now because it seems the `target.max-children-depth` warning is broken (I can't get it to fire).
This commit is contained in:
parent
6824bcfdb4
commit
8c28f4920d
@ -150,6 +150,8 @@ void CommandObjectDWIMPrint::DoExecute(StringRef command,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
m_interpreter.PrintWarningsIfNecessary(result.GetOutputStream(),
|
||||||
|
m_cmd_name);
|
||||||
result.SetStatus(eReturnStatusSuccessFinishResult);
|
result.SetStatus(eReturnStatusSuccessFinishResult);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -470,6 +470,9 @@ bool CommandObjectExpression::EvaluateExpression(llvm::StringRef expr,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_interpreter.PrintWarningsIfNecessary(result.GetOutputStream(),
|
||||||
|
m_cmd_name);
|
||||||
|
|
||||||
if (suppress_result)
|
if (suppress_result)
|
||||||
if (auto result_var_sp =
|
if (auto result_var_sp =
|
||||||
target.GetPersistentVariable(result_valobj_sp->GetName())) {
|
target.GetPersistentVariable(result_valobj_sp->GetName())) {
|
||||||
|
67
lldb/test/Shell/Settings/TestChildCountTruncation.test
Normal file
67
lldb/test/Shell/Settings/TestChildCountTruncation.test
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
# Test that we warn the user about truncated output
|
||||||
|
# when target.max-children-count wasn't explicitly set.
|
||||||
|
|
||||||
|
# RUN: split-file %s %t
|
||||||
|
# RUN: %clang_host -g -gdwarf %t/main.cpp -o %t.out
|
||||||
|
# RUN: %lldb -x -b -s %t/dwim-commands.input %t.out -o exit 2>&1 \
|
||||||
|
# RUN: | FileCheck %s --check-prefix=DWIM
|
||||||
|
#
|
||||||
|
# RUN: %lldb -x -b -s %t/expr-commands.input %t.out -o exit 2>&1 \
|
||||||
|
# RUN: | FileCheck %s --check-prefix=EXPR
|
||||||
|
#
|
||||||
|
# RUN: %lldb -x -b -s %t/frame-var-commands.input %t.out -o exit 2>&1 \
|
||||||
|
# RUN: | FileCheck %s --check-prefix=VAR
|
||||||
|
#
|
||||||
|
# RUN: %lldb -x -b -s %t/with-setting-commands.input %t.out -o exit 2>&1 \
|
||||||
|
# RUN: | FileCheck %s --check-prefix=SETTING
|
||||||
|
|
||||||
|
#--- main.cpp
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
int arr[512] = { 3 };
|
||||||
|
__builtin_debugtrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
#--- dwim-commands.input
|
||||||
|
|
||||||
|
run
|
||||||
|
dwim-print arr
|
||||||
|
frame variable arr
|
||||||
|
|
||||||
|
DWIM: (lldb) dwim-print arr
|
||||||
|
DWIM: *** Some of the displayed variables have more members
|
||||||
|
DWIM-SAME: use the --show-all-children option to dwim-print
|
||||||
|
DWIM: (lldb) frame variable arr
|
||||||
|
DWIM-NOT: *** Some of the displayed variables have more members
|
||||||
|
|
||||||
|
#--- expr-commands.input
|
||||||
|
|
||||||
|
run
|
||||||
|
expression arr
|
||||||
|
frame variable arr
|
||||||
|
|
||||||
|
EXPR: (lldb) expression arr
|
||||||
|
EXPR: *** Some of the displayed variables have more members
|
||||||
|
EXPR-SAME: use the --show-all-children option to expression
|
||||||
|
EXPR: (lldb) frame variable arr
|
||||||
|
EXPR-NOT: *** Some of the displayed variables have more members
|
||||||
|
|
||||||
|
#--- frame-var-commands.input
|
||||||
|
|
||||||
|
run
|
||||||
|
frame variable arr
|
||||||
|
|
||||||
|
VAR: (lldb) frame variable arr
|
||||||
|
VAR: *** Some of the displayed variables have more members
|
||||||
|
VAR-SAME: use the --show-all-children option to frame variable
|
||||||
|
VAR: (lldb) frame variable arr
|
||||||
|
VAR-NOT: *** Some of the displayed variables have more members
|
||||||
|
|
||||||
|
#--- with-setting-commands.input
|
||||||
|
|
||||||
|
run
|
||||||
|
settings set target.max-children-count 1
|
||||||
|
frame variable arr
|
||||||
|
|
||||||
|
SETTING: (lldb) frame variable arr
|
||||||
|
SETTING-NOT: *** Some of the displayed variables have more members
|
Loading…
x
Reference in New Issue
Block a user