aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Commands/CommandObjectDisassemble.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Commands/CommandObjectDisassemble.cpp')
-rw-r--r--lldb/source/Commands/CommandObjectDisassemble.cpp47
1 files changed, 37 insertions, 10 deletions
diff --git a/lldb/source/Commands/CommandObjectDisassemble.cpp b/lldb/source/Commands/CommandObjectDisassemble.cpp
index e3c40ed73cf6..9d081c83c0fb 100644
--- a/lldb/source/Commands/CommandObjectDisassemble.cpp
+++ b/lldb/source/Commands/CommandObjectDisassemble.cpp
@@ -278,11 +278,20 @@ CommandObjectDisassemble::GetContainingAddressRanges() {
llvm::Expected<std::vector<AddressRange>>
CommandObjectDisassemble::GetCurrentFunctionRanges() {
+ Process *process = m_exe_ctx.GetProcessPtr();
StackFrame *frame = m_exe_ctx.GetFramePtr();
if (!frame) {
- return llvm::createStringError(llvm::inconvertibleErrorCode(),
- "Cannot disassemble around the current "
- "function without a selected frame.\n");
+ if (process) {
+ return llvm::createStringError(
+ llvm::inconvertibleErrorCode(),
+ "Cannot disassemble around the current "
+ "function without the process being stopped.\n");
+ } else {
+ return llvm::createStringError(llvm::inconvertibleErrorCode(),
+ "Cannot disassemble around the current "
+ "function without a selected frame: "
+ "no currently running process.\n");
+ }
}
SymbolContext sc(
frame->GetSymbolContext(eSymbolContextFunction | eSymbolContextSymbol));
@@ -301,11 +310,20 @@ CommandObjectDisassemble::GetCurrentFunctionRanges() {
llvm::Expected<std::vector<AddressRange>>
CommandObjectDisassemble::GetCurrentLineRanges() {
+ Process *process = m_exe_ctx.GetProcessPtr();
StackFrame *frame = m_exe_ctx.GetFramePtr();
if (!frame) {
- return llvm::createStringError(llvm::inconvertibleErrorCode(),
- "Cannot disassemble around the current "
- "line without a selected frame.\n");
+ if (process) {
+ return llvm::createStringError(
+ llvm::inconvertibleErrorCode(),
+ "Cannot disassemble around the current "
+ "function without the process being stopped.\n");
+ } else {
+ return llvm::createStringError(llvm::inconvertibleErrorCode(),
+ "Cannot disassemble around the current "
+ "line without a selected frame: "
+ "no currently running process.\n");
+ }
}
LineEntry pc_line_entry(
@@ -361,11 +379,20 @@ CommandObjectDisassemble::GetNameRanges(CommandReturnObject &result) {
llvm::Expected<std::vector<AddressRange>>
CommandObjectDisassemble::GetPCRanges() {
+ Process *process = m_exe_ctx.GetProcessPtr();
StackFrame *frame = m_exe_ctx.GetFramePtr();
if (!frame) {
- return llvm::createStringError(llvm::inconvertibleErrorCode(),
- "Cannot disassemble around the current "
- "PC without a selected frame.\n");
+ if (process) {
+ return llvm::createStringError(
+ llvm::inconvertibleErrorCode(),
+ "Cannot disassemble around the current "
+ "function without the process being stopped.\n");
+ } else {
+ return llvm::createStringError(llvm::inconvertibleErrorCode(),
+ "Cannot disassemble around the current "
+ "PC without a selected frame: "
+ "no currently running process.\n");
+ }
}
if (m_options.num_instructions == 0) {
@@ -447,7 +474,7 @@ bool CommandObjectDisassemble::DoExecute(Args &command,
"\"disassemble\" arguments are specified as options.\n");
const int terminal_width =
GetCommandInterpreter().GetDebugger().GetTerminalWidth();
- GetOptions()->GenerateOptionUsage(result.GetErrorStream(), this,
+ GetOptions()->GenerateOptionUsage(result.GetErrorStream(), *this,
terminal_width);
return false;
}