Support silencing logging in analyzer

This commit is contained in:
momo5502
2025-02-08 18:05:47 +01:00
parent 9f4a80b42e
commit edcc090181
2 changed files with 21 additions and 0 deletions

View File

@@ -12,6 +12,7 @@ namespace
bool use_gdb{false}; bool use_gdb{false};
bool concise_logging{false}; bool concise_logging{false};
bool verbose_logging{false}; bool verbose_logging{false};
bool silent{false};
std::string registry_path{"./registry"}; std::string registry_path{"./registry"};
std::string emulation_root{}; std::string emulation_root{};
}; };
@@ -113,6 +114,7 @@ namespace
.emulation_root = options.emulation_root, .emulation_root = options.emulation_root,
.arguments = parse_arguments(args), .arguments = parse_arguments(args),
.verbose_calls = options.verbose_logging, .verbose_calls = options.verbose_logging,
.disable_logging = options.silent,
.silent_until_main = options.concise_logging, .silent_until_main = options.concise_logging,
}; };
@@ -122,6 +124,14 @@ namespace
watch_system_objects(win_emu, options.concise_logging); watch_system_objects(win_emu, options.concise_logging);
win_emu.buffer_stdout = true; win_emu.buffer_stdout = true;
if (options.silent)
{
win_emu.buffer_stdout = false;
win_emu.callbacks().stdout_callback = [](const std::string_view data) {
(void)fwrite(data.data(), 1, data.size(), stdout);
};
}
const auto& exe = *win_emu.process().executable; const auto& exe = *win_emu.process().executable;
const auto concise_logging = options.concise_logging; const auto concise_logging = options.concise_logging;
@@ -204,6 +214,10 @@ namespace
{ {
options.use_gdb = true; options.use_gdb = true;
} }
else if (arg == "-s")
{
options.silent = true;
}
else if (arg == "-v") else if (arg == "-v")
{ {
options.verbose_logging = true; options.verbose_logging = true;

View File

@@ -33,6 +33,13 @@ namespace utils
return *this; return *this;
} }
template <typename T>
requires(!std::is_same_v<std::remove_cvref_t<T>, std::function<Ret(Args...)>>)
optional_function& operator=(T&& t)
{
return this->operator=(std::function<Ret(Args...)>(std::forward<T>(t)));
}
Ret operator()(Args... args) const Ret operator()(Args... args) const
{ {
if (func) if (func)