diff --git a/lldb/docs/man/lldb-server.rst b/lldb/docs/man/lldb-server.rst index a67c00b305f6d29b73aec2e6274c4396c50b47b4..bb37dec78febf7e6234fafc9b61dec1bd1ceeb89 100644 --- a/lldb/docs/man/lldb-server.rst +++ b/lldb/docs/man/lldb-server.rst @@ -142,6 +142,13 @@ GENERAL OPTIONS Destination file to log to. If empty, log to stderr. +.. OHOS_LOCAL begin +.. option:: --gdbserver-log-file + + Destination file to gdbserver log to. If it is empty and the environment + variable LLDB_DEBUGSERVER_LOG_FILE is also empty, log to stderr. +.. OHOS_LOCAL end + GDB-SERVER CONNECTIONS ~~~~~~~~~~~~~~~~~~~~~~ diff --git a/lldb/tools/lldb-server/lldb-platform.cpp b/lldb/tools/lldb-server/lldb-platform.cpp index 8603fed4e4e315ea4033055b4ea633667fe11721..ae233f4dba0186145e381cfe71bf8769cf9e1f08 100644 --- a/lldb/tools/lldb-server/lldb-platform.cpp +++ b/lldb/tools/lldb-server/lldb-platform.cpp @@ -54,6 +54,7 @@ static struct option g_long_options[] = { {"debug", no_argument, &g_debug, 1}, {"verbose", no_argument, &g_verbose, 1}, {"log-file", required_argument, nullptr, 'l'}, + {"gdbserver-log-file", required_argument, nullptr, 'g'}, // OHOS_LOCAL {"log-channels", required_argument, nullptr, 'c'}, {"listen", required_argument, nullptr, 'L'}, {"port-offset", required_argument, nullptr, 'p'}, @@ -100,7 +101,8 @@ static void signal_handler(int signo) { #endif static void display_usage(const char *progname, const char *subcommand) { - fprintf(stderr, "Usage:\n %s %s [--log-file log-file-name] [--log-channels " + fprintf(stderr, "Usage:\n %s %s [--log-file log-file-name] " + "[--gdbserver-log-file log-file-name] [--log-channels " // OHOS_LOCAL "log-channel-list] [--port-file port-file-path] --server " "--listen port\n", progname, subcommand); @@ -169,7 +171,7 @@ int main_platform(int argc, char *argv[]) { std::string listen_host_port; int ch; - std::string log_file; + std::string log_file, gdbserver_log_file; // OHOS_LOCAL StringRef log_channels; // e.g. "lldb process threads:gdb-remote default:linux all" @@ -207,6 +209,13 @@ int main_platform(int argc, char *argv[]) { log_file.assign(optarg); break; + // OHOS_LOCAL begin + case 'g': // Set gdbserver Log File + if (optarg && optarg[0]) + gdbserver_log_file.assign(optarg); + break; + // OHOS_LOCAL end + case 'c': // Log Channels if (optarg && optarg[0]) log_channels = StringRef(optarg); @@ -267,6 +276,20 @@ int main_platform(int argc, char *argv[]) { if (!LLDBServerUtilities::SetupLogging(log_file, log_channels, 0)) return -1; + // OHOS_LOCAL begin + // The environment variable LLDB_DEBUGSERVER_LOG_FILE is not set + // but --gdbserver-log-file is option when starting the lldb-server platform + if (!getenv("LLDB_DEBUGSERVER_LOG_FILE") && !gdbserver_log_file.empty()) { + setenv("LLDB_DEBUGSERVER_LOG_FILE", gdbserver_log_file.c_str(), true); + } + + // The environment variable LLDB_SERVER_LOG_CHANNELS is not set + // but --log-channels is option when starting the lldb-server platform + if (!getenv("LLDB_SERVER_LOG_CHANNELS") && !log_channels.empty()) { + setenv("LLDB_SERVER_LOG_CHANNELS", log_channels.str().c_str(), true); + } + // OHOS_LOCAL end + // Make a port map for a port range that was specified. if (min_gdbserver_port && min_gdbserver_port < max_gdbserver_port) { gdbserver_portmap = GDBRemoteCommunicationServerPlatform::PortMap(