[yuzu_cmd] gdbstub option (#43)

Co-authored-by: crueter <crueter@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/43
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
This commit is contained in:
lizzie 2025-07-13 03:25:43 +02:00 committed by crueter
parent ae02310bdf
commit d5c58342e0
No known key found for this signature in database
GPG key ID: 425ACD2D4830EBC6

View file

@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: 2014 Citra Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@ -80,6 +83,7 @@ static void PrintHelp(const char* argv0) {
" Nickname, password, address and port for multiplayer\n"
"-p, --program Pass following string as arguments to executable\n"
"-u, --user Select a specific user profile from 0 to 7\n"
"-d, --debug Run the GDB stub on a port from 1 to 65535\n"
"-v, --version Output version information and exit\n";
}
@ -162,24 +166,22 @@ static void OnMessageReceived(const Network::ChatEntry& msg) {
}
static void OnStatusMessageReceived(const Network::StatusMessageEntry& msg) {
std::string message;
std::string message = [&]() {
switch (msg.type) {
case Network::IdMemberJoin:
message = fmt::format("{} has joined", msg.nickname);
break;
return fmt::format("{} has joined", msg.nickname);
case Network::IdMemberLeave:
message = fmt::format("{} has left", msg.nickname);
break;
return fmt::format("{} has left", msg.nickname);
case Network::IdMemberKicked:
message = fmt::format("{} has been kicked", msg.nickname);
break;
return fmt::format("{} has been kicked", msg.nickname);
case Network::IdMemberBanned:
message = fmt::format("{} has been banned", msg.nickname);
break;
return fmt::format("{} has been banned", msg.nickname);
case Network::IdAddressUnbanned:
message = fmt::format("{} has been unbanned", msg.nickname);
break;
return fmt::format("{} has been unbanned", msg.nickname);
default:
return std::string{};
}
}();
if (!message.empty())
std::cout << std::endl << "* " << message << std::endl << std::endl;
}
@ -209,10 +211,10 @@ int main(int argc, char** argv) {
}
#endif
std::string filepath;
std::optional<std::string> config_path;
std::optional<std::string> config_path{};
std::string program_args;
std::optional<int> selected_user;
std::optional<int> selected_user{};
std::optional<u16> override_gdb_port{};
bool use_multiplayer = false;
bool fullscreen = false;
std::string nickname{};
@ -222,6 +224,7 @@ int main(int argc, char** argv) {
static struct option long_options[] = {
// clang-format off
{"debug", no_argument, 0, 'd'},
{"config", required_argument, 0, 'c'},
{"fullscreen", no_argument, 0, 'f'},
{"help", no_argument, 0, 'h'},
@ -235,9 +238,12 @@ int main(int argc, char** argv) {
};
while (optind < argc) {
int arg = getopt_long(argc, argv, "g:fhvp::c:u:", long_options, &option_index);
int arg = getopt_long(argc, argv, "g:fhvp::c:u:d:", long_options, &option_index);
if (arg != -1) {
switch (static_cast<char>(arg)) {
case 'd':
override_gdb_port = static_cast<uint16_t>(atoi(optarg));
break;
case 'c':
config_path = optarg;
break;
@ -323,6 +329,11 @@ int main(int argc, char** argv) {
Settings::values.current_user = std::clamp(*selected_user, 0, 7);
}
if (override_gdb_port.has_value()) {
Settings::values.use_gdbstub = true;
Settings::values.gdbstub_port = *override_gdb_port;
}
#ifdef _WIN32
LocalFree(argv_w);
#endif