Index: lldb/source/Core/Disassembler.cpp =================================================================== --- lldb/source/Core/Disassembler.cpp +++ lldb/source/Core/Disassembler.cpp @@ -564,10 +564,16 @@ range.SetByteSize(DEFAULT_DISASM_BYTE_SIZE); } - return Disassemble( - debugger, arch, plugin_name, flavor, exe_ctx, range.GetBaseAddress(), - {Limit::Instructions, num_instructions}, mixed_source_and_assembly, - num_mixed_context_lines, options, strm); + Disassembler::Limit limit = {Limit::Instructions, num_instructions}; + if (num_instructions == 0) { + limit = {Disassembler::Limit::Bytes, range.GetByteSize()}; + if (limit.value == 0) + limit.value = DEFAULT_DISASM_BYTE_SIZE; + } + + return Disassemble(debugger, arch, plugin_name, flavor, exe_ctx, + range.GetBaseAddress(), limit, mixed_source_and_assembly, + num_mixed_context_lines, options, strm); } Instruction::Instruction(const Address &address, AddressClass addr_class) Index: lldb/test/API/commands/disassemble/basic/TestFrameDisassemble.py =================================================================== --- lldb/test/API/commands/disassemble/basic/TestFrameDisassemble.py +++ lldb/test/API/commands/disassemble/basic/TestFrameDisassemble.py @@ -57,4 +57,6 @@ frame = threads[0].GetFrameAtIndex(0) disassembly = frame.Disassemble() - self.assertNotEqual(len(disassembly), 0, "Disassembly was empty.") + self.assertNotEqual(disassembly, "") + self.assertNotIn("error", disassembly) + self.assertIn(": nop", disassembly) Index: lldb/test/API/commands/disassemble/basic/main.cpp =================================================================== --- lldb/test/API/commands/disassemble/basic/main.cpp +++ lldb/test/API/commands/disassemble/basic/main.cpp @@ -2,6 +2,7 @@ sum (int a, int b) { int result = a + b; // Set a breakpoint here + asm("nop"); return result; }