From 67cbdb5acd2930880b38b6ab86453886725eaf88 Mon Sep 17 00:00:00 2001 From: Howard Hellyer Date: Mon, 21 Aug 2017 10:37:12 +0100 Subject: [PATCH] llnode.cc: Combine array-length and string-length arguments Merge the string and array length arguments into one option as they can never both apply at the same time. Support a short option (-l) to the the user quickly specify how many elements of either strings or arrays to display. --- README.md | 7 +++---- src/llnode.cc | 27 +++++++++++++-------------- src/llv8.cc | 8 ++++---- src/llv8.h | 9 +++------ 4 files changed, 23 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 2cc4374d..a23bcd93 100644 --- a/README.md +++ b/README.md @@ -212,7 +212,7 @@ v8 bt command. See the [Commands](#commands) section below for more commands. ### Commands ``` -(lldb) v8 help +(llnode) v8 help Node.js helpers Syntax: v8 @@ -226,7 +226,7 @@ The following subcommands are supported: Syntax: v8 bt [number] findjsinstances -- List all objects which share the specified map. Accepts the same options as `v8 inspect` - findjsobjects -- List all object types and instance counts grouped by map and sorted by instance count. + findjsobjects -- List all object types and instance counts grouped by typename and sorted by instance count. Requires `LLNODE_RANGESFILE` environment variable to be set to a file containing memory ranges for the core file being debugged. There are scripts for generating this file on Linux and Mac in the scripts directory of the llnode @@ -238,7 +238,6 @@ The following subcommands are supported: * -v, --value expr - all properties that refer to the specified JavaScript object (default) * -n, --name name - all properties with the specified name * -s, --string string - all properties that refer to the specified JavaScript string value - * --array-length num - print maximum of `num` elements in array inspect -- Print detailed description and contents of the JavaScript value. @@ -247,7 +246,7 @@ The following subcommands are supported: * -F, --full-string - print whole string without adding ellipsis * -m, --print-map - print object's map address * -s, --print-source - print source code for function objects - * --string-length num - print maximum of `num` characters in string + * -l num, --length num - print maximum of `num` elements from string/array Syntax: v8 inspect [flags] expr nodeinfo -- Print information about Node.js diff --git a/src/llnode.cc b/src/llnode.cc index d24fdc4c..6e674fe3 100644 --- a/src/llnode.cc +++ b/src/llnode.cc @@ -33,8 +33,9 @@ char** CommandBase::ParseInspectOptions(char** cmd, v8::Value::InspectOptions* options) { static struct option opts[] = { {"full-string", no_argument, nullptr, 'F'}, - {"string-length", required_argument, nullptr, 0x1001}, - {"array-length", required_argument, nullptr, 0x1002}, + {"string-length", required_argument, nullptr, 'l'}, + {"array-length", required_argument, nullptr, 'l'}, + {"length", required_argument, nullptr, 'l'}, {"print-map", no_argument, nullptr, 'm'}, {"print-source", no_argument, nullptr, 's'}, {nullptr, 0, nullptr, 0}}; @@ -54,21 +55,18 @@ char** CommandBase::ParseInspectOptions(char** cmd, optind = 0; opterr = 1; do { - int arg = getopt_long(argc, args, "Fms", opts, nullptr); + int arg = getopt_long(argc, args, "Fmsl:", opts, nullptr); if (arg == -1) break; switch (arg) { case 'F': - options->string_length = 0; + options->length = 0; break; case 'm': options->print_map = true; break; - case 0x1001: - options->string_length = strtol(optarg, nullptr, 10); - break; - case 0x1002: - options->array_length = strtol(optarg, nullptr, 10); + case 'l': + options->length = strtol(optarg, nullptr, 10); break; case 's': options->print_source = true; @@ -136,7 +134,8 @@ bool BacktraceCmd::DoExecute(SBDebugger d, char** cmd, lldb::SBMemoryRegionInfo info; if (target.GetProcess().GetMemoryRegionInfo(pc, info).Success() && info.IsExecutable() && info.IsWritable()) { - result.Printf(" %c frame #%u: 0x%016" PRIx64 " \n", star, i, pc); + result.Printf(" %c frame #%u: 0x%016" PRIx64 " \n", star, i, + pc); continue; } } @@ -326,8 +325,8 @@ bool PluginInitialize(SBDebugger d) { " * -F, --full-string - print whole string without adding ellipsis\n" " * -m, --print-map - print object's map address\n" " * -s, --print-source - print source code for function objects\n" - " * --string-length num - print maximum of `num` characters in string\n" - " * --array-length num - print maximum of `num` elements in array\n" + " * -l num, --length num - print maximum of `num` elements from " + "string/array\n" "\n" "Syntax: v8 inspect [flags] expr\n"); interpreter.AddCommand("jsprint", new llnode::PrintCmd(true), @@ -342,8 +341,8 @@ bool PluginInitialize(SBDebugger d) { "Alias for `v8 source list`"); v8.AddCommand("findjsobjects", new llnode::FindObjectsCmd(), - "List all object types and instance counts grouped by map and " - "sorted by instance count.\n" + "List all object types and instance counts grouped by type" + "name and sorted by instance count.\n" #ifndef LLDB_SBMemoryRegionInfoList_h_ "Requires `LLNODE_RANGESFILE` environment variable to be set " "to a file containing memory ranges for the core file being " diff --git a/src/llv8.cc b/src/llv8.cc index 20ecb06d..077b48ea 100644 --- a/src/llv8.cc +++ b/src/llv8.cc @@ -966,7 +966,7 @@ std::string String::Inspect(InspectOptions* options, Error& err) { std::string val = ToString(err); if (err.Fail()) return std::string(); - unsigned int len = options->string_length; + unsigned int len = options->length; if (len != 0 && val.length() > len) val = val.substr(0, len) + "..."; @@ -1119,7 +1119,7 @@ std::string JSArrayBuffer::Inspect(InspectOptions* options, Error& err) { if (options->detailed) { res += ": [\n "; - int display_length = std::min(byte_length, options->array_length); + int display_length = std::min(byte_length, options->length); res += v8()->LoadBytes(display_length, data, err); if (display_length < byte_length) { @@ -1164,7 +1164,7 @@ std::string JSArrayBufferView::Inspect(InspectOptions* options, Error& err) { if (options->detailed) { res += ": [\n "; - int display_length = std::min(byte_length, options->array_length); + int display_length = std::min(byte_length, options->length); res += v8()->LoadBytes(display_length, data + byte_offset, err); if (display_length < byte_length) { @@ -1914,7 +1914,7 @@ std::string JSArray::Inspect(InspectOptions* options, Error& err) { std::string res = "