[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-FileCopyrightText: 2014 Citra Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later // 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" " Nickname, password, address and port for multiplayer\n"
"-p, --program Pass following string as arguments to executable\n" "-p, --program Pass following string as arguments to executable\n"
"-u, --user Select a specific user profile from 0 to 7\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"; "-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) { static void OnStatusMessageReceived(const Network::StatusMessageEntry& msg) {
std::string message; std::string message = [&]() {
switch (msg.type) { switch (msg.type) {
case Network::IdMemberJoin: case Network::IdMemberJoin:
message = fmt::format("{} has joined", msg.nickname); return fmt::format("{} has joined", msg.nickname);
break; case Network::IdMemberLeave:
case Network::IdMemberLeave: return fmt::format("{} has left", msg.nickname);
message = fmt::format("{} has left", msg.nickname); case Network::IdMemberKicked:
break; return fmt::format("{} has been kicked", msg.nickname);
case Network::IdMemberKicked: case Network::IdMemberBanned:
message = fmt::format("{} has been kicked", msg.nickname); return fmt::format("{} has been banned", msg.nickname);
break; case Network::IdAddressUnbanned:
case Network::IdMemberBanned: return fmt::format("{} has been unbanned", msg.nickname);
message = fmt::format("{} has been banned", msg.nickname); default:
break; return std::string{};
case Network::IdAddressUnbanned: }
message = fmt::format("{} has been unbanned", msg.nickname); }();
break;
}
if (!message.empty()) if (!message.empty())
std::cout << std::endl << "* " << message << std::endl << std::endl; std::cout << std::endl << "* " << message << std::endl << std::endl;
} }
@ -209,10 +211,10 @@ int main(int argc, char** argv) {
} }
#endif #endif
std::string filepath; std::string filepath;
std::optional<std::string> config_path; std::optional<std::string> config_path{};
std::string program_args; 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 use_multiplayer = false;
bool fullscreen = false; bool fullscreen = false;
std::string nickname{}; std::string nickname{};
@ -222,6 +224,7 @@ int main(int argc, char** argv) {
static struct option long_options[] = { static struct option long_options[] = {
// clang-format off // clang-format off
{"debug", no_argument, 0, 'd'},
{"config", required_argument, 0, 'c'}, {"config", required_argument, 0, 'c'},
{"fullscreen", no_argument, 0, 'f'}, {"fullscreen", no_argument, 0, 'f'},
{"help", no_argument, 0, 'h'}, {"help", no_argument, 0, 'h'},
@ -235,9 +238,12 @@ int main(int argc, char** argv) {
}; };
while (optind < argc) { 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) { if (arg != -1) {
switch (static_cast<char>(arg)) { switch (static_cast<char>(arg)) {
case 'd':
override_gdb_port = static_cast<uint16_t>(atoi(optarg));
break;
case 'c': case 'c':
config_path = optarg; config_path = optarg;
break; break;
@ -323,6 +329,11 @@ int main(int argc, char** argv) {
Settings::values.current_user = std::clamp(*selected_user, 0, 7); 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 #ifdef _WIN32
LocalFree(argv_w); LocalFree(argv_w);
#endif #endif