From 793adb77271c1f4058e6d5b7fca6eb4e20db7b55 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Sat, 26 Jul 2025 21:44:13 +0200 Subject: [PATCH 01/43] added .gitattributes with * text=auto eol=lf and ran --renormalize to fix existing files --- .gitattributes | 1 + CMakeLists.txt | 20 +- application/DbgMsgSrc/DbgMsgSrc.cpp | 1106 ++++++------ application/DebugViewpp/CMakeLists.txt | 2 +- application/DebugViewpp/version.h | 4 +- application/DebugViewpp/version.wxi | 16 +- application/DebugViewppLib/CTimelineView.cpp | 472 ++--- application/DebugViewppLib/Conversions.cpp | 340 ++-- application/DebugViewppLib/DbgviewReader.cpp | 444 ++--- application/DebugViewppLib/NewlineFilter.cpp | 136 +- application/DebugViewppLib/SocketReader.cpp | 188 +- .../DebugViewppTest/DebugView++Test.cpp | 1524 ++++++++--------- 12 files changed, 2127 insertions(+), 2126 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..e2d65ed4 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto eol=lf diff --git a/CMakeLists.txt b/CMakeLists.txt index f6c51e04..2b9cd72d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,16 +39,16 @@ add_library(msvc_console_link_options INTERFACE) target_compile_features(project_compile_features INTERFACE cxx_constexpr cxx_auto_type cxx_final cxx_std_20) target_compile_definitions(project_definitions INTERFACE - UNICODE - NOMINMAX - WIN32_LEAN_AND_MEAN - _CRT_SECURE_NO_WARNINGS + UNICODE + NOMINMAX + WIN32_LEAN_AND_MEAN + _CRT_SECURE_NO_WARNINGS _WINSOCK_DEPRECATED_NO_WARNINGS - WIN32 - WIN64 - _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING + WIN32 + WIN64 + _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING "_WIN32_WINNT=0x0601" -) +) # "_ITERATOR_DEBUG_LEVEL=0" # trips over debug/release mismatches # /Oy and /RELEASE are added to avoid tripping malware detection @@ -56,8 +56,8 @@ target_compile_definitions(project_definitions target_compile_options(project_compile_options INTERFACE /utf-8 /Oy) target_link_options(msvc_gui_link_options INTERFACE /SUBSYSTEM:WINDOWS /NOLOGO /RELEASE) target_link_options(msvc_console_link_options INTERFACE /SUBSYSTEM:CONSOLE /NOLOGO /RELEASE) - -# warnings (the project picked up a bunch of unresolved warnings with migrating to new VS versions and when {fmt} was added, work in progress...) + +# warnings (the project picked up a bunch of unresolved warnings with migrating to new VS versions and when {fmt} was added, work in progress...) target_compile_options(project_compile_options INTERFACE /W4 /w14242 /w14254 /w14263 /w14265 /w14287 /w14289 /w14296 /w14311 /w14545 /w14546 /w14547 /w14549 /w14555 /w14640 /w14826 /w14905 /w14906 /w14928) add_library(project::definitions ALIAS project_definitions) diff --git a/application/DbgMsgSrc/DbgMsgSrc.cpp b/application/DbgMsgSrc/DbgMsgSrc.cpp index 0c7b9a5a..1fc60c12 100644 --- a/application/DbgMsgSrc/DbgMsgSrc.cpp +++ b/application/DbgMsgSrc/DbgMsgSrc.cpp @@ -1,553 +1,553 @@ -// (C) Copyright Gert-Jan de Vos and Jan Wilmans 2013. -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include "dbgstream.h" -#include "Win32/Win32Lib.h" -#include "Timer.h" - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "shellapi.h" - -#pragma comment(lib, "Ws2_32.lib") -#pragma comment(lib, "psapi.lib") - -namespace fusion { - -namespace Win32 { - -class WinsockInitialization : noncopyable -{ -public: - explicit WinsockInitialization(int major = 2, int minor = 2) - { - WSADATA wsaData = {0}; - int rc = WSAStartup(MAKEWORD(major, minor), &wsaData); - if (rc != 0) - ThrowWin32Error(rc, "WSAStartup"); - } - - ~WinsockInitialization() - { - WSACleanup(); - } -}; - -void WSAThrowLastError(const std::string& what) -{ - Win32::ThrowWin32Error(WSAGetLastError(), what); -} - -} // namespace Win32 - -namespace DbgMsgSrc { - -void DbgMsgSrc(double freq) -{ - unsigned t0 = GetTickCount(); - unsigned count = 0; - double msgPerTick = freq * 1e-3; - for (;;) - { - Sleep(10); - while (count < (GetTickCount() - t0) * msgPerTick) - { - if (count % 10 == 0) - cdbg << "Een, twee, drie, vier, vijf, zes, zeven, acht, negen, tien, elf, twaalf, dertien, veertien, vijftien, zestien, zeventien, achttien, negentien, twintig, eenentwintig, tweeentwintig, drieentwintig, vierentwintig, vijfentwintig, zesentwintig, zevenentwintig, achtentwintig, negenentwintig, dertig.\n"; - else - cdbg << "Message #" << count << "\n"; - ++count; - } - } -} - -void DbgMsgTest() -{ - OutputDebugStringA("Message 1 without newline"); - OutputDebugStringA("Message 2 without newline"); - OutputDebugStringA("Message 3 with newline\n"); - OutputDebugStringA("Message with\nembedded newline\n"); - OutputDebugStringA("This should look like a table in a non-proportionally spaced font like 'Courier'"); - OutputDebugStringA("Columnn1\tColumnn2\tColumnn3\tColumnn4\tColumnn5"); - OutputDebugStringA("1\t\t2\t\t3\t\t4\t\t5"); - OutputDebugStringA("A\t\tB\t\tC\t\tD\t\tE"); - OutputDebugStringA("11\t\t12\t\t13\t\t14\t\t15"); - OutputDebugStringA("21\t\t22\t\t23A\t\t24\t\t25"); - - OutputDebugStringA(" This line has 1 space prefixed"); - OutputDebugStringA(" This line has 2 space prefixed"); - OutputDebugStringA(" This line has 3 space prefixed"); - OutputDebugStringA(" This line has 4 space prefixed"); - - OutputDebugStringA("HighLighting test: Double-click the word 'lines' in each of the following lines and make sure that word is highlighted."); - - OutputDebugStringA("\t123\t \t123\t \t123\t \t123\t This lines starts with tab"); - OutputDebugStringA(" \t123\t \t123\t \t123\t \t123\t This lines starts with 1 space + tab"); - OutputDebugStringA(" \t123\t \t123\t \t123\t \t123\t This lines starts with 2 spaces + tab"); - OutputDebugStringA(" \t123\t \t123\t \t123\t \t123\t This lines starts with 3 spaces + tab"); - OutputDebugStringA(" \t123\t \t123\t \t123\t \t123\t This lines starts with 4 spaces + tab"); - OutputDebugStringA("2LongLine: Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Message ends HERE.\n"); - - OutputDebugStringA("Message without newline (tid: 9000)"); - OutputDebugStringA("Message without newline (tid: 9001)"); - OutputDebugStringA("Message without newline (tid: 9002)"); - OutputDebugStringA("Message without newline (tid: 9003)"); - OutputDebugStringA("Message without newline (tid: 9001)"); - OutputDebugStringA("Message without newline (tid: 9002)"); - OutputDebugStringA("Message without newline (tid: 9003)"); - OutputDebugStringA("Message without newline (tid: 9003)"); - OutputDebugStringA("Message without newline (tid: 9002)"); - OutputDebugStringA("Message without newline (tid: 9001)"); - OutputDebugStringA("Message without newline (tid: 9000)"); - OutputDebugStringA("Message without newline (address: 0x01020304)"); - OutputDebugStringA("Message without newline (address: 0xDEADBEEF)"); - OutputDebugStringA("Message without newline (address: 0xFEEDBEEF)"); - OutputDebugStringA("Message without newline (address: 0xB105F00D)"); - OutputDebugStringA("Message without newline (address: 0x0DEFACED)"); - OutputDebugStringA("Message without newline (address: 0xBAADF00D)"); - OutputDebugStringA("Message without newline (address: 0xCAFEBABE)"); - OutputDebugStringA("Message without newline (address: 0xDEADC0DE)"); - OutputDebugStringA("Message without newline (address: 0xDEADC0DE)"); -} - -void SocketTest() -{ - OutputDebugStringA("1"); - OutputDebugStringA("22"); - OutputDebugStringA("333"); - OutputDebugStringA("4444"); - OutputDebugStringA("55555"); - OutputDebugStringA("666666"); - OutputDebugStringA("1010101010"); -} - -void SendMessageTestNotepad(std::string msg) -{ - HWND notepad = FindWindowA(NULL, "Untitled - Notepad"); - HWND edit = FindWindowExA(notepad, NULL, "EDIT", NULL); - SendMessageA(edit, EM_REPLACESEL, TRUE, (LPARAM)msg.data()); -} - -void SendMessageDebugViewpp(std::string msg) -{ - HWND debugviewpp = FindWindowA(NULL, "[Capture Win32] - DebugView++"); - SendMessageA(debugviewpp, EM_REPLACESEL, GetCurrentProcessId(), (LPARAM)msg.data()); -} - -void DbgMsgClearTest() -{ - char buffer[200]; - - int line = 1; - for (int i = 0; i < 400; ++i) - { - sprintf_s(buffer, "Message %d", line); - OutputDebugStringA(buffer); - ++line; - } - - OutputDebugStringA(" ----> DBGVIEWCLEAR\n"); - - for (int i = 0; i < 10; ++i) - { - sprintf_s(buffer, "Message %d", line); - OutputDebugStringA(buffer); - ++line; - } -} - -int getMilliCount() -{ - timeb tb; - ftime(&tb); - return tb.millitm + (tb.time & 0xfffff) * 1000; -} - -void testLongString() -{ - int length = 15000; - std::ostringstream ss; - ss << "1234567890ABCDEF-%s {0} \t\r\n"; - ss << length; - std::string test = ss.str(); - for (size_t i = 0; i < length - test.size() - 1; ++i) - ss << "X"; - - ss << "\n"; - test = ss.str(); - - OutputDebugStringA(test.c_str()); -} - -std::vector GetFileContent(const std::string& filename) -{ - std::fstream fs; - fs.open(filename, std::fstream::in); - - if (!fs) - { - std::cout << "\"" << filename << "\" not found!\n"; - return {}; - } - - std::cout << "Reading " << filename << "...\n"; - std::vector lines; - std::string line; - while (getline(fs, line)) - lines.push_back(line); - fs.close(); - return lines; -} - -void TestODS(const std::string& filename) -{ - auto lines = GetFileContent(filename); - std::cout << "writing... " << lines.size() << " lines\n"; - Timer timer; - auto t1 = timer.now(); - for (const auto& s : lines) - { - OutputDebugStringA(s.c_str()); - } - auto elepsed = timer.now() - t1; - std::cout << "OutputDebugStringA " << lines.size() << " lines, took: " << static_cast(Timer::ToMs(elepsed)) << " ms\n"; -} - -void TestSendMessage(const std::string& filename) -{ - auto lines = GetFileContent(filename); - std::cout << "writing... " << lines.size() << " lines\n"; - Timer timer; - - HWND debugviewpp = FindWindow(NULL, L"[Capture Win32] - DebugView++"); - - auto t1 = timer.now(); - for (const auto& s : lines) - { - SendMessage(debugviewpp, EM_REPLACESEL, GetCurrentProcessId(), (LPARAM)s.data()); - } - auto elepsed = timer.now() - t1; - std::cout << "SendMessage " << lines.size() << " lines, took: " << static_cast(Timer::ToMs(elepsed)) << " ms\n"; -} - -void EndlessTest() -{ - int length = 40; // 260 - std::ostringstream ss; - ss << "123456:jan-7890_ABC__DEF-te m_test"; - ss << length; - std::string test = ss.str(); - for (size_t i = 0; i < length - test.size() - 1; ++i) - ss << "X"; - - ss << "\n"; - test = ss.str(); - - // testLongString(); - - for (;;) - { - long t1 = getMilliCount(); - - for (int a = 0; a < 5; ++a) - { - OutputDebugStringA(" ## before me ##\n"); - - // write exactly 2MB to the debug buffer; - for (int i = 0; i < 9; ++i) - OutputDebugStringA(test.c_str()); - - long t2 = getMilliCount(); - OutputDebugStringA(" ## tracking me ##\n"); - std::cout << "took: " << t2 - t1 << " ms\n"; - Sleep(50); - } - // OutputDebugStringA(" ----> DBGVIEWCLEAR\n"); - } -} - -void SeparateProcessTest() -{ - std::cerr << "SeparateProcessTest\n"; - for (;;) - { - auto result = ShellExecute(nullptr, L"open", L"DbgMsgSrc.exe", L"-n", nullptr, SW_HIDE); - if (result <= HINSTANCE(32)) - { - std::cerr << "error starting DbgMsgSrc.exe\n"; - break; - } - Sleep(100); - } -} - -void CoutCerrTest() -{ - for (int i = 1; i <= 5; ++i) - { - std::cout << "========= cycle " << i << "/5 ========\n"; - std::cout << "Message on cout 1\n"; - std::cout << "Message on cout 2\n"; - std::cerr << "Message on cerr 1\n"; - std::cerr << "Message on cerr 2\n"; - std::cout << "Message on cout 3\n"; - std::cerr << "Message on cerr 3\n"; - std::cout << "Message on cout 4\n"; - std::cerr << "Message on cerr 4\n"; - std::cout << "Message on cout 5\n"; - std::cerr << "Message on cerr 5\n"; - Sleep(2000); - } -} - -void UdpTest(const std::string& address, int port) -{ - Win32::WinsockInitialization wsaInit; - - auto s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); - if (s == INVALID_SOCKET) - Win32::WSAThrowLastError("socket"); - - sockaddr_in sa; - sa.sin_family = AF_INET; - sa.sin_port = htons(u_short(port)); - sa.sin_addr.s_addr = inet_addr(address.c_str()); - - std::string message = "DbgMsgSrc UDP message"; - auto rc = sendto(s, message.data(), static_cast(message.size()), 0, reinterpret_cast(&sa), sizeof(sa)); - if (rc == SOCKET_ERROR) - Win32::WSAThrowLastError("sendto"); - - closesocket(s); -} - -void CoutCerrTest2() -{ - std::cout << "One message on cout with newline\n"; - // std::cerr << "One message on cerr with newline\n"; -} - - -void PrintUsage() -{ - std::cout << "Usage: DbgMsgSrc \n" - "\n" - " -1 read 'titan_crash_debugview_43mb.log' and output it through OutputDebugStringA\n" - " -2 read and output it through OutputDebugStringA\n" - " -3 run endless test\n" - " -s run -n repeatedly (10x / second) in separate processes)\n" - " -w Send OutputDebugStringA 'WithoutNewLine'\n" - " -n Send OutputDebugStringA 'WithNewLine\\n'\n" - " -e Send empty OutputDebugStringA message (does not trigger DBwinMutex!)\n" - // about -4: - // we cannot guarantee what happens if 1x OutputDebugStringA is send - // the process might already be gone be time we handle the message - // however, if 2 messages are send, the process is guarenteed to be alive - // at least after receiving the first message but before setting the m_dbWinBufferReady flag.. - // (because before setting the flag the traced process is still waiting for the flag) - // this means sending 2 messages and dieing ASAP afterwards is the worst-case we can still handle reliablely. - " -4 Send 2x OutputDebugStringA 'WithNewLine\\n' (process handle cache test)\n" - " -5 Send OutputDebugStringA '1\\n2\\n3\\n'\n" - " -6 Send OutputDebugStringA '1 ' '2 ' '3\\n' in separate messages\n" - " -7 DbgMsgTest, sends 5 different test lines, using different newlines styles\n" - " -8 DbgMsgSrc, Send OutputDebugStringA test lines with the specified frequency\n" - " -9 DBGVIEWCLEAR test\n" - " -A cout/cerr test\n" - " -u
Send UDP messsages to address:port\n" - " -b Send 4 lines large enough to rule out any small string optimizations (50 chars)\n" - " -c Send 2 lines with utf-8 encoded unicode (chinese characters)\n"; -} - -int Main(int argc, char* argv[]) -{ - std::cout << "DbgMsgSrc, pid: " << GetCurrentProcessId() << std::endl; - - // HANDLE handle1 = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, GetCurrentProcessId()); - // HANDLE handle2 = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, GetCurrentProcessId()); - // HANDLE handle3 = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, GetCurrentProcessId()); - // printf(" %p, %p, %p\n", handle1, handle2, handle3); - - for (int i = 1; i < argc; ++i) - { - std::string arg(argv[i]); - if (arg == "-1") - { - TestODS("titan_crash_debugview_43mb.log"); - return 0; - } - if (arg == "-1n") - { - TestSendMessage("titan_crash_debugview_43mb.log"); - return 0; - } - else if (arg == "-2") - { - if (i + 1 < argc) - { - TestODS(argv[i + 1]); - } - else - { - PrintUsage(); - return -1; - } - return 0; - } - else if (arg == "-3") - { - EndlessTest(); - return 0; - } - else if (arg == "-s") // run separate process test - { - SeparateProcessTest(); - return 0; - } - else if (arg == "-w") - { - std::cout << "Send OutputDebugStringA 'WithoutNewLine ' (15 bytes)\n"; - OutputDebugStringA("WithoutNewLine "); - return 0; - } - else if (arg == "-n") - { - std::cout << "Send OutputDebugStringA 'With-a-NewLine \\n' (16 bytes)\n"; - OutputDebugStringA("With-a-NewLine \n"); - return 0; - } - else if (arg == "-e") - { - std::cout << "Send empty OutputDebugStringA message (0 bytes)\n"; - OutputDebugStringA(""); // empty message - return 0; - } - else if (arg == "-4") - { - std::cout << "Send 2x OutputDebugStringA 'WithNewLine\\n (24 bytes)'\n"; - OutputDebugStringA("WithNewLine\n"); - OutputDebugStringA("WithNewLine\n"); - return 0; - } - else if (arg == "-5") - { - std::cout << "Send OutputDebugStringA '1\\n2\\n3\\n' (6 bytes)\n"; - OutputDebugStringA("1\n2\n3\n"); - return 0; - } - else if (arg == "-6") - { - std::cout << "Send OutputDebugStringA '1 ' '2 ' '3\\n' in separate messages (6 bytes)\n"; - OutputDebugStringA("1 "); - OutputDebugStringA("2 "); - OutputDebugStringA("3\n"); - return 0; - } - else if (arg == "-7") - { - DbgMsgTest(); - return 7; - } - else if (arg == "-8") - { - if (i + 1 < argc) - { - DbgMsgSrc(std::stoi(argv[i + 1])); - } - else - { - PrintUsage(); - return -1; - } - return 0; - } - else if (arg == "-9") - { - DbgMsgClearTest(); - return 0; - } - else if (arg == "-A") - { - CoutCerrTest(); - return 0; - } - else if (arg == "-u") - { - if (i + 2 < argc) - { - UdpTest(argv[i + 1], std::stoi(argv[i + 2])); - return 0; - } - PrintUsage(); - return -1; - } - else if (arg == "-B") - { - CoutCerrTest2(); - return 0; - } - else if (arg == "-C") - { - SocketTest(); - return 0; - } - else if (arg == "-D") - { - OutputDebugStringA("test1\n"); - OutputDebugStringA("\n"); - OutputDebugStringA("\n\n"); - OutputDebugStringA("test2\n\n"); - OutputDebugStringA("test3\n"); - return 0; - } - else if (arg == "-b") - { - OutputDebugStringA("test long string with enough chars to exceed small string optimizations (SSO)\n"); // 79 chars + '\n' + '0'; - OutputDebugStringA("test long string with enough chars to exceed small string optimizations (SSO)\n"); // 79 chars + '\n' + '0'; - return 0; - } - else if (arg == "-c") - { - OutputDebugStringW(L"writing \u82F1\u8BED\n"); // ?? - OutputDebugStringW(L"some \u4E2D\u6587 and more \u4E2D\u6587\u4FE1\u606F\n"); // ???? - return 0; - } - else if (arg == "-no") - { - TestSendMessage("test long string with enough chars to exceed small string optimizations (SSO)\n"); - TestSendMessage("test long string with enough chars to exceed small string optimizations (SSO)\n"); - return 0; - } - else - { - TestODS(arg); - return 0; - } - } - PrintUsage(); - return EXIT_SUCCESS; -} - -} // namespace DbgMsgSrc -} // namespace fusion - -int main(int argc, char* argv[]) -try -{ - return fusion::DbgMsgSrc::Main(argc, argv); -} -catch (std::exception& ex) -{ - std::cerr << ex.what() << std::endl; - return EXIT_FAILURE; -} +// (C) Copyright Gert-Jan de Vos and Jan Wilmans 2013. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include "dbgstream.h" +#include "Win32/Win32Lib.h" +#include "Timer.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "shellapi.h" + +#pragma comment(lib, "Ws2_32.lib") +#pragma comment(lib, "psapi.lib") + +namespace fusion { + +namespace Win32 { + +class WinsockInitialization : noncopyable +{ +public: + explicit WinsockInitialization(int major = 2, int minor = 2) + { + WSADATA wsaData = {0}; + int rc = WSAStartup(MAKEWORD(major, minor), &wsaData); + if (rc != 0) + ThrowWin32Error(rc, "WSAStartup"); + } + + ~WinsockInitialization() + { + WSACleanup(); + } +}; + +void WSAThrowLastError(const std::string& what) +{ + Win32::ThrowWin32Error(WSAGetLastError(), what); +} + +} // namespace Win32 + +namespace DbgMsgSrc { + +void DbgMsgSrc(double freq) +{ + unsigned t0 = GetTickCount(); + unsigned count = 0; + double msgPerTick = freq * 1e-3; + for (;;) + { + Sleep(10); + while (count < (GetTickCount() - t0) * msgPerTick) + { + if (count % 10 == 0) + cdbg << "Een, twee, drie, vier, vijf, zes, zeven, acht, negen, tien, elf, twaalf, dertien, veertien, vijftien, zestien, zeventien, achttien, negentien, twintig, eenentwintig, tweeentwintig, drieentwintig, vierentwintig, vijfentwintig, zesentwintig, zevenentwintig, achtentwintig, negenentwintig, dertig.\n"; + else + cdbg << "Message #" << count << "\n"; + ++count; + } + } +} + +void DbgMsgTest() +{ + OutputDebugStringA("Message 1 without newline"); + OutputDebugStringA("Message 2 without newline"); + OutputDebugStringA("Message 3 with newline\n"); + OutputDebugStringA("Message with\nembedded newline\n"); + OutputDebugStringA("This should look like a table in a non-proportionally spaced font like 'Courier'"); + OutputDebugStringA("Columnn1\tColumnn2\tColumnn3\tColumnn4\tColumnn5"); + OutputDebugStringA("1\t\t2\t\t3\t\t4\t\t5"); + OutputDebugStringA("A\t\tB\t\tC\t\tD\t\tE"); + OutputDebugStringA("11\t\t12\t\t13\t\t14\t\t15"); + OutputDebugStringA("21\t\t22\t\t23A\t\t24\t\t25"); + + OutputDebugStringA(" This line has 1 space prefixed"); + OutputDebugStringA(" This line has 2 space prefixed"); + OutputDebugStringA(" This line has 3 space prefixed"); + OutputDebugStringA(" This line has 4 space prefixed"); + + OutputDebugStringA("HighLighting test: Double-click the word 'lines' in each of the following lines and make sure that word is highlighted."); + + OutputDebugStringA("\t123\t \t123\t \t123\t \t123\t This lines starts with tab"); + OutputDebugStringA(" \t123\t \t123\t \t123\t \t123\t This lines starts with 1 space + tab"); + OutputDebugStringA(" \t123\t \t123\t \t123\t \t123\t This lines starts with 2 spaces + tab"); + OutputDebugStringA(" \t123\t \t123\t \t123\t \t123\t This lines starts with 3 spaces + tab"); + OutputDebugStringA(" \t123\t \t123\t \t123\t \t123\t This lines starts with 4 spaces + tab"); + OutputDebugStringA("2LongLine: Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Very Long Message that ends in a single newline. Message ends HERE.\n"); + + OutputDebugStringA("Message without newline (tid: 9000)"); + OutputDebugStringA("Message without newline (tid: 9001)"); + OutputDebugStringA("Message without newline (tid: 9002)"); + OutputDebugStringA("Message without newline (tid: 9003)"); + OutputDebugStringA("Message without newline (tid: 9001)"); + OutputDebugStringA("Message without newline (tid: 9002)"); + OutputDebugStringA("Message without newline (tid: 9003)"); + OutputDebugStringA("Message without newline (tid: 9003)"); + OutputDebugStringA("Message without newline (tid: 9002)"); + OutputDebugStringA("Message without newline (tid: 9001)"); + OutputDebugStringA("Message without newline (tid: 9000)"); + OutputDebugStringA("Message without newline (address: 0x01020304)"); + OutputDebugStringA("Message without newline (address: 0xDEADBEEF)"); + OutputDebugStringA("Message without newline (address: 0xFEEDBEEF)"); + OutputDebugStringA("Message without newline (address: 0xB105F00D)"); + OutputDebugStringA("Message without newline (address: 0x0DEFACED)"); + OutputDebugStringA("Message without newline (address: 0xBAADF00D)"); + OutputDebugStringA("Message without newline (address: 0xCAFEBABE)"); + OutputDebugStringA("Message without newline (address: 0xDEADC0DE)"); + OutputDebugStringA("Message without newline (address: 0xDEADC0DE)"); +} + +void SocketTest() +{ + OutputDebugStringA("1"); + OutputDebugStringA("22"); + OutputDebugStringA("333"); + OutputDebugStringA("4444"); + OutputDebugStringA("55555"); + OutputDebugStringA("666666"); + OutputDebugStringA("1010101010"); +} + +void SendMessageTestNotepad(std::string msg) +{ + HWND notepad = FindWindowA(NULL, "Untitled - Notepad"); + HWND edit = FindWindowExA(notepad, NULL, "EDIT", NULL); + SendMessageA(edit, EM_REPLACESEL, TRUE, (LPARAM)msg.data()); +} + +void SendMessageDebugViewpp(std::string msg) +{ + HWND debugviewpp = FindWindowA(NULL, "[Capture Win32] - DebugView++"); + SendMessageA(debugviewpp, EM_REPLACESEL, GetCurrentProcessId(), (LPARAM)msg.data()); +} + +void DbgMsgClearTest() +{ + char buffer[200]; + + int line = 1; + for (int i = 0; i < 400; ++i) + { + sprintf_s(buffer, "Message %d", line); + OutputDebugStringA(buffer); + ++line; + } + + OutputDebugStringA(" ----> DBGVIEWCLEAR\n"); + + for (int i = 0; i < 10; ++i) + { + sprintf_s(buffer, "Message %d", line); + OutputDebugStringA(buffer); + ++line; + } +} + +int getMilliCount() +{ + timeb tb; + ftime(&tb); + return tb.millitm + (tb.time & 0xfffff) * 1000; +} + +void testLongString() +{ + int length = 15000; + std::ostringstream ss; + ss << "1234567890ABCDEF-%s {0} \t\r\n"; + ss << length; + std::string test = ss.str(); + for (size_t i = 0; i < length - test.size() - 1; ++i) + ss << "X"; + + ss << "\n"; + test = ss.str(); + + OutputDebugStringA(test.c_str()); +} + +std::vector GetFileContent(const std::string& filename) +{ + std::fstream fs; + fs.open(filename, std::fstream::in); + + if (!fs) + { + std::cout << "\"" << filename << "\" not found!\n"; + return {}; + } + + std::cout << "Reading " << filename << "...\n"; + std::vector lines; + std::string line; + while (getline(fs, line)) + lines.push_back(line); + fs.close(); + return lines; +} + +void TestODS(const std::string& filename) +{ + auto lines = GetFileContent(filename); + std::cout << "writing... " << lines.size() << " lines\n"; + Timer timer; + auto t1 = timer.now(); + for (const auto& s : lines) + { + OutputDebugStringA(s.c_str()); + } + auto elepsed = timer.now() - t1; + std::cout << "OutputDebugStringA " << lines.size() << " lines, took: " << static_cast(Timer::ToMs(elepsed)) << " ms\n"; +} + +void TestSendMessage(const std::string& filename) +{ + auto lines = GetFileContent(filename); + std::cout << "writing... " << lines.size() << " lines\n"; + Timer timer; + + HWND debugviewpp = FindWindow(NULL, L"[Capture Win32] - DebugView++"); + + auto t1 = timer.now(); + for (const auto& s : lines) + { + SendMessage(debugviewpp, EM_REPLACESEL, GetCurrentProcessId(), (LPARAM)s.data()); + } + auto elepsed = timer.now() - t1; + std::cout << "SendMessage " << lines.size() << " lines, took: " << static_cast(Timer::ToMs(elepsed)) << " ms\n"; +} + +void EndlessTest() +{ + int length = 40; // 260 + std::ostringstream ss; + ss << "123456:jan-7890_ABC__DEF-te m_test"; + ss << length; + std::string test = ss.str(); + for (size_t i = 0; i < length - test.size() - 1; ++i) + ss << "X"; + + ss << "\n"; + test = ss.str(); + + // testLongString(); + + for (;;) + { + long t1 = getMilliCount(); + + for (int a = 0; a < 5; ++a) + { + OutputDebugStringA(" ## before me ##\n"); + + // write exactly 2MB to the debug buffer; + for (int i = 0; i < 9; ++i) + OutputDebugStringA(test.c_str()); + + long t2 = getMilliCount(); + OutputDebugStringA(" ## tracking me ##\n"); + std::cout << "took: " << t2 - t1 << " ms\n"; + Sleep(50); + } + // OutputDebugStringA(" ----> DBGVIEWCLEAR\n"); + } +} + +void SeparateProcessTest() +{ + std::cerr << "SeparateProcessTest\n"; + for (;;) + { + auto result = ShellExecute(nullptr, L"open", L"DbgMsgSrc.exe", L"-n", nullptr, SW_HIDE); + if (result <= HINSTANCE(32)) + { + std::cerr << "error starting DbgMsgSrc.exe\n"; + break; + } + Sleep(100); + } +} + +void CoutCerrTest() +{ + for (int i = 1; i <= 5; ++i) + { + std::cout << "========= cycle " << i << "/5 ========\n"; + std::cout << "Message on cout 1\n"; + std::cout << "Message on cout 2\n"; + std::cerr << "Message on cerr 1\n"; + std::cerr << "Message on cerr 2\n"; + std::cout << "Message on cout 3\n"; + std::cerr << "Message on cerr 3\n"; + std::cout << "Message on cout 4\n"; + std::cerr << "Message on cerr 4\n"; + std::cout << "Message on cout 5\n"; + std::cerr << "Message on cerr 5\n"; + Sleep(2000); + } +} + +void UdpTest(const std::string& address, int port) +{ + Win32::WinsockInitialization wsaInit; + + auto s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + if (s == INVALID_SOCKET) + Win32::WSAThrowLastError("socket"); + + sockaddr_in sa; + sa.sin_family = AF_INET; + sa.sin_port = htons(u_short(port)); + sa.sin_addr.s_addr = inet_addr(address.c_str()); + + std::string message = "DbgMsgSrc UDP message"; + auto rc = sendto(s, message.data(), static_cast(message.size()), 0, reinterpret_cast(&sa), sizeof(sa)); + if (rc == SOCKET_ERROR) + Win32::WSAThrowLastError("sendto"); + + closesocket(s); +} + +void CoutCerrTest2() +{ + std::cout << "One message on cout with newline\n"; + // std::cerr << "One message on cerr with newline\n"; +} + + +void PrintUsage() +{ + std::cout << "Usage: DbgMsgSrc \n" + "\n" + " -1 read 'titan_crash_debugview_43mb.log' and output it through OutputDebugStringA\n" + " -2 read and output it through OutputDebugStringA\n" + " -3 run endless test\n" + " -s run -n repeatedly (10x / second) in separate processes)\n" + " -w Send OutputDebugStringA 'WithoutNewLine'\n" + " -n Send OutputDebugStringA 'WithNewLine\\n'\n" + " -e Send empty OutputDebugStringA message (does not trigger DBwinMutex!)\n" + // about -4: + // we cannot guarantee what happens if 1x OutputDebugStringA is send + // the process might already be gone be time we handle the message + // however, if 2 messages are send, the process is guarenteed to be alive + // at least after receiving the first message but before setting the m_dbWinBufferReady flag.. + // (because before setting the flag the traced process is still waiting for the flag) + // this means sending 2 messages and dieing ASAP afterwards is the worst-case we can still handle reliablely. + " -4 Send 2x OutputDebugStringA 'WithNewLine\\n' (process handle cache test)\n" + " -5 Send OutputDebugStringA '1\\n2\\n3\\n'\n" + " -6 Send OutputDebugStringA '1 ' '2 ' '3\\n' in separate messages\n" + " -7 DbgMsgTest, sends 5 different test lines, using different newlines styles\n" + " -8 DbgMsgSrc, Send OutputDebugStringA test lines with the specified frequency\n" + " -9 DBGVIEWCLEAR test\n" + " -A cout/cerr test\n" + " -u
Send UDP messsages to address:port\n" + " -b Send 4 lines large enough to rule out any small string optimizations (50 chars)\n" + " -c Send 2 lines with utf-8 encoded unicode (chinese characters)\n"; +} + +int Main(int argc, char* argv[]) +{ + std::cout << "DbgMsgSrc, pid: " << GetCurrentProcessId() << std::endl; + + // HANDLE handle1 = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, GetCurrentProcessId()); + // HANDLE handle2 = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, GetCurrentProcessId()); + // HANDLE handle3 = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, GetCurrentProcessId()); + // printf(" %p, %p, %p\n", handle1, handle2, handle3); + + for (int i = 1; i < argc; ++i) + { + std::string arg(argv[i]); + if (arg == "-1") + { + TestODS("titan_crash_debugview_43mb.log"); + return 0; + } + if (arg == "-1n") + { + TestSendMessage("titan_crash_debugview_43mb.log"); + return 0; + } + else if (arg == "-2") + { + if (i + 1 < argc) + { + TestODS(argv[i + 1]); + } + else + { + PrintUsage(); + return -1; + } + return 0; + } + else if (arg == "-3") + { + EndlessTest(); + return 0; + } + else if (arg == "-s") // run separate process test + { + SeparateProcessTest(); + return 0; + } + else if (arg == "-w") + { + std::cout << "Send OutputDebugStringA 'WithoutNewLine ' (15 bytes)\n"; + OutputDebugStringA("WithoutNewLine "); + return 0; + } + else if (arg == "-n") + { + std::cout << "Send OutputDebugStringA 'With-a-NewLine \\n' (16 bytes)\n"; + OutputDebugStringA("With-a-NewLine \n"); + return 0; + } + else if (arg == "-e") + { + std::cout << "Send empty OutputDebugStringA message (0 bytes)\n"; + OutputDebugStringA(""); // empty message + return 0; + } + else if (arg == "-4") + { + std::cout << "Send 2x OutputDebugStringA 'WithNewLine\\n (24 bytes)'\n"; + OutputDebugStringA("WithNewLine\n"); + OutputDebugStringA("WithNewLine\n"); + return 0; + } + else if (arg == "-5") + { + std::cout << "Send OutputDebugStringA '1\\n2\\n3\\n' (6 bytes)\n"; + OutputDebugStringA("1\n2\n3\n"); + return 0; + } + else if (arg == "-6") + { + std::cout << "Send OutputDebugStringA '1 ' '2 ' '3\\n' in separate messages (6 bytes)\n"; + OutputDebugStringA("1 "); + OutputDebugStringA("2 "); + OutputDebugStringA("3\n"); + return 0; + } + else if (arg == "-7") + { + DbgMsgTest(); + return 7; + } + else if (arg == "-8") + { + if (i + 1 < argc) + { + DbgMsgSrc(std::stoi(argv[i + 1])); + } + else + { + PrintUsage(); + return -1; + } + return 0; + } + else if (arg == "-9") + { + DbgMsgClearTest(); + return 0; + } + else if (arg == "-A") + { + CoutCerrTest(); + return 0; + } + else if (arg == "-u") + { + if (i + 2 < argc) + { + UdpTest(argv[i + 1], std::stoi(argv[i + 2])); + return 0; + } + PrintUsage(); + return -1; + } + else if (arg == "-B") + { + CoutCerrTest2(); + return 0; + } + else if (arg == "-C") + { + SocketTest(); + return 0; + } + else if (arg == "-D") + { + OutputDebugStringA("test1\n"); + OutputDebugStringA("\n"); + OutputDebugStringA("\n\n"); + OutputDebugStringA("test2\n\n"); + OutputDebugStringA("test3\n"); + return 0; + } + else if (arg == "-b") + { + OutputDebugStringA("test long string with enough chars to exceed small string optimizations (SSO)\n"); // 79 chars + '\n' + '0'; + OutputDebugStringA("test long string with enough chars to exceed small string optimizations (SSO)\n"); // 79 chars + '\n' + '0'; + return 0; + } + else if (arg == "-c") + { + OutputDebugStringW(L"writing \u82F1\u8BED\n"); // ?? + OutputDebugStringW(L"some \u4E2D\u6587 and more \u4E2D\u6587\u4FE1\u606F\n"); // ???? + return 0; + } + else if (arg == "-no") + { + TestSendMessage("test long string with enough chars to exceed small string optimizations (SSO)\n"); + TestSendMessage("test long string with enough chars to exceed small string optimizations (SSO)\n"); + return 0; + } + else + { + TestODS(arg); + return 0; + } + } + PrintUsage(); + return EXIT_SUCCESS; +} + +} // namespace DbgMsgSrc +} // namespace fusion + +int main(int argc, char* argv[]) +try +{ + return fusion::DbgMsgSrc::Main(argc, argv); +} +catch (std::exception& ex) +{ + std::cerr << ex.what() << std::endl; + return EXIT_FAILURE; +} diff --git a/application/DebugViewpp/CMakeLists.txt b/application/DebugViewpp/CMakeLists.txt index 6d44688a..54ed37b2 100644 --- a/application/DebugViewpp/CMakeLists.txt +++ b/application/DebugViewpp/CMakeLists.txt @@ -48,4 +48,4 @@ install(CODE " execute_process(COMMAND ${PROJECT_UTILS_DIRECTORY}/upx.exe ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Debugviewpp-small.exe) ") -INSTALL(FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Debugviewpp-small.exe DESTINATION bin) +INSTALL(FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Debugviewpp-small.exe DESTINATION bin) diff --git a/application/DebugViewpp/version.h b/application/DebugViewpp/version.h index 4152cc86..f67cef21 100644 --- a/application/DebugViewpp/version.h +++ b/application/DebugViewpp/version.h @@ -1,2 +1,2 @@ -#define VERSION 1,9,0,56 -#define VERSION_STR "1.9.0.56" +#define VERSION 1,9,0,56 +#define VERSION_STR "1.9.0.56" diff --git a/application/DebugViewpp/version.wxi b/application/DebugViewpp/version.wxi index 525bce22..1321e7ba 100644 --- a/application/DebugViewpp/version.wxi +++ b/application/DebugViewpp/version.wxi @@ -1,8 +1,8 @@ - - - - - - - - + + + + + + + + diff --git a/application/DebugViewppLib/CTimelineView.cpp b/application/DebugViewppLib/CTimelineView.cpp index 6d310afb..cca44ee7 100644 --- a/application/DebugViewppLib/CTimelineView.cpp +++ b/application/DebugViewppLib/CTimelineView.cpp @@ -1,236 +1,236 @@ -// (C) Copyright Gert-Jan de Vos and Jan Wilmans 2016. -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include "DebugViewppLib/CTimelineView.h" -#include -#include -#include -#include "CobaltFusion/dbgstream.h" -#include "CobaltFusion/Str.h" -#include "CobaltFusion/stringbuilder.h" -#include - -namespace fusion { -namespace gdi { - -Artifact::Artifact(Pixel position, Artifact::Type type) : - m_position(position), - m_type(type), - m_color(RGB(0, 0, 0)), - m_fillcolor(RGB(255, 255, 255)) -{ -} - -Artifact::Artifact(Pixel position, Artifact::Type type, COLORREF color) : - m_position(position), - m_type(type), - m_color(color), - m_fillcolor(RGB(255, 255, 255)) -{ -} - -Artifact::Artifact(Pixel position, Artifact::Type type, COLORREF color, COLORREF fillcolor) : - m_position(position), - m_type(type), - m_color(color), - m_fillcolor(fillcolor) -{ -} - -void Artifact::SetColor(COLORREF color) -{ - m_color = color; -} - -void Artifact::SetFillColor(COLORREF color) -{ - m_fillcolor = color; -} - -COLORREF Artifact::GetColor() const -{ - return m_color; -} - -COLORREF Artifact::GetFillColor() const -{ - return m_fillcolor; -} - -Pixel Artifact::GetPosition() const -{ - return m_position; -} - -Line::Line(const std::wstring& name) : - m_name(name) -{ -} - -std::wstring Line::GetName() const -{ - return m_name; -} - -void Line::Add(Artifact artifact) -{ - m_artifacts.emplace_back(artifact); -} - -std::vector Line::GetArtifacts() const -{ - return m_artifacts; -} - -LONG CTimelineView::GetTrackPos32(int nBar) -{ - SCROLLINFO si = {sizeof(si), SIF_TRACKPOS}; - GetScrollInfo(nBar, &si); - return si.nTrackPos; -} - -void CTimelineView::OnMouseMove(UINT /*nFlags*/, CPoint point) -{ - m_cursorPosition = std::max(int(point.x), gdi::s_leftTextAreaBorder); - SetFocus(); - Invalidate(); -} - -BOOL CTimelineView::OnMouseWheel(UINT /*nFlags*/, short zDelta, CPoint /*pt*/) -{ - m_mouseScrollCallback(m_cursorPosition - gdi::s_leftTextAreaBorder, m_selectedPosition - gdi::s_leftTextAreaBorder, zDelta); - Invalidate(); - return TRUE; -} - -void CTimelineView::OnLButtonDown(UINT /*flags*/, CPoint point) -{ - m_selectedPosition = std::max(int(point.x), gdi::s_leftTextAreaBorder); - SetFocus(); - Invalidate(); -} - -void CTimelineView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar /*pScrollBar*/) -{ - if (nSBCode == SB_THUMBTRACK) - { - cdbg << "TRACK OnHScroll, nPos: " << nPos << "\n"; // received range is 1-100, unaffected by SetScrollRange ? - SetScrollPos(SB_HORZ, nPos); - Invalidate(); - } -} - -BOOL CTimelineView::OnInitDialog(CWindow /*wndFocus*/, LPARAM /*lInitParam*/) -{ - // SetScrollRange(SB_HORZ, 1, 500); // no effect?? - return 1; -} - -void CTimelineView::DoPaint(CDCHandle cdc) -{ - using namespace fusion; - gdi::TimelineDC dc(cdc); - auto backgroundArea = dc.GetClientArea(); - dc.FillSolidRect(&backgroundArea, RGB(255, 255, 255)); - - m_timelines = Recalculate(dc); - - PaintScale(dc); - PaintTimelines(dc); - PaintCursors(dc); -} - -void CTimelineView::SetFormatter(FormatFunction f) -{ - m_formatFunction = f; -} - -void CTimelineView::SetDataProvider(DataProvider f) -{ - m_dataProvider = f; -} - -void CTimelineView::SetMouseScrollCallback(MouseScrollCallback f) -{ - m_mouseScrollCallback = f; -} - -TimeLines CTimelineView::Recalculate(gdi::TimelineDC& /*dc*/) -{ - return m_dataProvider(); -} - -static const Pixel scaleBottom = 25; -static const Pixel topTimelinePos = 50; -static const Pixel minorTickHeight = 3; -static const Pixel majorTickHeight = 7; - -void CTimelineView::PaintScale(gdi::TimelineDC& dc) -{ - Pixel width = dc.GetClientArea().right - gdi::s_leftTextAreaBorder; - int y = scaleBottom; - auto x = gdi::s_leftTextAreaBorder + m_tickOffset; - int lastX = 0; - - // auto pos = m_tickOffset; - int majorTicks = width / m_minorTicksPerMajorTick; - for (int i = 0; i < majorTicks; ++i) - { - std::wstring s = m_formatFunction(x - gdi::s_leftTextAreaBorder); - dc.DrawTextOut(s, x - 15, 0); - dc.MoveTo(x, y); - dc.LineTo(x, y - majorTickHeight); - lastX = x; - x += (m_minorTicksPerMajorTick * m_minorTickSize); - } - - x = gdi::s_leftTextAreaBorder; - // int minorTicks = width / m_minorTickSize; - for (; x < lastX;) - { - dc.MoveTo(x, y); - dc.LineTo(x, y - minorTickHeight); - x += m_minorTickSize; - } -} - -void CTimelineView::PaintCursors(gdi::TimelineDC& dc) -{ - auto rect = dc.GetClientArea(); - - CPen redpen(CreatePen(PS_SOLID, 1, RGB(255, 0, 0))); - CPen greenpen(CreatePen(PS_SOLID, 1, RGB(0, 255, 0))); - - dc.SelectPen(redpen); - dc.MoveTo(m_cursorPosition, scaleBottom); - dc.LineTo(m_cursorPosition, rect.bottom); - - dc.SelectPen(greenpen); - dc.MoveTo(m_selectedPosition, scaleBottom); - dc.LineTo(m_selectedPosition, rect.bottom); -} - -void CTimelineView::PaintTimelines(gdi::TimelineDC& dc) -{ - auto rect = dc.GetClientArea(); - - int y = topTimelinePos; - y += GetTrackPos32(SB_HORZ); // test - for (const auto& line : m_timelines) - { - auto grey = RGB(160, 160, 170); - dc.DrawTimeline(line->GetName(), 0, y, rect.right, grey); - for (auto& artifact : line->GetArtifacts()) - { - // switch (artifact. - dc.DrawSolidFlag(L"tag", artifact.GetPosition() + gdi::s_leftTextAreaBorder, y, artifact.GetColor(), artifact.GetFillColor()); - } - y += 25; - } -} - - -} // namespace gdi -} // namespace fusion +// (C) Copyright Gert-Jan de Vos and Jan Wilmans 2016. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include "DebugViewppLib/CTimelineView.h" +#include +#include +#include +#include "CobaltFusion/dbgstream.h" +#include "CobaltFusion/Str.h" +#include "CobaltFusion/stringbuilder.h" +#include + +namespace fusion { +namespace gdi { + +Artifact::Artifact(Pixel position, Artifact::Type type) : + m_position(position), + m_type(type), + m_color(RGB(0, 0, 0)), + m_fillcolor(RGB(255, 255, 255)) +{ +} + +Artifact::Artifact(Pixel position, Artifact::Type type, COLORREF color) : + m_position(position), + m_type(type), + m_color(color), + m_fillcolor(RGB(255, 255, 255)) +{ +} + +Artifact::Artifact(Pixel position, Artifact::Type type, COLORREF color, COLORREF fillcolor) : + m_position(position), + m_type(type), + m_color(color), + m_fillcolor(fillcolor) +{ +} + +void Artifact::SetColor(COLORREF color) +{ + m_color = color; +} + +void Artifact::SetFillColor(COLORREF color) +{ + m_fillcolor = color; +} + +COLORREF Artifact::GetColor() const +{ + return m_color; +} + +COLORREF Artifact::GetFillColor() const +{ + return m_fillcolor; +} + +Pixel Artifact::GetPosition() const +{ + return m_position; +} + +Line::Line(const std::wstring& name) : + m_name(name) +{ +} + +std::wstring Line::GetName() const +{ + return m_name; +} + +void Line::Add(Artifact artifact) +{ + m_artifacts.emplace_back(artifact); +} + +std::vector Line::GetArtifacts() const +{ + return m_artifacts; +} + +LONG CTimelineView::GetTrackPos32(int nBar) +{ + SCROLLINFO si = {sizeof(si), SIF_TRACKPOS}; + GetScrollInfo(nBar, &si); + return si.nTrackPos; +} + +void CTimelineView::OnMouseMove(UINT /*nFlags*/, CPoint point) +{ + m_cursorPosition = std::max(int(point.x), gdi::s_leftTextAreaBorder); + SetFocus(); + Invalidate(); +} + +BOOL CTimelineView::OnMouseWheel(UINT /*nFlags*/, short zDelta, CPoint /*pt*/) +{ + m_mouseScrollCallback(m_cursorPosition - gdi::s_leftTextAreaBorder, m_selectedPosition - gdi::s_leftTextAreaBorder, zDelta); + Invalidate(); + return TRUE; +} + +void CTimelineView::OnLButtonDown(UINT /*flags*/, CPoint point) +{ + m_selectedPosition = std::max(int(point.x), gdi::s_leftTextAreaBorder); + SetFocus(); + Invalidate(); +} + +void CTimelineView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar /*pScrollBar*/) +{ + if (nSBCode == SB_THUMBTRACK) + { + cdbg << "TRACK OnHScroll, nPos: " << nPos << "\n"; // received range is 1-100, unaffected by SetScrollRange ? + SetScrollPos(SB_HORZ, nPos); + Invalidate(); + } +} + +BOOL CTimelineView::OnInitDialog(CWindow /*wndFocus*/, LPARAM /*lInitParam*/) +{ + // SetScrollRange(SB_HORZ, 1, 500); // no effect?? + return 1; +} + +void CTimelineView::DoPaint(CDCHandle cdc) +{ + using namespace fusion; + gdi::TimelineDC dc(cdc); + auto backgroundArea = dc.GetClientArea(); + dc.FillSolidRect(&backgroundArea, RGB(255, 255, 255)); + + m_timelines = Recalculate(dc); + + PaintScale(dc); + PaintTimelines(dc); + PaintCursors(dc); +} + +void CTimelineView::SetFormatter(FormatFunction f) +{ + m_formatFunction = f; +} + +void CTimelineView::SetDataProvider(DataProvider f) +{ + m_dataProvider = f; +} + +void CTimelineView::SetMouseScrollCallback(MouseScrollCallback f) +{ + m_mouseScrollCallback = f; +} + +TimeLines CTimelineView::Recalculate(gdi::TimelineDC& /*dc*/) +{ + return m_dataProvider(); +} + +static const Pixel scaleBottom = 25; +static const Pixel topTimelinePos = 50; +static const Pixel minorTickHeight = 3; +static const Pixel majorTickHeight = 7; + +void CTimelineView::PaintScale(gdi::TimelineDC& dc) +{ + Pixel width = dc.GetClientArea().right - gdi::s_leftTextAreaBorder; + int y = scaleBottom; + auto x = gdi::s_leftTextAreaBorder + m_tickOffset; + int lastX = 0; + + // auto pos = m_tickOffset; + int majorTicks = width / m_minorTicksPerMajorTick; + for (int i = 0; i < majorTicks; ++i) + { + std::wstring s = m_formatFunction(x - gdi::s_leftTextAreaBorder); + dc.DrawTextOut(s, x - 15, 0); + dc.MoveTo(x, y); + dc.LineTo(x, y - majorTickHeight); + lastX = x; + x += (m_minorTicksPerMajorTick * m_minorTickSize); + } + + x = gdi::s_leftTextAreaBorder; + // int minorTicks = width / m_minorTickSize; + for (; x < lastX;) + { + dc.MoveTo(x, y); + dc.LineTo(x, y - minorTickHeight); + x += m_minorTickSize; + } +} + +void CTimelineView::PaintCursors(gdi::TimelineDC& dc) +{ + auto rect = dc.GetClientArea(); + + CPen redpen(CreatePen(PS_SOLID, 1, RGB(255, 0, 0))); + CPen greenpen(CreatePen(PS_SOLID, 1, RGB(0, 255, 0))); + + dc.SelectPen(redpen); + dc.MoveTo(m_cursorPosition, scaleBottom); + dc.LineTo(m_cursorPosition, rect.bottom); + + dc.SelectPen(greenpen); + dc.MoveTo(m_selectedPosition, scaleBottom); + dc.LineTo(m_selectedPosition, rect.bottom); +} + +void CTimelineView::PaintTimelines(gdi::TimelineDC& dc) +{ + auto rect = dc.GetClientArea(); + + int y = topTimelinePos; + y += GetTrackPos32(SB_HORZ); // test + for (const auto& line : m_timelines) + { + auto grey = RGB(160, 160, 170); + dc.DrawTimeline(line->GetName(), 0, y, rect.right, grey); + for (auto& artifact : line->GetArtifacts()) + { + // switch (artifact. + dc.DrawSolidFlag(L"tag", artifact.GetPosition() + gdi::s_leftTextAreaBorder, y, artifact.GetColor(), artifact.GetFillColor()); + } + y += 25; + } +} + + +} // namespace gdi +} // namespace fusion diff --git a/application/DebugViewppLib/Conversions.cpp b/application/DebugViewppLib/Conversions.cpp index a98f0b29..ca1d9cdc 100644 --- a/application/DebugViewppLib/Conversions.cpp +++ b/application/DebugViewppLib/Conversions.cpp @@ -1,170 +1,170 @@ -// (C) Copyright Gert-Jan de Vos and Jan Wilmans 2013. -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include -#include -#include "Win32/Utilities.h" -#include "Win32/Win32Lib.h" -#include "CobaltFusion/stringbuilder.h" -#include "DebugViewppLib/Conversions.h" - -namespace fusion { -namespace debugviewpp { - -std::string GetTimeText(double time) -{ - return stringbuilder() << std::fixed << std::setprecision(6) << time; -} - -std::string GetDateText(const SYSTEMTIME& st) -{ - int size = GetDateFormatA(LOCALE_USER_DEFAULT, 0, &st, nullptr, nullptr, 0); - std::vector buf(size); - GetDateFormatA(LOCALE_USER_DEFAULT, 0, &st, nullptr, buf.data(), size); - return std::string(buf.data(), size - 1); -} - -std::string GetDateText(const FILETIME& ft) -{ - return GetDateText(Win32::FileTimeToSystemTime(Win32::FileTimeToLocalFileTime(ft))); -} - -std::string GetTimeText(const SYSTEMTIME& st) -{ - char buf[32]; - sprintf_s(buf, "%02d:%02d:%02d.%03d", st.wHour, st.wMinute, st.wSecond, st.wMilliseconds); - return buf; -} - -std::string GetDateTimeText(const FILETIME& filetime) -{ - // convert the FILETIME from UTC to local timezone so the time so written as 'clocktime' - auto st = Win32::FileTimeToSystemTime(Win32::FileTimeToLocalFileTime(filetime)); - char buf[64]; - sprintf_s(buf, "%04d/%02d/%02d %02d:%02d:%02d.%03d", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds); - return buf; -} - -std::string GetTimeText(const FILETIME& ft) -{ - if (ft.dwHighDateTime == 0 && ft.dwLowDateTime == 0) - { - return "0"; // prevent endlessly repeating exception messageboxes when reading a corrupted file - } - return GetTimeText(Win32::FileTimeToSystemTime(Win32::FileTimeToLocalFileTime(ft))); -} - -SYSTEMTIME GetSystemTime(WORD year, WORD month, WORD day) -{ - SYSTEMTIME st = {}; - st.wYear = year; - st.wMonth = month; - st.wDay = day; - return st; -} - -USTimeConverter::USTimeConverter() : - m_lastFileTime(), - m_firstValue(true) -{ -} - -FILETIME USTimeConverter::USTimeToFiletime(WORD h, WORD m, WORD s, WORD /*ms*/) -{ - if (m_firstValue) - { - m_firstValue = false; - auto st = GetSystemTime(2000, 1, 1); - st.wHour = h; - st.wMinute = m; - st.wSecond = s; - st.wMilliseconds = 0; // todo: why is 'ms' not used? - m_lastFileTime = Win32::SystemTimeToFileTime(st); - } - - auto st = Win32::FileTimeToSystemTime(m_lastFileTime); - st.wHour = h; - st.wMinute = m; - st.wSecond = s; - st.wMilliseconds = 0; - auto ft = Win32::SystemTimeToFileTime(st); - - if (ft < m_lastFileTime) // is ft before m_lastFileTime, then assume it is on the next day. - { - st.wDay += 1; - } - m_lastFileTime = Win32::SystemTimeToFileTime(st); - return Win32::LocalFileTimeToFileTime(ft); // convert to UTC -} - -// read localtime in format "hh:mm:ss tt" (AM/PM postfix) -bool USTimeConverter::ReadLocalTimeUSRegion(const std::string& text, FILETIME& ft) -{ - std::istringstream is(text); - WORD h = 0; - WORD m = 0; - WORD s = 0; - char c1 = 0; - char c2 = 0; - char p1 = 0; - char p2 = 0; - is >> h >> c1 >> m >> c2 >> s; - - if (!(is && c1 == ':' && c2 == ':')) - { - return false; - } - if (h == 12) - { - h = 0; - } - - is >> p1 >> p2; - if (is && p1 == 'P' && p2 == 'M') - { - h += 12; - } - - ft = USTimeToFiletime(h, m, s, 0); - return true; -} - -// read localtime in format "hh:mm:ss.ms tt" (AM/PM postfix) -bool USTimeConverter::ReadLocalTimeUSRegionMs(const std::string& text, FILETIME& ft) -{ - std::istringstream is(text); - - WORD h = 0; - WORD m = 0; - WORD s = 0; - WORD ms = 0; - char c1 = 0; - char c2 = 0; - char p1 = 0; - char p2 = 0; - char d1 = 0; - - is >> h >> c1 >> m >> c2 >> s >> d1 >> ms; - if (!(is && c1 == ':' && c2 == ':' && d1 == '.')) - { - return false; - } - if (h == 12) - { - h = 0; - } - - is >> p1 >> p2; - if (is && p1 == 'P' && p2 == 'M') - { - h += 12; - } - - ft = USTimeToFiletime(h, m, s, ms); - return true; -} - -} // namespace debugviewpp -} // namespace fusion +// (C) Copyright Gert-Jan de Vos and Jan Wilmans 2013. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include "Win32/Utilities.h" +#include "Win32/Win32Lib.h" +#include "CobaltFusion/stringbuilder.h" +#include "DebugViewppLib/Conversions.h" + +namespace fusion { +namespace debugviewpp { + +std::string GetTimeText(double time) +{ + return stringbuilder() << std::fixed << std::setprecision(6) << time; +} + +std::string GetDateText(const SYSTEMTIME& st) +{ + int size = GetDateFormatA(LOCALE_USER_DEFAULT, 0, &st, nullptr, nullptr, 0); + std::vector buf(size); + GetDateFormatA(LOCALE_USER_DEFAULT, 0, &st, nullptr, buf.data(), size); + return std::string(buf.data(), size - 1); +} + +std::string GetDateText(const FILETIME& ft) +{ + return GetDateText(Win32::FileTimeToSystemTime(Win32::FileTimeToLocalFileTime(ft))); +} + +std::string GetTimeText(const SYSTEMTIME& st) +{ + char buf[32]; + sprintf_s(buf, "%02d:%02d:%02d.%03d", st.wHour, st.wMinute, st.wSecond, st.wMilliseconds); + return buf; +} + +std::string GetDateTimeText(const FILETIME& filetime) +{ + // convert the FILETIME from UTC to local timezone so the time so written as 'clocktime' + auto st = Win32::FileTimeToSystemTime(Win32::FileTimeToLocalFileTime(filetime)); + char buf[64]; + sprintf_s(buf, "%04d/%02d/%02d %02d:%02d:%02d.%03d", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds); + return buf; +} + +std::string GetTimeText(const FILETIME& ft) +{ + if (ft.dwHighDateTime == 0 && ft.dwLowDateTime == 0) + { + return "0"; // prevent endlessly repeating exception messageboxes when reading a corrupted file + } + return GetTimeText(Win32::FileTimeToSystemTime(Win32::FileTimeToLocalFileTime(ft))); +} + +SYSTEMTIME GetSystemTime(WORD year, WORD month, WORD day) +{ + SYSTEMTIME st = {}; + st.wYear = year; + st.wMonth = month; + st.wDay = day; + return st; +} + +USTimeConverter::USTimeConverter() : + m_lastFileTime(), + m_firstValue(true) +{ +} + +FILETIME USTimeConverter::USTimeToFiletime(WORD h, WORD m, WORD s, WORD /*ms*/) +{ + if (m_firstValue) + { + m_firstValue = false; + auto st = GetSystemTime(2000, 1, 1); + st.wHour = h; + st.wMinute = m; + st.wSecond = s; + st.wMilliseconds = 0; // todo: why is 'ms' not used? + m_lastFileTime = Win32::SystemTimeToFileTime(st); + } + + auto st = Win32::FileTimeToSystemTime(m_lastFileTime); + st.wHour = h; + st.wMinute = m; + st.wSecond = s; + st.wMilliseconds = 0; + auto ft = Win32::SystemTimeToFileTime(st); + + if (ft < m_lastFileTime) // is ft before m_lastFileTime, then assume it is on the next day. + { + st.wDay += 1; + } + m_lastFileTime = Win32::SystemTimeToFileTime(st); + return Win32::LocalFileTimeToFileTime(ft); // convert to UTC +} + +// read localtime in format "hh:mm:ss tt" (AM/PM postfix) +bool USTimeConverter::ReadLocalTimeUSRegion(const std::string& text, FILETIME& ft) +{ + std::istringstream is(text); + WORD h = 0; + WORD m = 0; + WORD s = 0; + char c1 = 0; + char c2 = 0; + char p1 = 0; + char p2 = 0; + is >> h >> c1 >> m >> c2 >> s; + + if (!(is && c1 == ':' && c2 == ':')) + { + return false; + } + if (h == 12) + { + h = 0; + } + + is >> p1 >> p2; + if (is && p1 == 'P' && p2 == 'M') + { + h += 12; + } + + ft = USTimeToFiletime(h, m, s, 0); + return true; +} + +// read localtime in format "hh:mm:ss.ms tt" (AM/PM postfix) +bool USTimeConverter::ReadLocalTimeUSRegionMs(const std::string& text, FILETIME& ft) +{ + std::istringstream is(text); + + WORD h = 0; + WORD m = 0; + WORD s = 0; + WORD ms = 0; + char c1 = 0; + char c2 = 0; + char p1 = 0; + char p2 = 0; + char d1 = 0; + + is >> h >> c1 >> m >> c2 >> s >> d1 >> ms; + if (!(is && c1 == ':' && c2 == ':' && d1 == '.')) + { + return false; + } + if (h == 12) + { + h = 0; + } + + is >> p1 >> p2; + if (is && p1 == 'P' && p2 == 'M') + { + h += 12; + } + + ft = USTimeToFiletime(h, m, s, ms); + return true; +} + +} // namespace debugviewpp +} // namespace fusion diff --git a/application/DebugViewppLib/DbgviewReader.cpp b/application/DebugViewppLib/DbgviewReader.cpp index 29556ae1..46b382ec 100644 --- a/application/DebugViewppLib/DbgviewReader.cpp +++ b/application/DebugViewppLib/DbgviewReader.cpp @@ -1,222 +1,222 @@ -// (C) Copyright Gert-Jan de Vos and Jan Wilmans 2013. -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include "Win32/Win32Lib.h" -#include "CobaltFusion/stringbuilder.h" -#include "DebugViewppLib/PolledLogSource.h" -#include "DebugViewppLib/DbgviewReader.h" -#include "DebugViewppLib/LineBuffer.h" - -#include -#include -#include - -namespace fusion { -namespace debugviewpp { - -const std::string SysinternalsDebugViewAgentPort = "2020"; - -DbgviewReader::DbgviewReader(Timer& timer, ILineBuffer& linebuffer, const std::string& hostname) : - PolledLogSource(timer, SourceType::Pipe, linebuffer, 40), - m_hostname(hostname), - m_thread([this] { Loop(); }) -{ - SetDescription(wstringbuilder() << "Dbgview Agent at " << m_hostname); -} - -std::vector Read(std::stringstream& is, size_t amount) -{ - if (amount < 1) - { - return std::vector(); - } - std::vector buffer(amount); - is.read(reinterpret_cast(buffer.data()), amount); - return buffer; -} - -namespace Magic { -const DWORD ColumnnOneMark = 1; -const DWORD ColumnnTwoMark = 2; -const DWORD Base = 0x83050000; -const DWORD CaptureKernelEnable = Base + 0x00; // 0 -const DWORD CaptureKernelDisable = Base + 0x04; // 1 -const DWORD VerboseKernelMessagesEnable = Base + 0x08; // 2 // Meaning of these 'VerboseKernel' values was never confirmed -const DWORD VerboseKernelMessagesDisable = Base + 0x0C; // 3 // -const DWORD PassThroughDisable = Base + 0x10; // 4 -const DWORD PassThroughEnable = Base + 0x14; // 5 -const DWORD CaptureWin32Enable = Base + 0x18; // 6 -const DWORD CaptureWin32Disable = Base + 0x1c; // 7 -const DWORD Unknown3 = Base + 0x20; // 8 -const DWORD RequestUnknown = Base + 0x24; // 9 // answer: 0x7fffffff -const DWORD RequestQueryPerformanceFrequency = Base + 0x28; // A -const DWORD Unknown4 = Base + 0x2C; -const DWORD Unknown5 = Base + 0x30; -const DWORD ForceCarriageReturnsEnable = Base + 0x34; -const DWORD ForceCarriageReturnsDisable = Base + 0x38; -} // namespace Magic - -template -std::string ToHex(const T& s) -{ - std::ostringstream result; - result << "[" << s.size() << "] "; - - for (size_t i = 0; i < s.size(); ++i) - result << std::hex << std::setfill('0') << std::setw(2) << std::uppercase << (static_cast(s[i]) & 0xff) << " "; - return result.str(); -} - -template -std::string ToChar(const T& s) -{ - std::ostringstream result; - result << "[" << s.size() << "] "; - - for (size_t i = 0; i < s.size(); ++i) - { - if (s[i] > 32) - { - result << std::setfill(' ') << std::setw(2) << static_cast(s[i]) << " "; - } - else - { - result << " . "; - } - } - return result.str(); -} - -void DbgviewReader::SetAutoNewLine(bool value) -{ - LogSource::SetAutoNewLine(value); - // todo: send ForceCarriageReturnsEnable/ForceCarriageReturnsDisable to dbgview-agent -} - -void DbgviewReader::Loop() -{ - SetDescription(wstringbuilder() << "Dbgview Agent at " << m_hostname); - m_iostream.connect(m_hostname, SysinternalsDebugViewAgentPort); - const std::string processName("[tcp]"); - - Write(m_iostream, Magic::RequestQueryPerformanceFrequency); - auto qpFrequency = Read(m_iostream); - long long t0 = 0; - bool first = true; - - if (!m_iostream || qpFrequency == 0) - { - LogSource::Add(stringbuilder() << "Unable to connect to " << GetDescription() << ", " << m_iostream.error().message()); - Signal(); - return; - } - - Write(m_iostream, Magic::CaptureKernelEnable); - Write(m_iostream, Magic::VerboseKernelMessagesEnable); - Write(m_iostream, Magic::CaptureWin32Enable); - Write(m_iostream, Magic::PassThroughEnable); - - if (GetAutoNewLine()) - { - Write(m_iostream, Magic::ForceCarriageReturnsEnable); - } - else - { - Write(m_iostream, Magic::ForceCarriageReturnsDisable); - } - - double timerUnit = 1. / qpFrequency; - AddMessage(stringbuilder() << "Connected to " << GetDescription()); - Signal(); - - while (!AtEnd()) - { - m_iostream.clear(); - auto messageLength = Read(m_iostream); - - if (m_iostream.eof()) - { - AddMessage(stringbuilder() << "Connection to " << GetDescription() << " closed."); - LogSource::Abort(); - Signal(); - break; - } - - if (!m_iostream || messageLength >= 0x7fffffff) - { - AddMessage(0, processName, ""); - Signal(); - break; - } - - if (messageLength == 0) - { // keep alive - continue; - } - - // dont read from the tcp::iostream directly, - // instead use read() to receive the complete message. - // this allows us to use ss.tellg() to determine the amount of trash bytes. - std::vector buffer(messageLength); - m_iostream.read(buffer.data(), messageLength); - std::stringstream ss(std::ios_base::in | std::ios_base::out | std::ios::binary); - ss.write(buffer.data(), buffer.size()); - - DWORD pid = 0; - std::string msg; - for (;;) - { - Read(ss); // lineNr - if (!ss) - { - break; - } - - auto filetime = Read(ss); - auto qpcTime = Read(ss); - if (first) - { - t0 = qpcTime; - first = false; - } - auto time = (qpcTime - t0) * timerUnit; - - if (buffer[20] == Magic::ColumnnOneMark) - { - unsigned char c1 = 0; - unsigned char c2 = 0; - if (!((ss >> c1 >> pid >> c2) && c1 == Magic::ColumnnOneMark && c2 == Magic::ColumnnTwoMark)) - { - AddMessage(0, processName, ""); - break; - } - Read(ss, 1); // discard one leading space - } - - std::getline(ss, msg, '\0'); - msg.push_back('\n'); // newlines are never send as part of the message - AddMessage(time, filetime, pid, processName, msg); - - // strangely, messages are always send in multiples of 4 bytes. - // this means depending on the message length there are 1, 2 or 3 trailing bytes of undefined data. - auto remainder = static_cast(ss.tellg() % 4); - if (remainder > 0) - { - Read(ss, 4 - remainder); - } - } - Signal(); - } -} - -void DbgviewReader::Abort() -{ - m_iostream.close(); - LogSource::Abort(); - m_thread.join(); -} - -} // namespace debugviewpp -} // namespace fusion +// (C) Copyright Gert-Jan de Vos and Jan Wilmans 2013. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include "Win32/Win32Lib.h" +#include "CobaltFusion/stringbuilder.h" +#include "DebugViewppLib/PolledLogSource.h" +#include "DebugViewppLib/DbgviewReader.h" +#include "DebugViewppLib/LineBuffer.h" + +#include +#include +#include + +namespace fusion { +namespace debugviewpp { + +const std::string SysinternalsDebugViewAgentPort = "2020"; + +DbgviewReader::DbgviewReader(Timer& timer, ILineBuffer& linebuffer, const std::string& hostname) : + PolledLogSource(timer, SourceType::Pipe, linebuffer, 40), + m_hostname(hostname), + m_thread([this] { Loop(); }) +{ + SetDescription(wstringbuilder() << "Dbgview Agent at " << m_hostname); +} + +std::vector Read(std::stringstream& is, size_t amount) +{ + if (amount < 1) + { + return std::vector(); + } + std::vector buffer(amount); + is.read(reinterpret_cast(buffer.data()), amount); + return buffer; +} + +namespace Magic { +const DWORD ColumnnOneMark = 1; +const DWORD ColumnnTwoMark = 2; +const DWORD Base = 0x83050000; +const DWORD CaptureKernelEnable = Base + 0x00; // 0 +const DWORD CaptureKernelDisable = Base + 0x04; // 1 +const DWORD VerboseKernelMessagesEnable = Base + 0x08; // 2 // Meaning of these 'VerboseKernel' values was never confirmed +const DWORD VerboseKernelMessagesDisable = Base + 0x0C; // 3 // +const DWORD PassThroughDisable = Base + 0x10; // 4 +const DWORD PassThroughEnable = Base + 0x14; // 5 +const DWORD CaptureWin32Enable = Base + 0x18; // 6 +const DWORD CaptureWin32Disable = Base + 0x1c; // 7 +const DWORD Unknown3 = Base + 0x20; // 8 +const DWORD RequestUnknown = Base + 0x24; // 9 // answer: 0x7fffffff +const DWORD RequestQueryPerformanceFrequency = Base + 0x28; // A +const DWORD Unknown4 = Base + 0x2C; +const DWORD Unknown5 = Base + 0x30; +const DWORD ForceCarriageReturnsEnable = Base + 0x34; +const DWORD ForceCarriageReturnsDisable = Base + 0x38; +} // namespace Magic + +template +std::string ToHex(const T& s) +{ + std::ostringstream result; + result << "[" << s.size() << "] "; + + for (size_t i = 0; i < s.size(); ++i) + result << std::hex << std::setfill('0') << std::setw(2) << std::uppercase << (static_cast(s[i]) & 0xff) << " "; + return result.str(); +} + +template +std::string ToChar(const T& s) +{ + std::ostringstream result; + result << "[" << s.size() << "] "; + + for (size_t i = 0; i < s.size(); ++i) + { + if (s[i] > 32) + { + result << std::setfill(' ') << std::setw(2) << static_cast(s[i]) << " "; + } + else + { + result << " . "; + } + } + return result.str(); +} + +void DbgviewReader::SetAutoNewLine(bool value) +{ + LogSource::SetAutoNewLine(value); + // todo: send ForceCarriageReturnsEnable/ForceCarriageReturnsDisable to dbgview-agent +} + +void DbgviewReader::Loop() +{ + SetDescription(wstringbuilder() << "Dbgview Agent at " << m_hostname); + m_iostream.connect(m_hostname, SysinternalsDebugViewAgentPort); + const std::string processName("[tcp]"); + + Write(m_iostream, Magic::RequestQueryPerformanceFrequency); + auto qpFrequency = Read(m_iostream); + long long t0 = 0; + bool first = true; + + if (!m_iostream || qpFrequency == 0) + { + LogSource::Add(stringbuilder() << "Unable to connect to " << GetDescription() << ", " << m_iostream.error().message()); + Signal(); + return; + } + + Write(m_iostream, Magic::CaptureKernelEnable); + Write(m_iostream, Magic::VerboseKernelMessagesEnable); + Write(m_iostream, Magic::CaptureWin32Enable); + Write(m_iostream, Magic::PassThroughEnable); + + if (GetAutoNewLine()) + { + Write(m_iostream, Magic::ForceCarriageReturnsEnable); + } + else + { + Write(m_iostream, Magic::ForceCarriageReturnsDisable); + } + + double timerUnit = 1. / qpFrequency; + AddMessage(stringbuilder() << "Connected to " << GetDescription()); + Signal(); + + while (!AtEnd()) + { + m_iostream.clear(); + auto messageLength = Read(m_iostream); + + if (m_iostream.eof()) + { + AddMessage(stringbuilder() << "Connection to " << GetDescription() << " closed."); + LogSource::Abort(); + Signal(); + break; + } + + if (!m_iostream || messageLength >= 0x7fffffff) + { + AddMessage(0, processName, ""); + Signal(); + break; + } + + if (messageLength == 0) + { // keep alive + continue; + } + + // dont read from the tcp::iostream directly, + // instead use read() to receive the complete message. + // this allows us to use ss.tellg() to determine the amount of trash bytes. + std::vector buffer(messageLength); + m_iostream.read(buffer.data(), messageLength); + std::stringstream ss(std::ios_base::in | std::ios_base::out | std::ios::binary); + ss.write(buffer.data(), buffer.size()); + + DWORD pid = 0; + std::string msg; + for (;;) + { + Read(ss); // lineNr + if (!ss) + { + break; + } + + auto filetime = Read(ss); + auto qpcTime = Read(ss); + if (first) + { + t0 = qpcTime; + first = false; + } + auto time = (qpcTime - t0) * timerUnit; + + if (buffer[20] == Magic::ColumnnOneMark) + { + unsigned char c1 = 0; + unsigned char c2 = 0; + if (!((ss >> c1 >> pid >> c2) && c1 == Magic::ColumnnOneMark && c2 == Magic::ColumnnTwoMark)) + { + AddMessage(0, processName, ""); + break; + } + Read(ss, 1); // discard one leading space + } + + std::getline(ss, msg, '\0'); + msg.push_back('\n'); // newlines are never send as part of the message + AddMessage(time, filetime, pid, processName, msg); + + // strangely, messages are always send in multiples of 4 bytes. + // this means depending on the message length there are 1, 2 or 3 trailing bytes of undefined data. + auto remainder = static_cast(ss.tellg() % 4); + if (remainder > 0) + { + Read(ss, 4 - remainder); + } + } + Signal(); + } +} + +void DbgviewReader::Abort() +{ + m_iostream.close(); + LogSource::Abort(); + m_thread.join(); +} + +} // namespace debugviewpp +} // namespace fusion diff --git a/application/DebugViewppLib/NewlineFilter.cpp b/application/DebugViewppLib/NewlineFilter.cpp index b26370b6..025ec79b 100644 --- a/application/DebugViewppLib/NewlineFilter.cpp +++ b/application/DebugViewppLib/NewlineFilter.cpp @@ -1,68 +1,68 @@ -// (C) Copyright Gert-Jan de Vos and Jan Wilmans 2013. -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include "CobaltFusion/stringbuilder.h" -#include "DebugViewppLib/LogSource.h" -#include "DebugViewppLib/ProcessInfo.h" -#include "DebugViewppLib/NewlineFilter.h" -#include - -namespace fusion { -namespace debugviewpp { - -Lines NewlineFilter::Process(const Line& line) -{ - auto& message = m_lineBuffers[line.pid]; - message.reserve(512); - - Lines lines; - for (auto c : line.message) - { - if (c == '\r') - { - continue; - } - - if (c == '\n') - { - Line outputLine(line.time, line.systemTime, line.pid, line.processName, "", line.pLogSource); - std::swap(outputLine.message, message); - lines.emplace_back(std::move(outputLine)); - } - else - { - message.push_back(c); - } - } - - if (!message.empty()) - { - if (line.pLogSource->GetAutoNewLine() || message.size() > 8192) // 8k line limit prevents stack overflow in handling code - { - Line outputLine(line.time, line.systemTime, line.pid, line.processName, "", line.pLogSource); - std::swap(outputLine.message, message); - lines.emplace_back(std::move(outputLine)); - } - } - return lines; -} - -Lines NewlineFilter::FlushLinesFromTerminatedProcess(DWORD pid, HANDLE /*handle*/) // todo: why is handle unused? -{ - Lines lines; - if (m_lineBuffers.find(pid) != m_lineBuffers.end()) - { - if (!m_lineBuffers[pid].empty()) - { - // timestamp not filled, this will be done by the loopback source - lines.push_back(Line(0, FILETIME(), pid, "", m_lineBuffers[pid], nullptr)); - } - m_lineBuffers.erase(pid); - } - return lines; -} - -} // namespace debugviewpp -} // namespace fusion +// (C) Copyright Gert-Jan de Vos and Jan Wilmans 2013. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include "CobaltFusion/stringbuilder.h" +#include "DebugViewppLib/LogSource.h" +#include "DebugViewppLib/ProcessInfo.h" +#include "DebugViewppLib/NewlineFilter.h" +#include + +namespace fusion { +namespace debugviewpp { + +Lines NewlineFilter::Process(const Line& line) +{ + auto& message = m_lineBuffers[line.pid]; + message.reserve(512); + + Lines lines; + for (auto c : line.message) + { + if (c == '\r') + { + continue; + } + + if (c == '\n') + { + Line outputLine(line.time, line.systemTime, line.pid, line.processName, "", line.pLogSource); + std::swap(outputLine.message, message); + lines.emplace_back(std::move(outputLine)); + } + else + { + message.push_back(c); + } + } + + if (!message.empty()) + { + if (line.pLogSource->GetAutoNewLine() || message.size() > 8192) // 8k line limit prevents stack overflow in handling code + { + Line outputLine(line.time, line.systemTime, line.pid, line.processName, "", line.pLogSource); + std::swap(outputLine.message, message); + lines.emplace_back(std::move(outputLine)); + } + } + return lines; +} + +Lines NewlineFilter::FlushLinesFromTerminatedProcess(DWORD pid, HANDLE /*handle*/) // todo: why is handle unused? +{ + Lines lines; + if (m_lineBuffers.find(pid) != m_lineBuffers.end()) + { + if (!m_lineBuffers[pid].empty()) + { + // timestamp not filled, this will be done by the loopback source + lines.push_back(Line(0, FILETIME(), pid, "", m_lineBuffers[pid], nullptr)); + } + m_lineBuffers.erase(pid); + } + return lines; +} + +} // namespace debugviewpp +} // namespace fusion diff --git a/application/DebugViewppLib/SocketReader.cpp b/application/DebugViewppLib/SocketReader.cpp index 8b97e506..2df5a94c 100644 --- a/application/DebugViewppLib/SocketReader.cpp +++ b/application/DebugViewppLib/SocketReader.cpp @@ -1,94 +1,94 @@ -// (C) Copyright Gert-Jan de Vos and Jan Wilmans 2013. -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include -#include "CobaltFusion/stringbuilder.h" -#include "DebugViewppLib/SocketReader.h" - -namespace fusion { -namespace debugviewpp { - -SocketReader::SocketReader(Timer& timer, ILineBuffer& lineBuffer, int port) : - LogSource(timer, SourceType::Udp, lineBuffer), - m_wsa(2, 2), - m_socket(Win32::WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, nullptr, 0, WSA_FLAG_OVERLAPPED)), - m_event(Win32::CreateEvent(nullptr, false, true, nullptr)), - m_fromLen(0), - m_busy(false) -{ - SetDescription(wstringbuilder() << L"Listening at UDP port " << port); - - m_overlapped.hEvent = m_event.get(); - m_wsaBuf[0].len = static_cast(m_buffer.size()); - m_wsaBuf[0].buf = m_buffer.data(); - - sockaddr_in sa; - sa.sin_family = AF_INET; - sa.sin_addr.s_addr = htonl(INADDR_ANY); - sa.sin_port = htons(u_short(port)); - Win32::bind(m_socket, sa); -} - -HANDLE SocketReader::GetHandle() const -{ - return m_event.get(); -} - -std::string bufferToString(const char* buffer, int size) -{ - size_t length = strnlen(buffer, size); - return std::string(buffer, length); -} - -void SocketReader::Notify() -{ - if (m_busy) - { - int len = CompleteReceive(); - Add(0, GetProcessText(), bufferToString(m_buffer.data(), len)); - } - - for (;;) - { - int len = BeginReceive(); - if (len < 0) - { - return; - } - Add(0, GetProcessText(), bufferToString(m_buffer.data(), len)); - } -} - -int SocketReader::BeginReceive() -{ - assert(!m_busy); - DWORD count; - DWORD flags = 0; - m_fromLen = sizeof(m_from); - if (Win32::WSARecvFrom(m_socket, m_wsaBuf, 1, &count, &flags, m_from, m_fromLen, &m_overlapped, nullptr)) - { - return count; - } - - m_busy = true; - return -1; -} - -int SocketReader::CompleteReceive() -{ - assert(m_busy); - DWORD flags = 0; - auto count = Win32::WSAGetOverlappedResult(m_socket, m_overlapped, false, flags); - m_busy = false; - return count; -} - -std::string SocketReader::GetProcessText() const -{ - return stringbuilder() << "[UDP " << inet_ntoa(m_from.sin_addr) << ":" << ntohs(m_from.sin_port) << "]"; -} - -} // namespace debugviewpp -} // namespace fusion +// (C) Copyright Gert-Jan de Vos and Jan Wilmans 2013. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include "CobaltFusion/stringbuilder.h" +#include "DebugViewppLib/SocketReader.h" + +namespace fusion { +namespace debugviewpp { + +SocketReader::SocketReader(Timer& timer, ILineBuffer& lineBuffer, int port) : + LogSource(timer, SourceType::Udp, lineBuffer), + m_wsa(2, 2), + m_socket(Win32::WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, nullptr, 0, WSA_FLAG_OVERLAPPED)), + m_event(Win32::CreateEvent(nullptr, false, true, nullptr)), + m_fromLen(0), + m_busy(false) +{ + SetDescription(wstringbuilder() << L"Listening at UDP port " << port); + + m_overlapped.hEvent = m_event.get(); + m_wsaBuf[0].len = static_cast(m_buffer.size()); + m_wsaBuf[0].buf = m_buffer.data(); + + sockaddr_in sa; + sa.sin_family = AF_INET; + sa.sin_addr.s_addr = htonl(INADDR_ANY); + sa.sin_port = htons(u_short(port)); + Win32::bind(m_socket, sa); +} + +HANDLE SocketReader::GetHandle() const +{ + return m_event.get(); +} + +std::string bufferToString(const char* buffer, int size) +{ + size_t length = strnlen(buffer, size); + return std::string(buffer, length); +} + +void SocketReader::Notify() +{ + if (m_busy) + { + int len = CompleteReceive(); + Add(0, GetProcessText(), bufferToString(m_buffer.data(), len)); + } + + for (;;) + { + int len = BeginReceive(); + if (len < 0) + { + return; + } + Add(0, GetProcessText(), bufferToString(m_buffer.data(), len)); + } +} + +int SocketReader::BeginReceive() +{ + assert(!m_busy); + DWORD count; + DWORD flags = 0; + m_fromLen = sizeof(m_from); + if (Win32::WSARecvFrom(m_socket, m_wsaBuf, 1, &count, &flags, m_from, m_fromLen, &m_overlapped, nullptr)) + { + return count; + } + + m_busy = true; + return -1; +} + +int SocketReader::CompleteReceive() +{ + assert(m_busy); + DWORD flags = 0; + auto count = Win32::WSAGetOverlappedResult(m_socket, m_overlapped, false, flags); + m_busy = false; + return count; +} + +std::string SocketReader::GetProcessText() const +{ + return stringbuilder() << "[UDP " << inet_ntoa(m_from.sin_addr) << ":" << ntohs(m_from.sin_port) << "]"; +} + +} // namespace debugviewpp +} // namespace fusion diff --git a/application/DebugViewppTest/DebugView++Test.cpp b/application/DebugViewppTest/DebugView++Test.cpp index 2b5a6592..1ff29635 100644 --- a/application/DebugViewppTest/DebugView++Test.cpp +++ b/application/DebugViewppTest/DebugView++Test.cpp @@ -1,762 +1,762 @@ -// (C) Copyright Gert-Jan de Vos and Jan Wilmans 2013. -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define BOOST_TEST_MODULE DebugView++ Lib Unit Test - -#include - -#include -#include -#include -#include - -#include "Win32/Utilities.h" -#include "Win32/Win32Lib.h" -#include "CobaltFusion/stringbuilder.h" -#include "CobaltFusion/ExecutorClient.h" -#include "CobaltFusion/Executor.h" -#include "IndexedStorageLib/IndexedStorage.h" -#include "DebugViewppLib/ProcessInfo.h" -#include "DebugViewppLib/DBWinBuffer.h" -#include "DebugViewppLib/LogSources.h" -#include "DebugViewppLib/LogSource.h" -#include "DebugViewppLib/TestSource.h" -#include "DebugViewppLib/VectorLineBuffer.h" -#include "DebugViewppLib/LogFile.h" -#include "DebugViewppLib/FileIO.h" -#include "DebugViewppLib/Conversions.h" -#include "CobaltFusion/scope_guard.h" - -namespace fusion { -namespace debugviewpp { - -BOOST_AUTO_TEST_SUITE(DebugViewPlusPlusLib) - -std::string GetTestString(size_t i) -{ - return stringbuilder() << "BB_TEST_ABCDEFGHI_EE_" << i; -} - -class TestLineBuffer : public LineBuffer -{ -public: - TestLineBuffer(size_t size) : - LineBuffer(size) - { - } - - virtual ~TestLineBuffer() = default; - - virtual void WaitForReaderTimeout() - { - throw std::exception("WaitForReader timeout"); - } -}; - - -class ScopedTimezoneBias -{ -public: - ScopedTimezoneBias(LONG Bias) - { - Win32::SetPrivilege(SE_TIME_ZONE_NAME, true); - GetTimeZoneInformation(&m_tz); - TIME_ZONE_INFORMATION tz = m_tz; - tz.Bias = Bias; - SetTimeZoneInformation(&tz); - } - - ~ScopedTimezoneBias() - { - SetTimeZoneInformation(&m_tz); - Win32::SetPrivilege(SE_TIME_ZONE_NAME, false); - } - -private: - TIME_ZONE_INFORMATION m_tz; -}; - -std::string GetTestFileName() -{ - using namespace std::filesystem; - return absolute(path("SaveLoadLogFile_unique_test_filename")).string(); -} - -std::string SaveLogFile(const LogFile& logfile) -{ - auto filename = GetTestFileName(); - std::ofstream fs; - OpenLogFile(fs, WStr(filename), OpenMode::Truncate); - const int count = logfile.Count(); - for (int i = 0; i < count; ++i) - { - auto msg = logfile[i]; - WriteLogFileMessage(fs, msg.time, msg.systemTime, msg.processId, msg.processName, msg.text); - } - fs.close(); - return filename; -} - -std::string AppendLogFile(const LogFile& logfile) -{ - auto filename = GetTestFileName(); - std::ofstream fs; - OpenLogFile(fs, WStr(filename), OpenMode::Append); - int count = logfile.Count(); - for (int i = 0; i < count; ++i) - { - auto msg = logfile[i]; - WriteLogFileMessage(fs, msg.time, msg.systemTime, msg.processId, msg.processName, msg.text); - } - fs.close(); - return filename; -} - -LogFile LoadLogFile(const std::string& filename) -{ - // load file test - std::ifstream file(filename); - Line line; - line.processName = "process"; - line.systemTime = Win32::GetSystemTimeAsFileTime(); - LogFile result; - ReadLogFileMessage(file, line); // ignore header - while (ReadLogFileMessage(file, line)) - result.Add(Message(line.time, line.systemTime, line.pid, line.processName, line.message)); - return result; -} - -bool AreEqual(const Message& a, const Message& b) -{ - if (std::fabs(a.time - b.time) > 0.000001) - return false; - if (GetTimeText(a.systemTime) != GetTimeText(b.systemTime)) - return false; - if (a.processId != b.processId) - return false; - if (a.processName != b.processName) - return false; - if (a.text != b.text) - return false; - // if (a.color != b.color) return false; // not stored in file - return true; -} - -bool AreEqual(const LogFile& a, const LogFile& b) -{ - if (a.Count() != b.Count()) - return false; - int count = a.Count(); - for (int i = 0; i < count; ++i) - { - if (!AreEqual(a[i], b[i])) - return false; - } - return true; -} - -BOOST_AUTO_TEST_CASE(TimeZone) -{ - Timer timer; - LogFile logFile; - auto t1 = Win32::GetSystemTimeAsFileTime(); - logFile.Add(Message(timer.Get(), t1, 0, "processname", "test message 1")); - auto t2 = Win32::GetSystemTimeAsFileTime(); - logFile.Add(Message(timer.Get(), t2, 0, "processname", "test message 2")); - auto t3 = Win32::GetSystemTimeAsFileTime(); - logFile.Add(Message(timer.Get(), t3, 0, "processname", "test message 3")); - auto t4 = Win32::GetSystemTimeAsFileTime(); - logFile.Add(Message(0, t4, 0, "processname", "message 4 (zero time message)")); - - BOOST_TEST_MESSAGE("UTC"); - { - ScopedTimezoneBias(0); - auto result = LoadLogFile(SaveLogFile(logFile)); - BOOST_TEST(AreEqual(result, logFile)); - } - BOOST_TEST_MESSAGE("(UTC-8) Fremond"); - { - ScopedTimezoneBias(-480); - auto result = LoadLogFile(SaveLogFile(logFile)); - BOOST_TEST(AreEqual(result, logFile)); - } - BOOST_TEST_MESSAGE("(UTC+8:30) Pyongyang Standard Time"); - { - ScopedTimezoneBias(+510); - auto result = LoadLogFile(SaveLogFile(logFile)); - BOOST_TEST(AreEqual(result, logFile)); - } - BOOST_TEST_MESSAGE("test boundry case (UTC-12) Baker- / Howland Island (uninhabited islands belonging to the United States)"); - { - ScopedTimezoneBias(-720); - auto result = LoadLogFile(SaveLogFile(logFile)); - BOOST_TEST(AreEqual(result, logFile)); - } - BOOST_TEST_MESSAGE("test boundry case (UTC+14) Kiritimati (Christmas Island, also uninhabited, part of the Kiribati Line Islands)"); - { - ScopedTimezoneBias(+720); - auto result = LoadLogFile(SaveLogFile(logFile)); - BOOST_TEST(AreEqual(result, logFile)); - } - - // test crossing timezones - BOOST_TEST_MESSAGE("test sending a logfile into the past (UTC -> UTC-8)"); - { - auto filename = SaveLogFile(logFile); - ScopedTimezoneBias(-480); - auto result = LoadLogFile(filename); - BOOST_TEST(AreEqual(result, logFile)); - } - - // test crossing timezones - BOOST_TEST_MESSAGE("test sending a logfile into the future (UTC-8 -> UTC)"); - { - std::string filename; - { - ScopedTimezoneBias(-480); - filename = SaveLogFile(logFile); - } - auto result = LoadLogFile(filename); - BOOST_TEST(AreEqual(result, logFile)); - } -} - -BOOST_AUTO_TEST_CASE(HandleTest) -{ - static const HANDLE nullHandle = nullptr; - - HANDLE rawHandle = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, GetCurrentProcessId()); - Win32::Handle handle(rawHandle); - { - BOOST_TEST(handle.get() == rawHandle); - Win32::Handle handle1(std::move(handle)); - BOOST_TEST(handle.get() == nullHandle); - BOOST_TEST(handle1.get() == rawHandle); - { - Win32::Handle handle2(std::move(handle1)); - handle2.release(); - BOOST_TEST(handle2.get() == nullHandle); - } - BOOST_TEST(handle1.get() == nullHandle); - } - - { - Win32::Handle handle1; - { - HANDLE zero = nullptr; - Win32::Handle zeroHandle(zero); - BOOST_TEST(zeroHandle.get() == nullHandle); - handle1 = std::move(zeroHandle); - BOOST_TEST(zeroHandle.get() == nullHandle); - BOOST_TEST(handle1.get() == nullHandle); - } - // this scope ensures having a Handle leave scope that had its guts ripped out by std::move - // will not cause nullpointers or exeptions - } -} - -BOOST_AUTO_TEST_CASE(LineBufferTest1) -{ - TestLineBuffer buffer(64); - FILETIME ft; - ft.dwLowDateTime = 42; - ft.dwHighDateTime = 43; - buffer.Add(42.0, ft, nullptr, "test", nullptr); - - auto lines = buffer.GetLines(); - auto& line = lines[0]; - BOOST_TEST(line.time == 42.0); - BOOST_TEST(line.systemTime.dwLowDateTime == DWORD(42)); - BOOST_TEST(line.systemTime.dwHighDateTime == DWORD(43)); - BOOST_TEST(buffer.Empty()); -} - -BOOST_AUTO_TEST_CASE(LineBufferTest2) // test overflows boosttestui with log-output locking its GUI up temporarily -{ - TestLineBuffer buffer(600); - Timer timer; - std::cout << "LineBufferTest2 running..." << std::endl; - for (int j = 0; j < 100; ++j) - { - // BOOST_TEST_MESSAGE("j: " << j << "\n"); - - for (int i = 0; i < 17; ++i) - { - // BOOST_TEST_MESSAGE("i: " << i << "\n"); - FILETIME ft; - ft.dwLowDateTime = 43; - ft.dwHighDateTime = 44; - buffer.Add(42.0, ft, nullptr, "test", nullptr); - } - - auto lines = buffer.GetLines(); - BOOST_TEST(lines.size() == 17); - for (auto& line : lines) - { - BOOST_TEST(line.time == 42.0); - BOOST_TEST(line.systemTime.dwLowDateTime == DWORD(43)); - BOOST_TEST(line.systemTime.dwHighDateTime == DWORD(44)); - } - } -} - -BOOST_AUTO_TEST_CASE(IndexedStorageRandomAccess) -{ - using namespace indexedstorage; - - size_t testSize = 10000; - auto testMax = testSize - 1; - - std::mt19937 generator; - std::uniform_int_distribution distribution(0, testMax); - SnappyStorage s; - for (size_t i = 0; i < testSize; ++i) - s.Add(GetTestString(i)); - - // random access can be somewhat slow in debug-mode, this is expected behaviour - bool failed = false; - for (size_t i = 0; i < testSize / 10; ++i) - { - size_t j = distribution(generator); // generates number in the range 0..testMax - if (s[j] != GetTestString(j)) - { - failed = true; - break; - }; - } - BOOST_TEST(!failed); -} - -BOOST_AUTO_TEST_CASE(IndexedStorageCompression) -{ - using namespace indexedstorage; - - // the memory allocator will mess up test results is < 64 kb is allocated - // make sure SnappyStorage allocates at least ~500kb for reproducable results - - // this test is indicative only, on average the SnappyStorage should allocate at most 50% of memory compared to a normal vector. - // since GetTestString returns an overly simpe-to-compress string, it will appear to perform insanely good. - - size_t testSize = 100000; - VectorStorage v; - SnappyStorage s; - - size_t m0 = ProcessInfo::GetPrivateBytes(); - - for (size_t i = 0; i < testSize; ++i) - v.Add(GetTestString(i)); - - size_t m1 = ProcessInfo::GetPrivateBytes(); - size_t usedByVector = m1 - m0; - BOOST_TEST_MESSAGE("VectorStorage requires: " << usedByVector / 1024 << " kB"); - - for (size_t i = 0; i < testSize; ++i) - s.Add(GetTestString(i)); - - size_t m2 = ProcessInfo::GetPrivateBytes(); - size_t usedBySnappy = m2 - m1; - - BOOST_TEST_MESSAGE("SnappyStorage requires: " << usedBySnappy / 1024 << " kB (" << (100 * usedBySnappy) / usedByVector << "%)"); - BOOST_TEST(size_t(0.50 * usedByVector) > usedBySnappy); -} - -// execute as: -// "DebugView++Test.exe" --log_level=test_suite --run_test=*/LogSourcesReceiveMessages -BOOST_AUTO_TEST_CASE(LogSourcesReceiveMessages) -{ - ActiveExecutorClient executor; - LogSources logsources(executor, false); - LogSource* logsource; - executor.Call([&] { logsource = logsources.AddTestSource(); }); - - Timer timer; - logsource->Add(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "message 1"); - logsource->Add(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "message 2"); - logsource->Add(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "message 3"); - BOOST_TEST_MESSAGE("3 lines added."); - - Lines lines; - executor.Call([&] { lines = logsources.GetLines(); }); - BOOST_TEST_MESSAGE("received: " << lines.size() << " lines."); - - BOOST_TEST(lines.size() == 3); - - for (auto& line : lines) - { - BOOST_TEST_MESSAGE("line: " << line.message); - } - - const int testsize = 1000; - BOOST_TEST_MESSAGE("Write " << testsize << " lines..."); - for (int i = 0; i < testsize; ++i) - { - logsource->Add(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "TESTSTRING 1234\n"); - } - - Lines morelines; - executor.Call([&] { morelines = logsources.GetLines(); }); - - BOOST_TEST_MESSAGE("received: " << morelines.size() << " lines."); - BOOST_TEST(morelines.size() == testsize); -} - -BOOST_AUTO_TEST_CASE(LogSourcesCharacterPreservation) -{ - ActiveExecutorClient executor; - LogSources logsources(executor, false); - LogSource* logsource; - executor.Call([&] { logsource = logsources.AddTestSource(); }); - - Timer timer; - logsource->Add(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "TrailingSpace "); - logsource->Add(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "TrailingTab\t"); - - Lines lines; - executor.Call([&] { lines = logsources.GetLines(); }); - BOOST_TEST(lines.size() == 2); - BOOST_TEST(lines[0].message == "TrailingSpace "); // space preserved - BOOST_TEST(lines[1].message == "TrailingTab\t"); // tab preserved -} - -BOOST_AUTO_TEST_CASE(LogSourcesTabHandling) -{ - ActiveExecutorClient executor; - LogSources logsources(executor, false); - LogSource* logsource; - executor.Call([&] { logsource = logsources.AddTestSource(); }); - - Timer timer; - logsource->Add(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "\tTabPrefix"); - logsource->Add(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "\t\tTwoTabsPrefixed"); - - Lines lines; - executor.Call([&] { lines = logsources.GetLines(); }); - BOOST_TEST(lines.size() == 2); - BOOST_TEST(lines[0].message == "\tTabPrefix"); // space preserved - BOOST_TEST(lines[1].message == "\t\tTwoTabsPrefixed"); // space preserved -} - -BOOST_AUTO_TEST_CASE(LogSourcesNewLineHandling) -{ - ActiveExecutorClient executor; - LogSources logsources(executor, false); - LogSource* logsource; - executor.Call([&] { logsource = logsources.AddTestSource(); }); - - Timer timer; - logsource->Add(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "NewLinePostfix\n"); - logsource->Add(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "NewLineCarriageReturnPostfix\n\r"); - logsource->Add(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "CarriageReturnNewLinePostfix\r\n"); - - Lines lines; - executor.Call([&] { lines = logsources.GetLines(); }); - BOOST_TEST(lines.size() == 3); - BOOST_TEST(lines[0].message == "NewLinePostfix"); - BOOST_TEST(lines[1].message == "NewLineCarriageReturnPostfix"); - BOOST_TEST(lines[2].message == "CarriageReturnNewLinePostfix"); -} - -std::wstring GetExecutePath() -{ - auto path = absolute(std::filesystem::path(Win32::GetCommandLineArguments()[0])); - return path.remove_filename().c_str(); -} - -BOOST_AUTO_TEST_CASE(LogSourceLoopback) -{ - using namespace std::chrono_literals; - - Lines lines; - auto executor = std::make_unique(); - { - LogSources logsources(*executor, true); - executor->Call([&] { logsources.AddDBWinReader(false); }); - executor->Call([&] { logsources.AddTestSource(); }); - executor->Call([&] { logsources.SetAutoNewLine(true); }); - - executor->Call([&] { logsources.AddMessage("Test message 1"); }); - executor->Call([&] { logsources.AddMessage("Test message 2"); }); - std::this_thread::sleep_for(200ms); - executor->Call([&] { lines = logsources.GetLines(); }); - - // Abort will remove the source and no messages can be received from remove sources - executor->Call([&] { logsources.Abort(); }); - } - executor.reset(); - - BOOST_TEST(lines.size() == 2); -} - -BOOST_AUTO_TEST_CASE(LogSourceDBWinReader) -{ - using namespace std::chrono_literals; - - std::string dbgMsgSrc = stringbuilder() << GetExecutePath() << "\\DbgMsgSrc.exe"; - BOOST_TEST(FileExists(dbgMsgSrc.c_str())); - std::string cmd = stringbuilder() << dbgMsgSrc << " -n"; - auto executor = std::make_unique(); - Lines lines; - { - LogSources logsources(*executor, true); - executor->Call([&] { logsources.SetAutoNewLine(true); }); - executor->Call([&] { logsources.AddDBWinReader(false); }); - system(cmd.c_str()); - executor->Call([&] { logsources.Abort(); }); - executor->Call([&] { lines = logsources.GetLines(); }); - } - executor.reset(); - - BOOST_TEST(lines.size() == 1); -} - -std::string CreateTestFile() -{ - Timer timer; - LogFile logFile; - logFile.Add(Message(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "test message 1")); - logFile.Add(Message(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "test message 2")); - logFile.Add(Message(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "test message 3")); - logFile.Add(Message(0, Win32::GetSystemTimeAsFileTime(), 0, "processname", "message 4 (zero time message)")); - return SaveLogFile(logFile); -} - -std::string AppendToTestFile() -{ - Timer timer; - LogFile logFile; - logFile.Add(Message(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "test message appended")); - return AppendLogFile(logFile); -} - -std::vector GetNewLineOffsets(const std::string& filename) -{ - std::vector result; - std::ifstream file(filename); - Line line; - while (ReadLogFileMessage(file, line)) - result.push_back(static_cast(file.tellg())); - return result; -} - -void RemoveLinesFromFile(const std::string& filename, int linesToRemove) -{ - auto offsets = GetNewLineOffsets(filename); - auto offset = offsets[offsets.size() - 1 - linesToRemove]; - Win32::HFile(GetTestFileName()).resize(offset); -} - -BOOST_AUTO_TEST_CASE(LogSourceAnyFileReader) -{ - using namespace std::chrono_literals; - auto executor = std::make_unique(); - LogSources logsources(*executor, true); - auto filename = CreateTestFile(); - executor->Call([&] { logsources.SetAutoNewLine(true); }); - executor->Call([&] { logsources.AddAnyFileReader(WStr(filename), true); }); - std::this_thread::sleep_for(200ms); - - Lines lines; - executor->Call([&] { lines = logsources.GetLines(); }); - BOOST_TEST(lines.size() == 5); -} - -BOOST_AUTO_TEST_CASE(LogSourceAnyFileReaderResychronizeShrinkingFile) -{ - using namespace std::chrono_literals; - auto executor = std::make_unique(); - LogSources logsources(*executor, true); - auto filename = CreateTestFile(); - executor->Call([&] { logsources.SetAutoNewLine(true); }); - executor->Call([&] { logsources.AddAnyFileReader(WStr(filename), true); }); - std::this_thread::sleep_for(200ms); - - Lines lines; - executor->Call([&] { lines = logsources.GetLines(); }); - BOOST_TEST(lines.size() == 5); - - RemoveLinesFromFile(GetTestFileName(), 2); - AppendToTestFile(); - AppendToTestFile(); - AppendToTestFile(); - - std::this_thread::sleep_for(200ms); - executor->Call([&] { lines = logsources.GetLines(); }); - BOOST_TEST(lines.size() == 4); -} - -std::string GetTestFileAsString() -{ - std::ifstream file(GetTestFileName()); - std::stringstream ss; - ss << file.rdbuf(); - return ss.str(); -} - -BOOST_AUTO_TEST_CASE(LogSourceAnyFileReaderRewriteByteByByte) -{ - using namespace std::chrono_literals; - auto executor = std::make_unique(); - LogSources logsources(*executor, true); - auto filename = CreateTestFile(); - executor->Call([&] { logsources.SetAutoNewLine(true); }); - executor->Call([&] { logsources.AddAnyFileReader(WStr(filename), true); }); - std::this_thread::sleep_for(200ms); - - { - Lines lines; - executor->Call([&] { lines = logsources.GetLines(); }); - BOOST_TEST(lines.size() == 5); - } - auto content = GetTestFileAsString(); - - { - std::ofstream fs; - fs.open(GetTestFileName(), std::ofstream::trunc); - fs.close(); - } - std::this_thread::sleep_for(100ms); - for (char c : content) - { - std::ofstream fs; - fs.open(GetTestFileName(), std::ofstream::app); - fs << c; - // just flushing the fstream doesn't force a trigger of Find....ChangeNotification, but closing the fstream does the trick - fs.flush(); - fs.close(); - Sleep(20); - } - - std::this_thread::sleep_for(200ms); - Lines lines; - executor->Call([&] { lines = logsources.GetLines(); }); - for (auto& line : lines) - { - BOOST_TEST(line.message.find("xception") == std::string::npos); - // std::cout << line.message << std::endl; - } - BOOST_TEST(lines.size() == 6); - BOOST_TEST(lines.at(0).message.back() == '0'); // line ends in '...offset 0' - BOOST_TEST(lines.at(1).message == "File Identification Header, DebugView++ Format Version 1"); - BOOST_TEST(lines.at(2).message == "test message 1"); - BOOST_TEST(lines.at(3).message == "test message 2"); - BOOST_TEST(lines.at(4).message == "test message 3"); - BOOST_TEST(lines.at(5).message == "message 4 (zero time message)"); -} - -std::string CreateAsciiTestFile() -{ - auto filename = GetTestFileName(); - std::ofstream fs; - fs.open(filename, std::ofstream::trunc); - fs << "This is the first line\n"; - fs << "\n"; // empty line - fs << "This is the last line\n"; - return filename; -} - -BOOST_AUTO_TEST_CASE(LogSourceAnyFileReaderEmptyLines) -{ - using namespace std::chrono_literals; - auto executor = std::make_unique(); - LogSources logsources(*executor, true); - auto filename = CreateAsciiTestFile(); - executor->Call([&] { logsources.SetAutoNewLine(true); }); - executor->Call([&] { logsources.AddAnyFileReader(WStr(filename), true); }); - std::this_thread::sleep_for(200ms); - - { - Lines lines; - executor->Call([&] { lines = logsources.GetLines(); }); - BOOST_TEST(lines.size() == 4); - BOOST_TEST(lines.at(0).message.find("tailing") != std::string::npos); - BOOST_TEST(lines.at(1).message.find("first") != std::string::npos); - BOOST_TEST(lines.at(2).message == "", "The expected newline is gone!"); - BOOST_TEST(lines.at(3).message.find("last") != std::string::npos); - for (auto& line : lines) - { - BOOST_TEST(line.message.find("xception") == std::string::npos); - std::cout << line.message << std::endl; - } - } -} - -BOOST_AUTO_TEST_CASE(LogSourceLoopbackOrdering) -{ - using namespace std::chrono_literals; - auto executor = std::make_unique(); - LogSources logsources(*executor, true); - auto filename = CreateAsciiTestFile(); - executor->Call([&] { logsources.SetAutoNewLine(true); }); - executor->Call([&] { logsources.AddMessage("Loopback message 1"); }); - executor->Call([&] { logsources.AddMessage("Loopback message 2"); }); - executor->Call([&] { logsources.AddMessage("Loopback message 3"); }); - executor->Call([&] { logsources.AddAnyFileReader(WStr(filename), true); }); - std::this_thread::sleep_for(200ms); - Lines lines; - executor->Call([&] { lines = logsources.GetLines(); }); - - BOOST_TEST(lines.at(0).message == "Loopback message 1"); - BOOST_TEST(lines.at(1).message == "Loopback message 2"); - BOOST_TEST(lines.at(2).message == "Loopback message 3"); - BOOST_TEST(lines.at(3).message.find("tailing") != std::string::npos); - BOOST_TEST(lines.at(4).message.find("first") != std::string::npos); - BOOST_TEST(lines.at(5).message == "", "The expected newline is gone!"); - BOOST_TEST(lines.at(6).message.find("last") != std::string::npos); - for (auto& line : lines) - { - std::cout << line.message << std::endl; - } -} - -#pragma warning(disable : 4996) - -#ifndef _HAS_CXX17 - -std::string CreateUTF16LETestFile(int linecount) -{ - auto filename = GetTestFileName(); - std::wfstream fs; - fs.imbue(std::locale(fs.getloc(), new std::codecvt_utf16)); - fs.open(filename, std::ios::binary | std::ios::trunc | std::ios::in | std::ios::out); - for (int i = 0; i < linecount; ++i) - { - fs << "This is line number [" << i + 1 << "]\n"; - } - fs.close(); - return filename; -} - -BOOST_AUTO_TEST_CASE(LoadUTF16LE) -{ - using namespace std::chrono_literals; - auto executor = std::make_unique(); - LogSources logsources(*executor, true); - int lineCount = 65000; - auto filename = CreateUTF16LETestFile(lineCount); - executor->Call([&] { logsources.SetAutoNewLine(true); }); - executor->Call([&] { logsources.AddAnyFileReader(WStr(filename), true); }); - - // assumption: should be done in 4 seconds, even in debug mode - size_t totalLines = 0; - for (int i = 0; i < 20; ++i) - { - std::this_thread::sleep_for(200ms); - Lines lines; - executor->Call([&] { lines = logsources.GetLines(); }); - totalLines += lines.size(); - } - - // (lineCount + 1) because the first line looks like: "Started tailing ....txt identified as '...' - BOOST_TEST(totalLines == (lineCount + 1)); -} - -#endif - -// add test simulating MFC application behaviour (pressing pause/unpause lots of times during significant incomming messages) - -BOOST_AUTO_TEST_SUITE_END() - -} // namespace debugviewpp -} // namespace fusion +// (C) Copyright Gert-Jan de Vos and Jan Wilmans 2013. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#define BOOST_TEST_MODULE DebugView++ Lib Unit Test + +#include + +#include +#include +#include +#include + +#include "Win32/Utilities.h" +#include "Win32/Win32Lib.h" +#include "CobaltFusion/stringbuilder.h" +#include "CobaltFusion/ExecutorClient.h" +#include "CobaltFusion/Executor.h" +#include "IndexedStorageLib/IndexedStorage.h" +#include "DebugViewppLib/ProcessInfo.h" +#include "DebugViewppLib/DBWinBuffer.h" +#include "DebugViewppLib/LogSources.h" +#include "DebugViewppLib/LogSource.h" +#include "DebugViewppLib/TestSource.h" +#include "DebugViewppLib/VectorLineBuffer.h" +#include "DebugViewppLib/LogFile.h" +#include "DebugViewppLib/FileIO.h" +#include "DebugViewppLib/Conversions.h" +#include "CobaltFusion/scope_guard.h" + +namespace fusion { +namespace debugviewpp { + +BOOST_AUTO_TEST_SUITE(DebugViewPlusPlusLib) + +std::string GetTestString(size_t i) +{ + return stringbuilder() << "BB_TEST_ABCDEFGHI_EE_" << i; +} + +class TestLineBuffer : public LineBuffer +{ +public: + TestLineBuffer(size_t size) : + LineBuffer(size) + { + } + + virtual ~TestLineBuffer() = default; + + virtual void WaitForReaderTimeout() + { + throw std::exception("WaitForReader timeout"); + } +}; + + +class ScopedTimezoneBias +{ +public: + ScopedTimezoneBias(LONG Bias) + { + Win32::SetPrivilege(SE_TIME_ZONE_NAME, true); + GetTimeZoneInformation(&m_tz); + TIME_ZONE_INFORMATION tz = m_tz; + tz.Bias = Bias; + SetTimeZoneInformation(&tz); + } + + ~ScopedTimezoneBias() + { + SetTimeZoneInformation(&m_tz); + Win32::SetPrivilege(SE_TIME_ZONE_NAME, false); + } + +private: + TIME_ZONE_INFORMATION m_tz; +}; + +std::string GetTestFileName() +{ + using namespace std::filesystem; + return absolute(path("SaveLoadLogFile_unique_test_filename")).string(); +} + +std::string SaveLogFile(const LogFile& logfile) +{ + auto filename = GetTestFileName(); + std::ofstream fs; + OpenLogFile(fs, WStr(filename), OpenMode::Truncate); + const int count = logfile.Count(); + for (int i = 0; i < count; ++i) + { + auto msg = logfile[i]; + WriteLogFileMessage(fs, msg.time, msg.systemTime, msg.processId, msg.processName, msg.text); + } + fs.close(); + return filename; +} + +std::string AppendLogFile(const LogFile& logfile) +{ + auto filename = GetTestFileName(); + std::ofstream fs; + OpenLogFile(fs, WStr(filename), OpenMode::Append); + int count = logfile.Count(); + for (int i = 0; i < count; ++i) + { + auto msg = logfile[i]; + WriteLogFileMessage(fs, msg.time, msg.systemTime, msg.processId, msg.processName, msg.text); + } + fs.close(); + return filename; +} + +LogFile LoadLogFile(const std::string& filename) +{ + // load file test + std::ifstream file(filename); + Line line; + line.processName = "process"; + line.systemTime = Win32::GetSystemTimeAsFileTime(); + LogFile result; + ReadLogFileMessage(file, line); // ignore header + while (ReadLogFileMessage(file, line)) + result.Add(Message(line.time, line.systemTime, line.pid, line.processName, line.message)); + return result; +} + +bool AreEqual(const Message& a, const Message& b) +{ + if (std::fabs(a.time - b.time) > 0.000001) + return false; + if (GetTimeText(a.systemTime) != GetTimeText(b.systemTime)) + return false; + if (a.processId != b.processId) + return false; + if (a.processName != b.processName) + return false; + if (a.text != b.text) + return false; + // if (a.color != b.color) return false; // not stored in file + return true; +} + +bool AreEqual(const LogFile& a, const LogFile& b) +{ + if (a.Count() != b.Count()) + return false; + int count = a.Count(); + for (int i = 0; i < count; ++i) + { + if (!AreEqual(a[i], b[i])) + return false; + } + return true; +} + +BOOST_AUTO_TEST_CASE(TimeZone) +{ + Timer timer; + LogFile logFile; + auto t1 = Win32::GetSystemTimeAsFileTime(); + logFile.Add(Message(timer.Get(), t1, 0, "processname", "test message 1")); + auto t2 = Win32::GetSystemTimeAsFileTime(); + logFile.Add(Message(timer.Get(), t2, 0, "processname", "test message 2")); + auto t3 = Win32::GetSystemTimeAsFileTime(); + logFile.Add(Message(timer.Get(), t3, 0, "processname", "test message 3")); + auto t4 = Win32::GetSystemTimeAsFileTime(); + logFile.Add(Message(0, t4, 0, "processname", "message 4 (zero time message)")); + + BOOST_TEST_MESSAGE("UTC"); + { + ScopedTimezoneBias(0); + auto result = LoadLogFile(SaveLogFile(logFile)); + BOOST_TEST(AreEqual(result, logFile)); + } + BOOST_TEST_MESSAGE("(UTC-8) Fremond"); + { + ScopedTimezoneBias(-480); + auto result = LoadLogFile(SaveLogFile(logFile)); + BOOST_TEST(AreEqual(result, logFile)); + } + BOOST_TEST_MESSAGE("(UTC+8:30) Pyongyang Standard Time"); + { + ScopedTimezoneBias(+510); + auto result = LoadLogFile(SaveLogFile(logFile)); + BOOST_TEST(AreEqual(result, logFile)); + } + BOOST_TEST_MESSAGE("test boundry case (UTC-12) Baker- / Howland Island (uninhabited islands belonging to the United States)"); + { + ScopedTimezoneBias(-720); + auto result = LoadLogFile(SaveLogFile(logFile)); + BOOST_TEST(AreEqual(result, logFile)); + } + BOOST_TEST_MESSAGE("test boundry case (UTC+14) Kiritimati (Christmas Island, also uninhabited, part of the Kiribati Line Islands)"); + { + ScopedTimezoneBias(+720); + auto result = LoadLogFile(SaveLogFile(logFile)); + BOOST_TEST(AreEqual(result, logFile)); + } + + // test crossing timezones + BOOST_TEST_MESSAGE("test sending a logfile into the past (UTC -> UTC-8)"); + { + auto filename = SaveLogFile(logFile); + ScopedTimezoneBias(-480); + auto result = LoadLogFile(filename); + BOOST_TEST(AreEqual(result, logFile)); + } + + // test crossing timezones + BOOST_TEST_MESSAGE("test sending a logfile into the future (UTC-8 -> UTC)"); + { + std::string filename; + { + ScopedTimezoneBias(-480); + filename = SaveLogFile(logFile); + } + auto result = LoadLogFile(filename); + BOOST_TEST(AreEqual(result, logFile)); + } +} + +BOOST_AUTO_TEST_CASE(HandleTest) +{ + static const HANDLE nullHandle = nullptr; + + HANDLE rawHandle = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, GetCurrentProcessId()); + Win32::Handle handle(rawHandle); + { + BOOST_TEST(handle.get() == rawHandle); + Win32::Handle handle1(std::move(handle)); + BOOST_TEST(handle.get() == nullHandle); + BOOST_TEST(handle1.get() == rawHandle); + { + Win32::Handle handle2(std::move(handle1)); + handle2.release(); + BOOST_TEST(handle2.get() == nullHandle); + } + BOOST_TEST(handle1.get() == nullHandle); + } + + { + Win32::Handle handle1; + { + HANDLE zero = nullptr; + Win32::Handle zeroHandle(zero); + BOOST_TEST(zeroHandle.get() == nullHandle); + handle1 = std::move(zeroHandle); + BOOST_TEST(zeroHandle.get() == nullHandle); + BOOST_TEST(handle1.get() == nullHandle); + } + // this scope ensures having a Handle leave scope that had its guts ripped out by std::move + // will not cause nullpointers or exeptions + } +} + +BOOST_AUTO_TEST_CASE(LineBufferTest1) +{ + TestLineBuffer buffer(64); + FILETIME ft; + ft.dwLowDateTime = 42; + ft.dwHighDateTime = 43; + buffer.Add(42.0, ft, nullptr, "test", nullptr); + + auto lines = buffer.GetLines(); + auto& line = lines[0]; + BOOST_TEST(line.time == 42.0); + BOOST_TEST(line.systemTime.dwLowDateTime == DWORD(42)); + BOOST_TEST(line.systemTime.dwHighDateTime == DWORD(43)); + BOOST_TEST(buffer.Empty()); +} + +BOOST_AUTO_TEST_CASE(LineBufferTest2) // test overflows boosttestui with log-output locking its GUI up temporarily +{ + TestLineBuffer buffer(600); + Timer timer; + std::cout << "LineBufferTest2 running..." << std::endl; + for (int j = 0; j < 100; ++j) + { + // BOOST_TEST_MESSAGE("j: " << j << "\n"); + + for (int i = 0; i < 17; ++i) + { + // BOOST_TEST_MESSAGE("i: " << i << "\n"); + FILETIME ft; + ft.dwLowDateTime = 43; + ft.dwHighDateTime = 44; + buffer.Add(42.0, ft, nullptr, "test", nullptr); + } + + auto lines = buffer.GetLines(); + BOOST_TEST(lines.size() == 17); + for (auto& line : lines) + { + BOOST_TEST(line.time == 42.0); + BOOST_TEST(line.systemTime.dwLowDateTime == DWORD(43)); + BOOST_TEST(line.systemTime.dwHighDateTime == DWORD(44)); + } + } +} + +BOOST_AUTO_TEST_CASE(IndexedStorageRandomAccess) +{ + using namespace indexedstorage; + + size_t testSize = 10000; + auto testMax = testSize - 1; + + std::mt19937 generator; + std::uniform_int_distribution distribution(0, testMax); + SnappyStorage s; + for (size_t i = 0; i < testSize; ++i) + s.Add(GetTestString(i)); + + // random access can be somewhat slow in debug-mode, this is expected behaviour + bool failed = false; + for (size_t i = 0; i < testSize / 10; ++i) + { + size_t j = distribution(generator); // generates number in the range 0..testMax + if (s[j] != GetTestString(j)) + { + failed = true; + break; + }; + } + BOOST_TEST(!failed); +} + +BOOST_AUTO_TEST_CASE(IndexedStorageCompression) +{ + using namespace indexedstorage; + + // the memory allocator will mess up test results is < 64 kb is allocated + // make sure SnappyStorage allocates at least ~500kb for reproducable results + + // this test is indicative only, on average the SnappyStorage should allocate at most 50% of memory compared to a normal vector. + // since GetTestString returns an overly simpe-to-compress string, it will appear to perform insanely good. + + size_t testSize = 100000; + VectorStorage v; + SnappyStorage s; + + size_t m0 = ProcessInfo::GetPrivateBytes(); + + for (size_t i = 0; i < testSize; ++i) + v.Add(GetTestString(i)); + + size_t m1 = ProcessInfo::GetPrivateBytes(); + size_t usedByVector = m1 - m0; + BOOST_TEST_MESSAGE("VectorStorage requires: " << usedByVector / 1024 << " kB"); + + for (size_t i = 0; i < testSize; ++i) + s.Add(GetTestString(i)); + + size_t m2 = ProcessInfo::GetPrivateBytes(); + size_t usedBySnappy = m2 - m1; + + BOOST_TEST_MESSAGE("SnappyStorage requires: " << usedBySnappy / 1024 << " kB (" << (100 * usedBySnappy) / usedByVector << "%)"); + BOOST_TEST(size_t(0.50 * usedByVector) > usedBySnappy); +} + +// execute as: +// "DebugView++Test.exe" --log_level=test_suite --run_test=*/LogSourcesReceiveMessages +BOOST_AUTO_TEST_CASE(LogSourcesReceiveMessages) +{ + ActiveExecutorClient executor; + LogSources logsources(executor, false); + LogSource* logsource; + executor.Call([&] { logsource = logsources.AddTestSource(); }); + + Timer timer; + logsource->Add(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "message 1"); + logsource->Add(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "message 2"); + logsource->Add(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "message 3"); + BOOST_TEST_MESSAGE("3 lines added."); + + Lines lines; + executor.Call([&] { lines = logsources.GetLines(); }); + BOOST_TEST_MESSAGE("received: " << lines.size() << " lines."); + + BOOST_TEST(lines.size() == 3); + + for (auto& line : lines) + { + BOOST_TEST_MESSAGE("line: " << line.message); + } + + const int testsize = 1000; + BOOST_TEST_MESSAGE("Write " << testsize << " lines..."); + for (int i = 0; i < testsize; ++i) + { + logsource->Add(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "TESTSTRING 1234\n"); + } + + Lines morelines; + executor.Call([&] { morelines = logsources.GetLines(); }); + + BOOST_TEST_MESSAGE("received: " << morelines.size() << " lines."); + BOOST_TEST(morelines.size() == testsize); +} + +BOOST_AUTO_TEST_CASE(LogSourcesCharacterPreservation) +{ + ActiveExecutorClient executor; + LogSources logsources(executor, false); + LogSource* logsource; + executor.Call([&] { logsource = logsources.AddTestSource(); }); + + Timer timer; + logsource->Add(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "TrailingSpace "); + logsource->Add(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "TrailingTab\t"); + + Lines lines; + executor.Call([&] { lines = logsources.GetLines(); }); + BOOST_TEST(lines.size() == 2); + BOOST_TEST(lines[0].message == "TrailingSpace "); // space preserved + BOOST_TEST(lines[1].message == "TrailingTab\t"); // tab preserved +} + +BOOST_AUTO_TEST_CASE(LogSourcesTabHandling) +{ + ActiveExecutorClient executor; + LogSources logsources(executor, false); + LogSource* logsource; + executor.Call([&] { logsource = logsources.AddTestSource(); }); + + Timer timer; + logsource->Add(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "\tTabPrefix"); + logsource->Add(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "\t\tTwoTabsPrefixed"); + + Lines lines; + executor.Call([&] { lines = logsources.GetLines(); }); + BOOST_TEST(lines.size() == 2); + BOOST_TEST(lines[0].message == "\tTabPrefix"); // space preserved + BOOST_TEST(lines[1].message == "\t\tTwoTabsPrefixed"); // space preserved +} + +BOOST_AUTO_TEST_CASE(LogSourcesNewLineHandling) +{ + ActiveExecutorClient executor; + LogSources logsources(executor, false); + LogSource* logsource; + executor.Call([&] { logsource = logsources.AddTestSource(); }); + + Timer timer; + logsource->Add(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "NewLinePostfix\n"); + logsource->Add(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "NewLineCarriageReturnPostfix\n\r"); + logsource->Add(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "CarriageReturnNewLinePostfix\r\n"); + + Lines lines; + executor.Call([&] { lines = logsources.GetLines(); }); + BOOST_TEST(lines.size() == 3); + BOOST_TEST(lines[0].message == "NewLinePostfix"); + BOOST_TEST(lines[1].message == "NewLineCarriageReturnPostfix"); + BOOST_TEST(lines[2].message == "CarriageReturnNewLinePostfix"); +} + +std::wstring GetExecutePath() +{ + auto path = absolute(std::filesystem::path(Win32::GetCommandLineArguments()[0])); + return path.remove_filename().c_str(); +} + +BOOST_AUTO_TEST_CASE(LogSourceLoopback) +{ + using namespace std::chrono_literals; + + Lines lines; + auto executor = std::make_unique(); + { + LogSources logsources(*executor, true); + executor->Call([&] { logsources.AddDBWinReader(false); }); + executor->Call([&] { logsources.AddTestSource(); }); + executor->Call([&] { logsources.SetAutoNewLine(true); }); + + executor->Call([&] { logsources.AddMessage("Test message 1"); }); + executor->Call([&] { logsources.AddMessage("Test message 2"); }); + std::this_thread::sleep_for(200ms); + executor->Call([&] { lines = logsources.GetLines(); }); + + // Abort will remove the source and no messages can be received from remove sources + executor->Call([&] { logsources.Abort(); }); + } + executor.reset(); + + BOOST_TEST(lines.size() == 2); +} + +BOOST_AUTO_TEST_CASE(LogSourceDBWinReader) +{ + using namespace std::chrono_literals; + + std::string dbgMsgSrc = stringbuilder() << GetExecutePath() << "\\DbgMsgSrc.exe"; + BOOST_TEST(FileExists(dbgMsgSrc.c_str())); + std::string cmd = stringbuilder() << dbgMsgSrc << " -n"; + auto executor = std::make_unique(); + Lines lines; + { + LogSources logsources(*executor, true); + executor->Call([&] { logsources.SetAutoNewLine(true); }); + executor->Call([&] { logsources.AddDBWinReader(false); }); + system(cmd.c_str()); + executor->Call([&] { logsources.Abort(); }); + executor->Call([&] { lines = logsources.GetLines(); }); + } + executor.reset(); + + BOOST_TEST(lines.size() == 1); +} + +std::string CreateTestFile() +{ + Timer timer; + LogFile logFile; + logFile.Add(Message(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "test message 1")); + logFile.Add(Message(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "test message 2")); + logFile.Add(Message(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "test message 3")); + logFile.Add(Message(0, Win32::GetSystemTimeAsFileTime(), 0, "processname", "message 4 (zero time message)")); + return SaveLogFile(logFile); +} + +std::string AppendToTestFile() +{ + Timer timer; + LogFile logFile; + logFile.Add(Message(timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "processname", "test message appended")); + return AppendLogFile(logFile); +} + +std::vector GetNewLineOffsets(const std::string& filename) +{ + std::vector result; + std::ifstream file(filename); + Line line; + while (ReadLogFileMessage(file, line)) + result.push_back(static_cast(file.tellg())); + return result; +} + +void RemoveLinesFromFile(const std::string& filename, int linesToRemove) +{ + auto offsets = GetNewLineOffsets(filename); + auto offset = offsets[offsets.size() - 1 - linesToRemove]; + Win32::HFile(GetTestFileName()).resize(offset); +} + +BOOST_AUTO_TEST_CASE(LogSourceAnyFileReader) +{ + using namespace std::chrono_literals; + auto executor = std::make_unique(); + LogSources logsources(*executor, true); + auto filename = CreateTestFile(); + executor->Call([&] { logsources.SetAutoNewLine(true); }); + executor->Call([&] { logsources.AddAnyFileReader(WStr(filename), true); }); + std::this_thread::sleep_for(200ms); + + Lines lines; + executor->Call([&] { lines = logsources.GetLines(); }); + BOOST_TEST(lines.size() == 5); +} + +BOOST_AUTO_TEST_CASE(LogSourceAnyFileReaderResychronizeShrinkingFile) +{ + using namespace std::chrono_literals; + auto executor = std::make_unique(); + LogSources logsources(*executor, true); + auto filename = CreateTestFile(); + executor->Call([&] { logsources.SetAutoNewLine(true); }); + executor->Call([&] { logsources.AddAnyFileReader(WStr(filename), true); }); + std::this_thread::sleep_for(200ms); + + Lines lines; + executor->Call([&] { lines = logsources.GetLines(); }); + BOOST_TEST(lines.size() == 5); + + RemoveLinesFromFile(GetTestFileName(), 2); + AppendToTestFile(); + AppendToTestFile(); + AppendToTestFile(); + + std::this_thread::sleep_for(200ms); + executor->Call([&] { lines = logsources.GetLines(); }); + BOOST_TEST(lines.size() == 4); +} + +std::string GetTestFileAsString() +{ + std::ifstream file(GetTestFileName()); + std::stringstream ss; + ss << file.rdbuf(); + return ss.str(); +} + +BOOST_AUTO_TEST_CASE(LogSourceAnyFileReaderRewriteByteByByte) +{ + using namespace std::chrono_literals; + auto executor = std::make_unique(); + LogSources logsources(*executor, true); + auto filename = CreateTestFile(); + executor->Call([&] { logsources.SetAutoNewLine(true); }); + executor->Call([&] { logsources.AddAnyFileReader(WStr(filename), true); }); + std::this_thread::sleep_for(200ms); + + { + Lines lines; + executor->Call([&] { lines = logsources.GetLines(); }); + BOOST_TEST(lines.size() == 5); + } + auto content = GetTestFileAsString(); + + { + std::ofstream fs; + fs.open(GetTestFileName(), std::ofstream::trunc); + fs.close(); + } + std::this_thread::sleep_for(100ms); + for (char c : content) + { + std::ofstream fs; + fs.open(GetTestFileName(), std::ofstream::app); + fs << c; + // just flushing the fstream doesn't force a trigger of Find....ChangeNotification, but closing the fstream does the trick + fs.flush(); + fs.close(); + Sleep(20); + } + + std::this_thread::sleep_for(200ms); + Lines lines; + executor->Call([&] { lines = logsources.GetLines(); }); + for (auto& line : lines) + { + BOOST_TEST(line.message.find("xception") == std::string::npos); + // std::cout << line.message << std::endl; + } + BOOST_TEST(lines.size() == 6); + BOOST_TEST(lines.at(0).message.back() == '0'); // line ends in '...offset 0' + BOOST_TEST(lines.at(1).message == "File Identification Header, DebugView++ Format Version 1"); + BOOST_TEST(lines.at(2).message == "test message 1"); + BOOST_TEST(lines.at(3).message == "test message 2"); + BOOST_TEST(lines.at(4).message == "test message 3"); + BOOST_TEST(lines.at(5).message == "message 4 (zero time message)"); +} + +std::string CreateAsciiTestFile() +{ + auto filename = GetTestFileName(); + std::ofstream fs; + fs.open(filename, std::ofstream::trunc); + fs << "This is the first line\n"; + fs << "\n"; // empty line + fs << "This is the last line\n"; + return filename; +} + +BOOST_AUTO_TEST_CASE(LogSourceAnyFileReaderEmptyLines) +{ + using namespace std::chrono_literals; + auto executor = std::make_unique(); + LogSources logsources(*executor, true); + auto filename = CreateAsciiTestFile(); + executor->Call([&] { logsources.SetAutoNewLine(true); }); + executor->Call([&] { logsources.AddAnyFileReader(WStr(filename), true); }); + std::this_thread::sleep_for(200ms); + + { + Lines lines; + executor->Call([&] { lines = logsources.GetLines(); }); + BOOST_TEST(lines.size() == 4); + BOOST_TEST(lines.at(0).message.find("tailing") != std::string::npos); + BOOST_TEST(lines.at(1).message.find("first") != std::string::npos); + BOOST_TEST(lines.at(2).message == "", "The expected newline is gone!"); + BOOST_TEST(lines.at(3).message.find("last") != std::string::npos); + for (auto& line : lines) + { + BOOST_TEST(line.message.find("xception") == std::string::npos); + std::cout << line.message << std::endl; + } + } +} + +BOOST_AUTO_TEST_CASE(LogSourceLoopbackOrdering) +{ + using namespace std::chrono_literals; + auto executor = std::make_unique(); + LogSources logsources(*executor, true); + auto filename = CreateAsciiTestFile(); + executor->Call([&] { logsources.SetAutoNewLine(true); }); + executor->Call([&] { logsources.AddMessage("Loopback message 1"); }); + executor->Call([&] { logsources.AddMessage("Loopback message 2"); }); + executor->Call([&] { logsources.AddMessage("Loopback message 3"); }); + executor->Call([&] { logsources.AddAnyFileReader(WStr(filename), true); }); + std::this_thread::sleep_for(200ms); + Lines lines; + executor->Call([&] { lines = logsources.GetLines(); }); + + BOOST_TEST(lines.at(0).message == "Loopback message 1"); + BOOST_TEST(lines.at(1).message == "Loopback message 2"); + BOOST_TEST(lines.at(2).message == "Loopback message 3"); + BOOST_TEST(lines.at(3).message.find("tailing") != std::string::npos); + BOOST_TEST(lines.at(4).message.find("first") != std::string::npos); + BOOST_TEST(lines.at(5).message == "", "The expected newline is gone!"); + BOOST_TEST(lines.at(6).message.find("last") != std::string::npos); + for (auto& line : lines) + { + std::cout << line.message << std::endl; + } +} + +#pragma warning(disable : 4996) + +#ifndef _HAS_CXX17 + +std::string CreateUTF16LETestFile(int linecount) +{ + auto filename = GetTestFileName(); + std::wfstream fs; + fs.imbue(std::locale(fs.getloc(), new std::codecvt_utf16)); + fs.open(filename, std::ios::binary | std::ios::trunc | std::ios::in | std::ios::out); + for (int i = 0; i < linecount; ++i) + { + fs << "This is line number [" << i + 1 << "]\n"; + } + fs.close(); + return filename; +} + +BOOST_AUTO_TEST_CASE(LoadUTF16LE) +{ + using namespace std::chrono_literals; + auto executor = std::make_unique(); + LogSources logsources(*executor, true); + int lineCount = 65000; + auto filename = CreateUTF16LETestFile(lineCount); + executor->Call([&] { logsources.SetAutoNewLine(true); }); + executor->Call([&] { logsources.AddAnyFileReader(WStr(filename), true); }); + + // assumption: should be done in 4 seconds, even in debug mode + size_t totalLines = 0; + for (int i = 0; i < 20; ++i) + { + std::this_thread::sleep_for(200ms); + Lines lines; + executor->Call([&] { lines = logsources.GetLines(); }); + totalLines += lines.size(); + } + + // (lineCount + 1) because the first line looks like: "Started tailing ....txt identified as '...' + BOOST_TEST(totalLines == (lineCount + 1)); +} + +#endif + +// add test simulating MFC application behaviour (pressing pause/unpause lots of times during significant incomming messages) + +BOOST_AUTO_TEST_SUITE_END() + +} // namespace debugviewpp +} // namespace fusion From 474b74911309f6b29c95df0bffcf35e447b3a035 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Sat, 26 Jul 2025 22:11:26 +0200 Subject: [PATCH 02/43] added Dbgv.sys as resource --- application/DebugViewpp/DebugView++.rc | 12 +++++++++--- application/DebugViewpp/res/Dbgv.sys | 0 application/DebugViewpp/resource.h | 3 ++- 3 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 application/DebugViewpp/res/Dbgv.sys diff --git a/application/DebugViewpp/DebugView++.rc b/application/DebugViewpp/DebugView++.rc index 2ba769b8..84112817 100644 --- a/application/DebugViewpp/DebugView++.rc +++ b/application/DebugViewpp/DebugView++.rc @@ -26,19 +26,19 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // TEXTINCLUDE // -1 TEXTINCLUDE +1 TEXTINCLUDE BEGIN "resource.h\0" END -2 TEXTINCLUDE +2 TEXTINCLUDE BEGIN "#include ""atlres.h""\r\n" "#include ""verrsrc.h""\r\n" "\0" END -3 TEXTINCLUDE +3 TEXTINCLUDE BEGIN "#include ""Version.rc2""\r\n" "\0" @@ -245,6 +245,12 @@ IDR_MAINFRAME ICON "res\\DebugView++.ico" IDR_BOOKMARK ICON "res\\Bookmark.ico" +///////////////////////////////////////////////////////////////////////////// +// +// RCDATA +// + +IDR_DBGV_DRIVER RCDATA "res\\Dbgv.sys" ///////////////////////////////////////////////////////////////////////////// // diff --git a/application/DebugViewpp/res/Dbgv.sys b/application/DebugViewpp/res/Dbgv.sys new file mode 100644 index 00000000..e69de29b diff --git a/application/DebugViewpp/resource.h b/application/DebugViewpp/resource.h index f63d962e..cf2479d5 100644 --- a/application/DebugViewpp/resource.h +++ b/application/DebugViewpp/resource.h @@ -16,7 +16,8 @@ #define IDC_DEBUGVIEW_SRC_URL 130 #define IDC_DEBUGVIEW_URL 131 #define IDR_BOOKMARK 132 -#define IDS_LASTVALUE 133 +#define IDR_DBGV_DRIVER 133 +#define IDS_LASTVALUE 134 #define IDD_SOURCES 199 #define IDD_FILTER 200 #define IDR_TAB_CONTEXTMENU 201 From e4c159ea9728fe63d401cee88efdaaac87851a4a Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Sun, 27 Jul 2025 11:38:04 +0200 Subject: [PATCH 03/43] added comments and /MP to speed up solution builds considerably (130s down to 26s on my pc) ninja builds are still faster (20s) --- CMakeLists.txt | 4 +++- application/DebugViewpp/DebugView++.cpp | 18 ++++++++++++++++++ build.bat | 3 +++ build_with_ninja.bat | 4 ++++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2b9cd72d..5500eb50 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,6 +19,8 @@ project( enable_testing() +add_compile_options(/MP) + if(BUILD_WITH_ASAN) add_compile_options(/fsanitize=address /D_DISABLE_VECTOR_ANNOTATION=0) message("-- build with ASAN enabled") @@ -42,7 +44,7 @@ target_compile_definitions(project_definitions UNICODE NOMINMAX WIN32_LEAN_AND_MEAN - _CRT_SECURE_NO_WARNINGS + _CRT_SECURE_NO_WARNINGS _WINSOCK_DEPRECATED_NO_WARNINGS WIN32 WIN64 diff --git a/application/DebugViewpp/DebugView++.cpp b/application/DebugViewpp/DebugView++.cpp index 1d739b45..de571819 100644 --- a/application/DebugViewpp/DebugView++.cpp +++ b/application/DebugViewpp/DebugView++.cpp @@ -110,6 +110,24 @@ int Main(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPWSTR /*lpstrCmdLine std::cout.clear(); #endif + + HRSRC hRes = FindResource(NULL, MAKEINTRESOURCE(IDR_DBGV_DRIVER), RT_RCDATA); + if (hRes) + { + HGLOBAL hLoadedRes = LoadResource(NULL, hRes); + if (hLoadedRes) + { + DWORD dwSize = SizeofResource(NULL, hRes); + void* pLockedRes = LockResource(hLoadedRes); + if (pLockedRes) + { + std::ofstream outFile("dbgv.sys", std::ios::binary); + outFile.write(static_cast(pLockedRes), dwSize); + outFile.close(); + } + } + } + CAppModuleInitialization moduleInit(_Module, hInstance); HANDLE hStdIn = GetStdHandle(STD_INPUT_HANDLE); diff --git a/build.bat b/build.bat index 882d9d9b..b8f4de92 100644 --- a/build.bat +++ b/build.bat @@ -1,2 +1,5 @@ +:: if the nuget package configuration fails, make sure +:: Tools -> Options -> NuGet Package Manager -> Package Sources contains 'https://api.nuget.org/v3/index.json.' + cmake -DCMAKE_INSTALL_PREFIX=install -G "Visual Studio 17 2022" -B vs2022 . start "" vs2022\debugviewpp.sln diff --git a/build_with_ninja.bat b/build_with_ninja.bat index 7e894298..54fd96f8 100644 --- a/build_with_ninja.bat +++ b/build_with_ninja.bat @@ -1,2 +1,6 @@ +:: building with ninja is faster (~20 seconds) compared to building with the "Visual Studio 17 2022" generator (~26 seconds) +:: however, our CI (Appveyor) works well with visual studio solution files, so we provide a way to create both. + +set "NINJA_STATUS=[%%e %%f/%%t @%%r] " cmake -DCMAKE_INSTALL_PREFIX=install -DCMAKE_BUILD_TYPE=Release -G Ninja -B build . ninja -C build From 558b58a004eb11dd1dac66a0f9240cef37561829 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Sun, 27 Jul 2025 13:20:36 +0200 Subject: [PATCH 04/43] increased minimal requirements for cmake to remove warnings --- application/Libraries/docopt.cpp/CMakeLists.txt | 2 +- application/Libraries/docopt.cpp/README.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/application/Libraries/docopt.cpp/CMakeLists.txt b/application/Libraries/docopt.cpp/CMakeLists.txt index 28da6140..ce638f8f 100644 --- a/application/Libraries/docopt.cpp/CMakeLists.txt +++ b/application/Libraries/docopt.cpp/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.16) project(docopt.cpp VERSION 0.6.2) include(GNUInstallDirs) diff --git a/application/Libraries/docopt.cpp/README.rst b/application/Libraries/docopt.cpp/README.rst index 5fe8b4f6..a598bd58 100644 --- a/application/Libraries/docopt.cpp/README.rst +++ b/application/Libraries/docopt.cpp/README.rst @@ -87,7 +87,7 @@ Alternatively manual installation is done using (unix):: To link *docopt.cpp*, the simplest is to use CMake. The general structure of your ``CMakeLists.txt`` would be as follows:: - cmake_minimum_required(VERSION 3.1) + cmake_minimum_required(VERSION 3.16) project(example) From 7b77aa01bacae2a45ea42483083363e4c80f66b6 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Sun, 27 Jul 2025 15:17:57 +0200 Subject: [PATCH 05/43] added .vscode to .gitignore file --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 2621b8fc..f7b5a035 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .vs/ +.vscode/ vs2022/ build/ out/ @@ -7,4 +8,4 @@ packages/ bin obj/ Testing/ -install/ \ No newline at end of file +install/ From 320d748031d925715712b43a3deeebe3cb6d1c11 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Sun, 27 Jul 2025 15:18:46 +0200 Subject: [PATCH 06/43] added test code for receive kernel messages --- application/DebugViewpp/DebugView++.cpp | 41 ++-- application/DebugViewpp/DebugView++.rc | 2 +- application/DebugViewppLib/CMakeLists.txt | 1 + .../Debugview_kernel_client.cpp | 198 ++++++++++++++++++ .../DebugViewppLib/Debugview_kernel_client.h | 9 + 5 files changed, 230 insertions(+), 21 deletions(-) create mode 100644 application/DebugViewppLib/Debugview_kernel_client.cpp create mode 100644 application/DebugViewppLib/Debugview_kernel_client.h diff --git a/application/DebugViewpp/DebugView++.cpp b/application/DebugViewpp/DebugView++.cpp index de571819..31784609 100644 --- a/application/DebugViewpp/DebugView++.cpp +++ b/application/DebugViewpp/DebugView++.cpp @@ -12,8 +12,6 @@ #include "DebugViewppLib/DBWinWriter.h" #include "Win32/Com.h" -#include - #include "atleverything.h" //#define ENABLE_CRASHPAD @@ -90,10 +88,31 @@ int ForwardMessagesFromPipe(HANDLE hPipe) return 0; } +void WriteDriverFromResource() +{ + HRSRC hRes = FindResource(NULL, MAKEINTRESOURCE(IDR_DBGV_DRIVER), RT_RCDATA); + if (hRes) + { + HGLOBAL hLoadedRes = LoadResource(NULL, hRes); + if (hLoadedRes) + { + DWORD dwSize = SizeofResource(NULL, hRes); + void* pLockedRes = LockResource(hLoadedRes); + if (pLockedRes) + { + std::ofstream outFile("dbgv.sys", std::ios::binary); + outFile.write(static_cast(pLockedRes), dwSize); + outFile.close(); + } + } + } +} + int Main(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPWSTR /*lpstrCmdLine*/, int cmdShow) { Win32::SetPrivilege(SE_DEBUG_NAME, true); Win32::SetPrivilege(SE_CREATE_GLOBAL_NAME, true); + Win32::SetPrivilege(SE_LOAD_DRIVER_NAME, true); Win32::ComInitialization com; @@ -110,24 +129,6 @@ int Main(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPWSTR /*lpstrCmdLine std::cout.clear(); #endif - - HRSRC hRes = FindResource(NULL, MAKEINTRESOURCE(IDR_DBGV_DRIVER), RT_RCDATA); - if (hRes) - { - HGLOBAL hLoadedRes = LoadResource(NULL, hRes); - if (hLoadedRes) - { - DWORD dwSize = SizeofResource(NULL, hRes); - void* pLockedRes = LockResource(hLoadedRes); - if (pLockedRes) - { - std::ofstream outFile("dbgv.sys", std::ios::binary); - outFile.write(static_cast(pLockedRes), dwSize); - outFile.close(); - } - } - } - CAppModuleInitialization moduleInit(_Module, hInstance); HANDLE hStdIn = GetStdHandle(STD_INPUT_HANDLE); diff --git a/application/DebugViewpp/DebugView++.rc b/application/DebugViewpp/DebugView++.rc index 84112817..969b3911 100644 --- a/application/DebugViewpp/DebugView++.rc +++ b/application/DebugViewpp/DebugView++.rc @@ -250,7 +250,7 @@ IDR_BOOKMARK ICON "res\\Bookmark.ico" // RCDATA // -IDR_DBGV_DRIVER RCDATA "res\\Dbgv.sys" +IDR_DBGV_DRIVER RCDATA "res\\Dbgv.sys" ///////////////////////////////////////////////////////////////////////////// // diff --git a/application/DebugViewppLib/CMakeLists.txt b/application/DebugViewppLib/CMakeLists.txt index f9fa6ac6..6557ced4 100644 --- a/application/DebugViewppLib/CMakeLists.txt +++ b/application/DebugViewppLib/CMakeLists.txt @@ -7,6 +7,7 @@ add_library(${PROJECT_NAME} Conversions.cpp CTimelineView.cpp DbgviewReader.cpp + Debugview_kernel_client.cpp DBWinBuffer.cpp DBWinReader.cpp DBWinWriter.cpp diff --git a/application/DebugViewppLib/Debugview_kernel_client.cpp b/application/DebugViewppLib/Debugview_kernel_client.cpp new file mode 100644 index 00000000..149f2b93 --- /dev/null +++ b/application/DebugViewppLib/Debugview_kernel_client.cpp @@ -0,0 +1,198 @@ +// (C) Copyright Gert-Jan de Vos and Jan Wilmans 2013. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#define WIN32_LEAN_AND_MEAN +#include +#include +#include +#include + +#include +#include + +#pragma warning(disable:4200) + +#define FILE_DEVICE_DBGV 0x8305 + +#define DBGV_CAPTURE_KERNEL CTL_CODE(FILE_DEVICE_DBGV, 0, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x00 //enable capture kernel +#define DBGV_UNCAPTURE_KERNEL CTL_CODE(FILE_DEVICE_DBGV, 1, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x04 // +#define DBGV_CLEAR_DISPLAY CTL_CODE(FILE_DEVICE_DBGV, 2, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x08 //clear display +#define DBGV_READ_LOG CTL_CODE(FILE_DEVICE_DBGV, 3, METHOD_NEITHER, FILE_ANY_ACCESS) //0x0f //read kernel log +#define DBGV_SET_PASSTHROUGH CTL_CODE(FILE_DEVICE_DBGV, 4, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x10 //enable passthrough +#define DBGV_UNSET_PASSTHROUGH CTL_CODE(FILE_DEVICE_DBGV, 5, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x14 // +#define DBGV_IS_DRIVER_AVAILABLE CTL_CODE(FILE_DEVICE_DBGV, 8, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x20 //test driver is valid or functional +#define DBGV_GET_DRIVER_VERSION CTL_CODE(FILE_DEVICE_DBGV, 9, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x24 //driver version, 4.70 = 0x800 +#define DBGV_SET_CARRIAGE_RETURN CTL_CODE(FILE_DEVICE_DBGV, 0x0d, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x34 //force carriage return +#define DBGV_UNSET_CARRIAGE_RETURN CTL_CODE(FILE_DEVICE_DBGV, 0x0e, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x38 // +#define DBGV_ENABLE_FILTER_STATE CTL_CODE(FILE_DEVICE_DBGV, 0x0f, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x3C //enable log verbose +#define DBGV_SET_FILTER_STATE CTL_CODE(FILE_DEVICE_DBGV, 0x10, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x40 //reset log verbose + +#pragma pack(1) +typedef struct +{ + DWORD dwIndex; + FILETIME liSystemTime; + LARGE_INTEGER liPerfCounter; + CHAR strData[0]; +}LOG_ITEM, *PLOG_ITEM; +#pragma pack() + +int monitor_kernel() +{ + std::wstring strDeviceName = L"\\\\.\\dbgv"; + + HANDLE hFile = CreateFile(strDeviceName.c_str(), + GENERIC_READ, + FILE_SHARE_READ, + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL); + DWORD dwErr = ::GetLastError(); + if (hFile != INVALID_HANDLE_VALUE) + { + BOOL bRet = FALSE; + + //enable capture + DWORD dwOut = 0; + DWORD dwReturned = 0; + bRet = DeviceIoControl(hFile, DBGV_CAPTURE_KERNEL, NULL, 0, &dwOut, sizeof(dwOut), &dwReturned, NULL); + if (!bRet) + { + printf("DBGV_CAPTURE_KERNEL failed, err=%d\n", ::GetLastError()); + CloseHandle(hFile); + return -1; + } + + //enable kernel verboase log + bRet = DeviceIoControl(hFile, DBGV_ENABLE_FILTER_STATE, NULL, 0, NULL, 0, NULL, NULL); + if (!bRet) + { + printf("DBGV_ENABLE_FILTER_STATE failed, err=%d\n", ::GetLastError()); + CloseHandle(hFile); + return -2; + } + + //try capture 1000 logs and exit + const DWORD dwBufLen = 0x10000; + PLOG_ITEM pBuf = (PLOG_ITEM)malloc(dwBufLen); + DWORD nCount = 0, nMaxCount = 1000; + while (1) + { + memset(pBuf, 0, dwBufLen); + dwOut = 0; + bRet = DeviceIoControl(hFile, DBGV_READ_LOG, NULL, 0, pBuf, dwBufLen, &dwOut, NULL); + if (dwOut > 0) + { + PLOG_ITEM pNextItem = pBuf; + while (pNextItem->dwIndex != 0) + { + SYSTEMTIME st = { 0 }; + FILETIME lt = { 0 }; + FileTimeToLocalFileTime(&pNextItem->liSystemTime, <); + FileTimeToSystemTime(<, &st); + printf("%d, Time:%04d-%02d-%02d %02d:%02d:%02d.%03d, %s\n", + pNextItem->dwIndex, + st.wYear, + st.wMonth, + st.wDay, + st.wHour, + st.wMinute, + st.wSecond, + st.wMilliseconds, + pNextItem->strData); + pNextItem = (PLOG_ITEM)((char*)pNextItem + sizeof(LOG_ITEM) + (strlen(pNextItem->strData) + 4) / 4 * 4); + + nCount++; + if (nCount > nMaxCount) + { + break; + } + } + } + + ::Sleep(10); + } + + ::free(pBuf); + + bRet = DeviceIoControl(hFile, DBGV_UNCAPTURE_KERNEL, NULL, 0, NULL, 0, NULL, NULL); + if (!bRet) + { + printf("DBGV_UNCAPTURE_KERNEL failed, err=%d\n", ::GetLastError()); + CloseHandle(hFile); + return -1; + } + + CloseHandle(hFile); + } + + return 0; +}; + +/// Driver + +constexpr const char* DRIVER_SERVICE_NAME = "debugviewdriver"; +constexpr const char* DRIVER_DISPLAY_NAME = "DebugViewPP Kernel Message Driver"; +const std::string driverPath = "dbgv.sys"; + +void InstallDriver() +{ + std::cout << "InstallDriver...\n"; + SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); + if (!hSCManager) { + std::cout << "Failed to open Service Control Manager. Error: " << GetLastError() << std::endl; + } + + SC_HANDLE hService = CreateServiceA( + hSCManager, + DRIVER_SERVICE_NAME, + DRIVER_DISPLAY_NAME, + SERVICE_ALL_ACCESS, + SERVICE_KERNEL_DRIVER, + SERVICE_DEMAND_START, + SERVICE_ERROR_NORMAL, + driverPath.c_str(), + NULL, NULL, NULL, NULL, NULL + ); + + if (!hService) { + if (GetLastError() == ERROR_SERVICE_EXISTS) { + std::cout << "Service already exists.\n"; + CloseServiceHandle(hSCManager); + } + std::cout << "Failed to create service. Error: " << GetLastError() << std::endl; + CloseServiceHandle(hSCManager); + } + + CloseServiceHandle(hService); + CloseServiceHandle(hSCManager); + std::cout << "InstallDriver done...\n"; +} + +void UninstallDriver() +{ + std::cout << "UninstallDriver...\n"; + SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); + if (!hSCManager) { + std::cout << "Failed to open Service Control Manager. Error: " << GetLastError() << std::endl; + } + + SC_HANDLE hService = OpenServiceA(hSCManager, DRIVER_SERVICE_NAME, DELETE); + if (!hService) { + std::cout << "Failed to open service. Error: " << GetLastError() << std::endl; + CloseServiceHandle(hSCManager); + } + + if (!DeleteService(hService)) { + std::cout << "Failed to delete service. Error: " << GetLastError() << std::endl; + CloseServiceHandle(hService); + CloseServiceHandle(hSCManager); + } + + CloseServiceHandle(hService); + CloseServiceHandle(hSCManager); + std::cout << "UninstallDriver done...\n"; +} diff --git a/application/DebugViewppLib/Debugview_kernel_client.h b/application/DebugViewppLib/Debugview_kernel_client.h new file mode 100644 index 00000000..50d57b34 --- /dev/null +++ b/application/DebugViewppLib/Debugview_kernel_client.h @@ -0,0 +1,9 @@ +// (C) Copyright Gert-Jan de Vos and Jan Wilmans 2013. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +int monitor_kernel(); +void InstallDriver(); +void UninstallDriver(); + From 2252eaf26ca9e9b72bab5c730b28ec488529bee1 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Sun, 27 Jul 2025 15:29:35 +0200 Subject: [PATCH 07/43] removed redundant leftover pragmas after moving to cmake --- application/DebugViewppLib/DebugView++Lib.h | 4 +--- application/include/CobaltFusion/CircularBuffer.h | 2 -- application/include/CobaltFusion/JobDispatcher.h | 12 +++++------- application/include/DebugViewppLib/Filter.h | 2 -- application/include/DebugViewppLib/LogSources.h | 2 -- application/include/DebugViewppLib/ProcessInfo.h | 2 -- .../include/IndexedStorageLib/IndexedStorage.h | 2 -- 7 files changed, 6 insertions(+), 20 deletions(-) diff --git a/application/DebugViewppLib/DebugView++Lib.h b/application/DebugViewppLib/DebugView++Lib.h index c79a089e..1c7637a3 100644 --- a/application/DebugViewppLib/DebugView++Lib.h +++ b/application/DebugViewppLib/DebugView++Lib.h @@ -1,6 +1,6 @@ // (C) Copyright Gert-Jan de Vos and Jan Wilmans 2013. // Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at +// (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once @@ -18,5 +18,3 @@ #include "PipeReader.h" #include "Process.h" #include "ProcessReader.h" - -#pragma comment(lib, "DebugView++Lib.lib") diff --git a/application/include/CobaltFusion/CircularBuffer.h b/application/include/CobaltFusion/CircularBuffer.h index 02525ecd..d917a384 100644 --- a/application/include/CobaltFusion/CircularBuffer.h +++ b/application/include/CobaltFusion/CircularBuffer.h @@ -9,8 +9,6 @@ #include #include "noncopyable.h" -#pragma comment(lib, "CobaltFusion.lib") - namespace fusion { class CircularBuffer : fusion::noncopyable diff --git a/application/include/CobaltFusion/JobDispatcher.h b/application/include/CobaltFusion/JobDispatcher.h index a22a39b8..b2f02298 100644 --- a/application/include/CobaltFusion/JobDispatcher.h +++ b/application/include/CobaltFusion/JobDispatcher.h @@ -1,6 +1,6 @@ // (C) Copyright Gert-Jan de Vos and Jan Wilmans 2013. // Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at +// (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once @@ -13,19 +13,17 @@ #include #include -#pragma comment(lib, "CobaltFusion.lib") - namespace fusion { // Two use cases are supported by JobDispatcher -// +// // 1) BackgroundDispatcher // any Queue'd jobs by the caller will then be executed on a background thread until stop is called. // // 2) OnDemandDispatcher // call ExecuteQueuedJobs() to have the queued jobs executed on the caller thread -// - +// + typedef std::function Job; class JobDispatcher @@ -34,7 +32,7 @@ class JobDispatcher JobDispatcher(); virtual ~JobDispatcher(); - // guarentees and all jobs queued before Flush() have been executed + // guarentees and all jobs queued before Flush() have been executed virtual void Flush(); // returns immediately after queueing diff --git a/application/include/DebugViewppLib/Filter.h b/application/include/DebugViewppLib/Filter.h index c1501a64..f91462f5 100644 --- a/application/include/DebugViewppLib/Filter.h +++ b/application/include/DebugViewppLib/Filter.h @@ -15,8 +15,6 @@ #include #include -#pragma comment(lib, "DebugView++Lib.lib") - namespace fusion { namespace debugviewpp { diff --git a/application/include/DebugViewppLib/LogSources.h b/application/include/DebugViewppLib/LogSources.h index 8a94b76b..65f8674e 100644 --- a/application/include/DebugViewppLib/LogSources.h +++ b/application/include/DebugViewppLib/LogSources.h @@ -15,8 +15,6 @@ #include "DebugviewppLib/ProcessMonitor.h" #include "CobaltFusion/Throttle.h" -#pragma comment(lib, "DebugView++Lib.lib") - namespace fusion { namespace debugviewpp { diff --git a/application/include/DebugViewppLib/ProcessInfo.h b/application/include/DebugViewppLib/ProcessInfo.h index eba6ebe0..a8dc0363 100644 --- a/application/include/DebugViewppLib/ProcessInfo.h +++ b/application/include/DebugViewppLib/ProcessInfo.h @@ -10,8 +10,6 @@ #include "windows.h" -#pragma comment(lib, "DebugView++Lib.lib") - namespace fusion { namespace debugviewpp { diff --git a/application/include/IndexedStorageLib/IndexedStorage.h b/application/include/IndexedStorageLib/IndexedStorage.h index f2a1fc06..588ffa56 100644 --- a/application/include/IndexedStorageLib/IndexedStorage.h +++ b/application/include/IndexedStorageLib/IndexedStorage.h @@ -9,8 +9,6 @@ #include #include -#pragma comment(lib, "IndexedStorageLib.lib") - namespace fusion { namespace indexedstorage { From 6811fb9fdf8ed60a14cde905e1ff3e206903fd3b Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Sun, 27 Jul 2025 15:44:34 +0200 Subject: [PATCH 08/43] set crlf in .gitattributes so it matches .editorconfig --- .gitattributes | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index e2d65ed4..966ce42e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,2 @@ -* text=auto eol=lf +* text=auto eol=crlf +*.sh text=auto eol=lf From 1c29733280cdef4aaade431204710d071dc146c5 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Sun, 27 Jul 2025 16:01:06 +0200 Subject: [PATCH 09/43] fixed titlebar when Global Win32 was toggled --- application/DebugViewpp/MainFrame.cpp | 35 +++++++++++++++------------ application/DebugViewpp/MainFrame.h | 1 + 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/application/DebugViewpp/MainFrame.cpp b/application/DebugViewpp/MainFrame.cpp index 452d0db5..2be9d4d1 100644 --- a/application/DebugViewpp/MainFrame.cpp +++ b/application/DebugViewpp/MainFrame.cpp @@ -1400,6 +1400,24 @@ void CMainFrame::Pause() m_logSources.AddMessage(""); } +void CMainFrame::UpdateTitle() +{ + std::wstring title = L"Paused"; + if ((m_pLocalReader != nullptr) && (m_pGlobalReader != nullptr)) + { + title = L"Capture Win32 & Global Win32 Messages"; + } + else if (m_pLocalReader != nullptr) + { + title = L"Capture Win32"; + } + else if (m_pGlobalReader != nullptr) + { + title = L"Capture Global Win32"; + } + SetTitle(title); +} + void CMainFrame::Resume() { SetTitle(); @@ -1438,21 +1456,7 @@ void CMainFrame::Resume() m_tryGlobal = false; } } - - std::wstring title = L"Paused"; - if ((m_pLocalReader != nullptr) && (m_pGlobalReader != nullptr)) - { - title = L"Capture Win32 & Global Win32 Messages"; - } - else if (m_pLocalReader != nullptr) - { - title = L"Capture Win32"; - } - else if (m_pGlobalReader != nullptr) - { - title = L"Capture Global Win32"; - } - SetTitle(title); + UpdateTitle(); } void CMainFrame::OnLogPause(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wndCtl*/) @@ -1480,6 +1484,7 @@ void CMainFrame::OnLogGlobal(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wndCtl m_logSources.Remove(m_pGlobalReader); m_pGlobalReader = nullptr; } + UpdateTitle(); } void CMainFrame::OnLogHistory(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wndCtl*/) diff --git a/application/DebugViewpp/MainFrame.h b/application/DebugViewpp/MainFrame.h index a7194024..7490d435 100644 --- a/application/DebugViewpp/MainFrame.h +++ b/application/DebugViewpp/MainFrame.h @@ -132,6 +132,7 @@ class CMainFrame : public CTabbedFrameImpl Date: Sun, 27 Jul 2025 17:27:32 +0200 Subject: [PATCH 10/43] kernelreader UI changed and added class KernelReader --- application/DebugViewpp/DebugView++.rc | 2 + application/DebugViewpp/MainFrame.cpp | 41 +++++++++++++++++- application/DebugViewpp/MainFrame.h | 5 +++ application/DebugViewpp/resource.h | 2 + .../DebugViewppLib/BinaryFileReader.cpp | 2 +- application/DebugViewppLib/CMakeLists.txt | 1 + application/DebugViewppLib/KernelReader.cpp | 43 +++++++++++++++++++ application/DebugViewppLib/LogSources.cpp | 12 +++++- .../DebugViewppLib/PolledLogSource.cpp | 1 + .../include/DebugViewppLib/KernelReader.h | 29 +++++++++++++ .../include/DebugViewppLib/LogSource.h | 2 +- .../include/DebugViewppLib/LogSources.h | 2 + .../include/DebugViewppLib/PolledLogSource.h | 2 +- 13 files changed, 138 insertions(+), 6 deletions(-) create mode 100644 application/DebugViewppLib/KernelReader.cpp create mode 100644 application/include/DebugViewppLib/KernelReader.h diff --git a/application/DebugViewpp/DebugView++.rc b/application/DebugViewpp/DebugView++.rc index 969b3911..c4a10c83 100644 --- a/application/DebugViewpp/DebugView++.rc +++ b/application/DebugViewpp/DebugView++.rc @@ -111,6 +111,7 @@ BEGIN MENUITEM "Crop Log to &Selection", ID_LOG_CROP MENUITEM "&Pause\tPause", ID_LOG_PAUSE MENUITEM "Capture &Global Win32", ID_LOG_GLOBAL + MENUITEM "Capture &Kernel Messages", ID_LOG_KERNEL MENUITEM "Connect DebugView &Agent", ID_LOG_DEBUGVIEW_AGENT MENUITEM "Sources...", ID_LOG_SOURCES MENUITEM "History Size...", ID_LOG_HISTORY @@ -621,6 +622,7 @@ STRINGTABLE BEGIN ID_LOG_PAUSE "Pause log recording\nPause" ID_LOG_GLOBAL "Capture logs from all processes\nCapture Global Win32" + ID_LOG_KERNEL "Capture logs from kerenel processes\nCapture Kernel Messages" ID_LOG_DEBUGVIEW_AGENT "Connect DbgView Agent\nConnect DbgView Agent" ID_LOG_HISTORY "Configure log file history size\nConfigure History Size" ID_VIEW_CLEAR "Clear log view\nClear View" diff --git a/application/DebugViewpp/MainFrame.cpp b/application/DebugViewpp/MainFrame.cpp index 2be9d4d1..ecdd8962 100644 --- a/application/DebugViewpp/MainFrame.cpp +++ b/application/DebugViewpp/MainFrame.cpp @@ -129,6 +129,7 @@ BEGIN_MSG_MAP2(CMainFrame) COMMAND_ID_HANDLER_EX(ID_LOG_CROP, OnLogCrop) COMMAND_ID_HANDLER_EX(ID_LOG_PAUSE, OnLogPause) COMMAND_ID_HANDLER_EX(ID_LOG_GLOBAL, OnLogGlobal) + COMMAND_ID_HANDLER_EX(ID_LOG_KERNEL, OnLogKernel) COMMAND_ID_HANDLER_EX(ID_LOG_HISTORY, OnLogHistory) COMMAND_ID_HANDLER_EX(ID_LOG_DEBUGVIEW_AGENT, OnLogDebugviewAgent) COMMAND_ID_HANDLER_EX(ID_VIEW_FIND, OnViewFind) @@ -328,6 +329,7 @@ void CMainFrame::UpdateUI() UISetCheck(ID_LOG_PAUSE, !m_pLocalReader); UIEnable(ID_LOG_GLOBAL, !!m_pLocalReader); UISetCheck(ID_LOG_GLOBAL, m_tryGlobal); + UISetCheck(ID_LOG_KERNEL, m_tryKernel); } std::wstring FormatDateTime(const SYSTEMTIME& systemTime) @@ -1438,7 +1440,7 @@ void CMainFrame::Resume() } } - if (m_tryGlobal) + if (m_tryGlobal && m_pGlobalReader == nullptr) { try { @@ -1456,6 +1458,25 @@ void CMainFrame::Resume() m_tryGlobal = false; } } + + if (m_tryKernel && m_pKernelReader == nullptr) + { + try + { + m_pKernelReader = m_logSources.AddKernelReader(); + } + catch (std::exception&) + { + MessageBox(L"Unable to capture Kernel Messages.\n" + L"\n" + L"Make sure you have appropriate permissions.\n" + L"\n" + L"You may need to start this application by right-clicking it and selecting\n" + L"'Run As Administator' even if you have administrator rights.", + m_applicationName.c_str(), MB_ICONERROR | MB_OK); + m_tryKernel = false; + } + } UpdateTitle(); } @@ -1475,7 +1496,7 @@ void CMainFrame::OnLogGlobal(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wndCtl { m_tryGlobal = (m_pGlobalReader == nullptr); - if ((m_pLocalReader != nullptr) && m_tryGlobal) + if (m_tryGlobal) { Resume(); } @@ -1487,6 +1508,22 @@ void CMainFrame::OnLogGlobal(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wndCtl UpdateTitle(); } +void CMainFrame::OnLogKernel(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wndCtl*/) +{ + m_tryKernel = (m_pKernelReader == nullptr); + + if (m_tryKernel) + { + Resume(); + } + else + { + m_logSources.Remove(m_pKernelReader); + m_pKernelReader = nullptr; + } + UpdateTitle(); +} + void CMainFrame::OnLogHistory(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wndCtl*/) { CHistoryDlg dlg(m_logFile.GetHistorySize(), m_logFile.GetHistorySize() == 0); diff --git a/application/DebugViewpp/MainFrame.h b/application/DebugViewpp/MainFrame.h index 7490d435..0dc6ecf3 100644 --- a/application/DebugViewpp/MainFrame.h +++ b/application/DebugViewpp/MainFrame.h @@ -27,6 +27,7 @@ using ATL::CString; #include "CobaltFusion/ExecutorClient.h" #include "DebugViewppLib/DBWinBuffer.h" #include "DebugViewppLib/DBWinReader.h" +#include "DebugViewppLib/KernelReader.h" #include "DebugViewppLib/LineBuffer.h" #include "DebugViewppLib/LogSources.h" #include "DebugViewppLib/FileWriter.h" @@ -60,6 +61,7 @@ class CMainFrame : public CTabbedFrameImpl m_sourceInfos; std::unique_ptr m_GuiExecutorClient; diff --git a/application/DebugViewpp/resource.h b/application/DebugViewpp/resource.h index cf2479d5..1f72e76a 100644 --- a/application/DebugViewpp/resource.h +++ b/application/DebugViewpp/resource.h @@ -126,6 +126,8 @@ #define ID_VIEW_COPY_MESSAGES 32857 #define ID_VIEW_PROCESS_RENAME 32858 #define ID_OPTIONS_PROCESS_PREFIX 32859 +#define ID_LOG_KERNEL 32860 + // Next default values for new objects // diff --git a/application/DebugViewppLib/BinaryFileReader.cpp b/application/DebugViewppLib/BinaryFileReader.cpp index c8f81066..5e7c4f94 100644 --- a/application/DebugViewppLib/BinaryFileReader.cpp +++ b/application/DebugViewppLib/BinaryFileReader.cpp @@ -130,7 +130,7 @@ boost::signals2::connection BinaryFileReader::SubscribeToUpdate(UpdateSignal::sl // todo: Reading support for more filetypes, maybe not, who logs in unicode anyway? // see #107 -// posepone until we have a valid usecase +// postpone until we have a valid usecase // ANSI/ASCII // UTF-8 // UTF-16 diff --git a/application/DebugViewppLib/CMakeLists.txt b/application/DebugViewppLib/CMakeLists.txt index 6557ced4..9b656c19 100644 --- a/application/DebugViewppLib/CMakeLists.txt +++ b/application/DebugViewppLib/CMakeLists.txt @@ -16,6 +16,7 @@ add_library(${PROJECT_NAME} FileWriter.cpp Filter.cpp FilterType.cpp + KernelReader.cpp Line.cpp LineBuffer.cpp LogFile.cpp diff --git a/application/DebugViewppLib/KernelReader.cpp b/application/DebugViewppLib/KernelReader.cpp new file mode 100644 index 00000000..d2adfef5 --- /dev/null +++ b/application/DebugViewppLib/KernelReader.cpp @@ -0,0 +1,43 @@ +// (C) Copyright Gert-Jan de Vos and Jan Wilmans 2013. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include "CobaltFusion/Str.h" +#include "DebugViewppLib/PolledLogSource.h" +#include "DebugViewppLib/KernelReader.h" +#include "DebugViewppLib/LineBuffer.h" + +namespace fusion { +namespace debugviewpp { + +KernelReader::KernelReader(Timer& timer, ILineBuffer& linebuffer) : + PolledLogSource(timer, SourceType::Pipe, linebuffer, 1) +{ + SetDescription(L"Kernel Message Reader"); + AddMessage(0, "kernel", "Started capturing kernel messages"); + Signal(); + StartThread(); +} + +KernelReader::~KernelReader() = default; + +void KernelReader::Abort() +{ + AddMessage(0, "kernel", ""); + Signal(); + PolledLogSource::Abort(); +} + +bool KernelReader::AtEnd() const +{ + return false; +} + +void KernelReader::Poll() +{ + AddMessage(0, "kernel", "Test message..."); +} + +} // namespace debugviewpp +} // namespace fusion diff --git a/application/DebugViewppLib/LogSources.cpp b/application/DebugViewppLib/LogSources.cpp index cc9ee0c0..3fa0ea56 100644 --- a/application/DebugViewppLib/LogSources.cpp +++ b/application/DebugViewppLib/LogSources.cpp @@ -19,6 +19,7 @@ #include "DebugViewppLib/BinaryFileReader.h" #include "DebugViewppLib/AnyFileReader.h" #include "DebugViewppLib/DBWinReader.h" +#include "DebugViewppLib/KernelReader.h" #include "DebugViewppLib/DbgviewReader.h" #include "DebugViewppLib/SocketReader.h" #include "DebugViewppLib/TestSource.h" @@ -29,7 +30,7 @@ #include "DebugViewppLib/Loopback.h" // class Logsources has a vector and start a thread for LogSources::Listen() -// - Listen() exectues every LogSource::GetHandle() in m_sources and calls Notify() for any signaled handle. +// - Listen() executes every LogSource::GetHandle() in m_sources and calls Notify() for any signaled handle. // - LogSource::Notify reads input en writes to linebuffer (passed at construction) // @@ -430,6 +431,15 @@ DBWinReader* LogSources::AddDBWinReader(bool global) return pResult; } +KernelReader* LogSources::AddKernelReader() +{ + assert(m_executor.IsExecutorThread()); + auto kernelReader = std::make_unique(m_timer, m_linebuffer); + auto pResult = kernelReader.get(); + Add(std::move(kernelReader)); + return pResult; +} + TestSource* LogSources::AddTestSource() { assert(m_executor.IsExecutorThread()); diff --git a/application/DebugViewppLib/PolledLogSource.cpp b/application/DebugViewppLib/PolledLogSource.cpp index 1d3584dd..0cf328f3 100644 --- a/application/DebugViewppLib/PolledLogSource.cpp +++ b/application/DebugViewppLib/PolledLogSource.cpp @@ -45,6 +45,7 @@ PollLine::PollLine(double time, FILETIME systemTime, DWORD pid, const std::strin { } +// pollFrequency is in Hz PolledLogSource::PolledLogSource(Timer& timer, SourceType::type sourceType, ILineBuffer& linebuffer, long pollFrequency) : LogSource(timer, sourceType, linebuffer), m_microsecondInterval(pollFrequency > 0 ? 1000000 / pollFrequency : 0), diff --git a/application/include/DebugViewppLib/KernelReader.h b/application/include/DebugViewppLib/KernelReader.h new file mode 100644 index 00000000..db4f38fb --- /dev/null +++ b/application/include/DebugViewppLib/KernelReader.h @@ -0,0 +1,29 @@ +// (C) Copyright Gert-Jan de Vos and Jan Wilmans 2013. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#pragma once + +#include "PipeReader.h" +#include "PolledLogSource.h" + +namespace fusion { +namespace debugviewpp { + +class ILineBuffer; + +class KernelReader : public PolledLogSource +{ +public: + KernelReader(Timer& timer, ILineBuffer& linebuffer); + ~KernelReader() override; + void Abort() override; + bool AtEnd() const override; + +private: + void Poll() override; +}; + +} // namespace debugviewpp +} // namespace fusion diff --git a/application/include/DebugViewppLib/LogSource.h b/application/include/DebugViewppLib/LogSource.h index 611721b5..8097dcf7 100644 --- a/application/include/DebugViewppLib/LogSource.h +++ b/application/include/DebugViewppLib/LogSource.h @@ -37,7 +37,7 @@ class LogSource : public fusion::noncopyable // return a handle to wait for, Notify() is called when the handle is signaled. return INVALID_HANDLE_VALUE if the Logsource does not need to be notified virtual HANDLE GetHandle() const = 0; - // only when nofity is called LogSource::Add may be used to add lines to the LineBuffer + // only when notify is called LogSource::Add may be used to add lines to the LineBuffer virtual void Notify() = 0; // called for each line before it is added to the view, diff --git a/application/include/DebugViewppLib/LogSources.h b/application/include/DebugViewppLib/LogSources.h index 65f8674e..6e4e34e9 100644 --- a/application/include/DebugViewppLib/LogSources.h +++ b/application/include/DebugViewppLib/LogSources.h @@ -19,6 +19,7 @@ namespace fusion { namespace debugviewpp { class DBWinReader; +class KernelReader; class ProcessReader; class FileReader; class AnyFileReader; @@ -73,6 +74,7 @@ class LogSources void CallSources(std::function predicate) const; DBWinReader* AddDBWinReader(bool global); + KernelReader* AddKernelReader(); ProcessReader* AddProcessReader(const std::wstring& pathName, const std::wstring& args); BinaryFileReader* AddBinaryFileReader(const std::wstring& filename); AnyFileReader* AddAnyFileReader(const std::wstring& filename, bool keeptailing); diff --git a/application/include/DebugViewppLib/PolledLogSource.h b/application/include/DebugViewppLib/PolledLogSource.h index 7a4e38a3..4cc0256c 100644 --- a/application/include/DebugViewppLib/PolledLogSource.h +++ b/application/include/DebugViewppLib/PolledLogSource.h @@ -41,7 +41,7 @@ class PolledLogSource : public LogSource virtual void Poll(); void Abort() override; - // in contrast to the LogSource::Add methdods, these methods are de-coupled using m_backBuffer so they + // in contrast to the LogSource::Add methods, these methods are de-coupled using m_backBuffer so they // can be used to add messages from any thread. The typical use-case are messages from the UI thread. void AddMessage(Win32::Handle handle, const std::string& message); void AddMessage(DWORD pid, const std::string& processName, const std::string& message); From b92b78f7a150c7efe566201df98dffcac4497abe Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Sun, 27 Jul 2025 21:52:38 +0200 Subject: [PATCH 11/43] implemented monitoring kernel messages, rought version, verbose by default --- application/DebugViewpp/version.h | 4 +- application/DebugViewpp/version.wxi | 4 +- .../Debugview_kernel_client.cpp | 142 +----------------- .../DebugViewppLib/Debugview_kernel_client.h | 9 -- application/DebugViewppLib/KernelReader.cpp | 85 ++++++++++- .../DebugViewppLib/Debugview_kernel_client.h | 50 ++++++ .../include/DebugViewppLib/KernelReader.h | 10 ++ 7 files changed, 151 insertions(+), 153 deletions(-) delete mode 100644 application/DebugViewppLib/Debugview_kernel_client.h create mode 100644 application/include/DebugViewppLib/Debugview_kernel_client.h diff --git a/application/DebugViewpp/version.h b/application/DebugViewpp/version.h index f67cef21..9ccea24c 100644 --- a/application/DebugViewpp/version.h +++ b/application/DebugViewpp/version.h @@ -1,2 +1,2 @@ -#define VERSION 1,9,0,56 -#define VERSION_STR "1.9.0.56" +#define VERSION 1,9,0,58 +#define VERSION_STR "1.9.0.58" diff --git a/application/DebugViewpp/version.wxi b/application/DebugViewpp/version.wxi index 1321e7ba..e5164fe9 100644 --- a/application/DebugViewpp/version.wxi +++ b/application/DebugViewpp/version.wxi @@ -3,6 +3,6 @@ - - + + diff --git a/application/DebugViewppLib/Debugview_kernel_client.cpp b/application/DebugViewppLib/Debugview_kernel_client.cpp index 149f2b93..06e45daf 100644 --- a/application/DebugViewppLib/Debugview_kernel_client.cpp +++ b/application/DebugViewppLib/Debugview_kernel_client.cpp @@ -3,144 +3,15 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#define WIN32_LEAN_AND_MEAN -#include -#include -#include -#include - -#include -#include - -#pragma warning(disable:4200) - -#define FILE_DEVICE_DBGV 0x8305 - -#define DBGV_CAPTURE_KERNEL CTL_CODE(FILE_DEVICE_DBGV, 0, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x00 //enable capture kernel -#define DBGV_UNCAPTURE_KERNEL CTL_CODE(FILE_DEVICE_DBGV, 1, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x04 // -#define DBGV_CLEAR_DISPLAY CTL_CODE(FILE_DEVICE_DBGV, 2, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x08 //clear display -#define DBGV_READ_LOG CTL_CODE(FILE_DEVICE_DBGV, 3, METHOD_NEITHER, FILE_ANY_ACCESS) //0x0f //read kernel log -#define DBGV_SET_PASSTHROUGH CTL_CODE(FILE_DEVICE_DBGV, 4, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x10 //enable passthrough -#define DBGV_UNSET_PASSTHROUGH CTL_CODE(FILE_DEVICE_DBGV, 5, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x14 // -#define DBGV_IS_DRIVER_AVAILABLE CTL_CODE(FILE_DEVICE_DBGV, 8, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x20 //test driver is valid or functional -#define DBGV_GET_DRIVER_VERSION CTL_CODE(FILE_DEVICE_DBGV, 9, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x24 //driver version, 4.70 = 0x800 -#define DBGV_SET_CARRIAGE_RETURN CTL_CODE(FILE_DEVICE_DBGV, 0x0d, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x34 //force carriage return -#define DBGV_UNSET_CARRIAGE_RETURN CTL_CODE(FILE_DEVICE_DBGV, 0x0e, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x38 // -#define DBGV_ENABLE_FILTER_STATE CTL_CODE(FILE_DEVICE_DBGV, 0x0f, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x3C //enable log verbose -#define DBGV_SET_FILTER_STATE CTL_CODE(FILE_DEVICE_DBGV, 0x10, METHOD_BUFFERED, FILE_ANY_ACCESS) //0x40 //reset log verbose - -#pragma pack(1) -typedef struct -{ - DWORD dwIndex; - FILETIME liSystemTime; - LARGE_INTEGER liPerfCounter; - CHAR strData[0]; -}LOG_ITEM, *PLOG_ITEM; -#pragma pack() - -int monitor_kernel() -{ - std::wstring strDeviceName = L"\\\\.\\dbgv"; - - HANDLE hFile = CreateFile(strDeviceName.c_str(), - GENERIC_READ, - FILE_SHARE_READ, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - NULL); - DWORD dwErr = ::GetLastError(); - if (hFile != INVALID_HANDLE_VALUE) - { - BOOL bRet = FALSE; - - //enable capture - DWORD dwOut = 0; - DWORD dwReturned = 0; - bRet = DeviceIoControl(hFile, DBGV_CAPTURE_KERNEL, NULL, 0, &dwOut, sizeof(dwOut), &dwReturned, NULL); - if (!bRet) - { - printf("DBGV_CAPTURE_KERNEL failed, err=%d\n", ::GetLastError()); - CloseHandle(hFile); - return -1; - } - - //enable kernel verboase log - bRet = DeviceIoControl(hFile, DBGV_ENABLE_FILTER_STATE, NULL, 0, NULL, 0, NULL, NULL); - if (!bRet) - { - printf("DBGV_ENABLE_FILTER_STATE failed, err=%d\n", ::GetLastError()); - CloseHandle(hFile); - return -2; - } - - //try capture 1000 logs and exit - const DWORD dwBufLen = 0x10000; - PLOG_ITEM pBuf = (PLOG_ITEM)malloc(dwBufLen); - DWORD nCount = 0, nMaxCount = 1000; - while (1) - { - memset(pBuf, 0, dwBufLen); - dwOut = 0; - bRet = DeviceIoControl(hFile, DBGV_READ_LOG, NULL, 0, pBuf, dwBufLen, &dwOut, NULL); - if (dwOut > 0) - { - PLOG_ITEM pNextItem = pBuf; - while (pNextItem->dwIndex != 0) - { - SYSTEMTIME st = { 0 }; - FILETIME lt = { 0 }; - FileTimeToLocalFileTime(&pNextItem->liSystemTime, <); - FileTimeToSystemTime(<, &st); - printf("%d, Time:%04d-%02d-%02d %02d:%02d:%02d.%03d, %s\n", - pNextItem->dwIndex, - st.wYear, - st.wMonth, - st.wDay, - st.wHour, - st.wMinute, - st.wSecond, - st.wMilliseconds, - pNextItem->strData); - pNextItem = (PLOG_ITEM)((char*)pNextItem + sizeof(LOG_ITEM) + (strlen(pNextItem->strData) + 4) / 4 * 4); - - nCount++; - if (nCount > nMaxCount) - { - break; - } - } - } - - ::Sleep(10); - } - - ::free(pBuf); - - bRet = DeviceIoControl(hFile, DBGV_UNCAPTURE_KERNEL, NULL, 0, NULL, 0, NULL, NULL); - if (!bRet) - { - printf("DBGV_UNCAPTURE_KERNEL failed, err=%d\n", ::GetLastError()); - CloseHandle(hFile); - return -1; - } - - CloseHandle(hFile); - } - - return 0; -}; - -/// Driver +#include "DebugViewppLib/Debugview_kernel_client.h" constexpr const char* DRIVER_SERVICE_NAME = "debugviewdriver"; constexpr const char* DRIVER_DISPLAY_NAME = "DebugViewPP Kernel Message Driver"; const std::string driverPath = "dbgv.sys"; -void InstallDriver() +void InstallKernelMessagesDriver() { - std::cout << "InstallDriver...\n"; + UninstallKernelMessagesDriver(); SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); if (!hSCManager) { std::cout << "Failed to open Service Control Manager. Error: " << GetLastError() << std::endl; @@ -166,15 +37,12 @@ void InstallDriver() std::cout << "Failed to create service. Error: " << GetLastError() << std::endl; CloseServiceHandle(hSCManager); } - CloseServiceHandle(hService); CloseServiceHandle(hSCManager); - std::cout << "InstallDriver done...\n"; } -void UninstallDriver() +void UninstallKernelMessagesDriver() { - std::cout << "UninstallDriver...\n"; SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); if (!hSCManager) { std::cout << "Failed to open Service Control Manager. Error: " << GetLastError() << std::endl; @@ -191,8 +59,6 @@ void UninstallDriver() CloseServiceHandle(hService); CloseServiceHandle(hSCManager); } - CloseServiceHandle(hService); CloseServiceHandle(hSCManager); - std::cout << "UninstallDriver done...\n"; } diff --git a/application/DebugViewppLib/Debugview_kernel_client.h b/application/DebugViewppLib/Debugview_kernel_client.h deleted file mode 100644 index 50d57b34..00000000 --- a/application/DebugViewppLib/Debugview_kernel_client.h +++ /dev/null @@ -1,9 +0,0 @@ -// (C) Copyright Gert-Jan de Vos and Jan Wilmans 2013. -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -int monitor_kernel(); -void InstallDriver(); -void UninstallDriver(); - diff --git a/application/DebugViewppLib/KernelReader.cpp b/application/DebugViewppLib/KernelReader.cpp index d2adfef5..68d3abcf 100644 --- a/application/DebugViewppLib/KernelReader.cpp +++ b/application/DebugViewppLib/KernelReader.cpp @@ -7,20 +7,74 @@ #include "DebugViewppLib/PolledLogSource.h" #include "DebugViewppLib/KernelReader.h" #include "DebugViewppLib/LineBuffer.h" +#include "DebugViewppLib/Debugview_kernel_client.h" namespace fusion { namespace debugviewpp { +void KernelReader::StartListening() +{ + Win32::Handle handle(::CreateFile(strDbgviewKernelDriverDeviceName, + GENERIC_READ, + FILE_SHARE_READ, + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL)); + if (handle.get() == INVALID_HANDLE_VALUE) + { + AddMessage(0, "internal", "Could not connected to kernel messages driver"); + return; + } + + // enable capture + DWORD dwOut = 0; + DWORD dwReturned = 0; + BOOL bRet = DeviceIoControl(handle.get(), DBGV_CAPTURE_KERNEL, NULL, 0, &dwOut, sizeof(dwOut), &dwReturned, NULL); + if (!bRet) + { + printf("DBGV_CAPTURE_KERNEL failed, err=%d\n", ::GetLastError()); + return; + } + + // enable verbose kernel messages + bRet = DeviceIoControl(handle.get(), DBGV_ENABLE_FILTER_STATE, NULL, 0, NULL, 0, NULL, NULL); + if (!bRet) + { + printf("DBGV_ENABLE_FILTER_STATE failed, err=%d\n", ::GetLastError()); + return; + } + m_handle = std::move(handle); + m_pBuf = (PLOG_ITEM)malloc(dwBufLen); +} + +void KernelReader::StopListening() +{ + BOOL bRet = DeviceIoControl(m_handle.get(), DBGV_UNCAPTURE_KERNEL, NULL, 0, NULL, 0, NULL, NULL); + if (!bRet) + { + printf("DBGV_UNCAPTURE_KERNEL failed, err=%d\n", ::GetLastError()); + } + m_handle.reset(); + ::free(m_pBuf); +} + KernelReader::KernelReader(Timer& timer, ILineBuffer& linebuffer) : PolledLogSource(timer, SourceType::Pipe, linebuffer, 1) { SetDescription(L"Kernel Message Reader"); + InstallKernelMessagesDriver(); AddMessage(0, "kernel", "Started capturing kernel messages"); Signal(); + StartListening(); StartThread(); } -KernelReader::~KernelReader() = default; +KernelReader::~KernelReader() +{ + StopListening(); + UninstallKernelMessagesDriver(); +} void KernelReader::Abort() { @@ -36,7 +90,34 @@ bool KernelReader::AtEnd() const void KernelReader::Poll() { - AddMessage(0, "kernel", "Test message..."); + memset(m_pBuf, 0, dwBufLen); + DWORD dwOut = 0; + ::DeviceIoControl(m_handle.get(), DBGV_READ_LOG, NULL, 0, m_pBuf, dwBufLen, &dwOut, NULL); + if (dwOut == 0) return; // no messages to be read + + PLOG_ITEM pNextItem = m_pBuf; + while (pNextItem->dwIndex != 0) + { + SYSTEMTIME st = { 0 }; + FILETIME lt = { 0 }; + FileTimeToLocalFileTime(&pNextItem->liSystemTime, <); + FileTimeToSystemTime(<, &st); + + char message[4000]; + sprintf(message, "%d, Time:%04d-%02d-%02d %02d:%02d:%02d.%03d, %s\n", + pNextItem->dwIndex, + st.wYear, + st.wMonth, + st.wDay, + st.wHour, + st.wMinute, + st.wSecond, + st.wMilliseconds, + pNextItem->strData); + + AddMessage(0, "kernel", message); + pNextItem = (PLOG_ITEM)((char*)pNextItem + sizeof(LOG_ITEM) + (strlen(pNextItem->strData) + 4) / 4 * 4); + } } } // namespace debugviewpp diff --git a/application/include/DebugViewppLib/Debugview_kernel_client.h b/application/include/DebugViewppLib/Debugview_kernel_client.h new file mode 100644 index 00000000..d1a2f8c9 --- /dev/null +++ b/application/include/DebugViewppLib/Debugview_kernel_client.h @@ -0,0 +1,50 @@ +// (C) Copyright Gert-Jan de Vos and Jan Wilmans 2013. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#pragma once + +void InstallKernelMessagesDriver(); +void UninstallKernelMessagesDriver(); + +#include +#include +#include +#include + +#include +#include + +// this is the dbgv.sys interface +#define FILE_DEVICE_DBGV 0x8305 + +#define DBGV_CAPTURE_KERNEL CTL_CODE(FILE_DEVICE_DBGV, DWORD(0), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x00 //enable capture kernel +#define DBGV_UNCAPTURE_KERNEL CTL_CODE(FILE_DEVICE_DBGV, DWORD(1), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x04 // +#define DBGV_CLEAR_DISPLAY CTL_CODE(FILE_DEVICE_DBGV, DWORD(2), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x08 //clear display +#define DBGV_READ_LOG CTL_CODE(FILE_DEVICE_DBGV, DWORD(3), METHOD_NEITHER, FILE_ANY_ACCESS) //0x0f //read kernel log +#define DBGV_SET_PASSTHROUGH CTL_CODE(FILE_DEVICE_DBGV, DWORD(4), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x10 //enable passthrough +#define DBGV_UNSET_PASSTHROUGH CTL_CODE(FILE_DEVICE_DBGV, DWORD(5), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x14 // +#define DBGV_IS_DRIVER_AVAILABLE CTL_CODE(FILE_DEVICE_DBGV, DWORD(8), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x20 //test driver is valid or functional +#define DBGV_GET_DRIVER_VERSION CTL_CODE(FILE_DEVICE_DBGV, DWORD(9), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x24 //driver version, 4.70 = 0x800 +#define DBGV_SET_CARRIAGE_RETURN CTL_CODE(FILE_DEVICE_DBGV, DWORD(0x0d), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x34 //force carriage return +#define DBGV_UNSET_CARRIAGE_RETURN CTL_CODE(FILE_DEVICE_DBGV, DWORD(0x0e), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x38 // +#define DBGV_ENABLE_FILTER_STATE CTL_CODE(FILE_DEVICE_DBGV, DWORD(0x0f), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x3C //enable log verbose +#define DBGV_SET_FILTER_STATE CTL_CODE(FILE_DEVICE_DBGV, DWORD(0x10), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x40 //reset log verbose + +// suppress the non-standard use of zero-sized array in struct/union +#pragma warning(disable:4200) + +#pragma pack(1) +typedef struct +{ + DWORD dwIndex; + FILETIME liSystemTime; + LARGE_INTEGER liPerfCounter; + CHAR strData[0]; +} LOG_ITEM, *PLOG_ITEM; +#pragma pack() + +constexpr const wchar_t * strDbgviewKernelDriverDeviceName = L"\\\\.\\dbgv"; +constexpr const DWORD dwBufLen = 0x10000; + diff --git a/application/include/DebugViewppLib/KernelReader.h b/application/include/DebugViewppLib/KernelReader.h index db4f38fb..80f8ca0e 100644 --- a/application/include/DebugViewppLib/KernelReader.h +++ b/application/include/DebugViewppLib/KernelReader.h @@ -8,6 +8,10 @@ #include "PipeReader.h" #include "PolledLogSource.h" +#include "Win32/Win32Lib.h" + +#include "Debugview_kernel_client.h" + namespace fusion { namespace debugviewpp { @@ -23,6 +27,12 @@ class KernelReader : public PolledLogSource private: void Poll() override; + + void StartListening(); + void StopListening(); + + Win32::Handle m_handle; + PLOG_ITEM m_pBuf; }; } // namespace debugviewpp From 8bbea0380f85dec32a247c5ea533332cd8866ea3 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Sun, 27 Jul 2025 22:35:15 +0200 Subject: [PATCH 12/43] accuracy improvement for relative timestamps and cleaned up kernel messages --- application/CobaltFusion/Timer.cpp | 30 ++++++++++++------- application/DebugViewppLib/KernelReader.cpp | 19 +----------- .../DebugViewppLib/PolledLogSource.cpp | 8 ++--- application/include/CobaltFusion/Timer.h | 5 ++-- .../include/DebugViewppLib/PolledLogSource.h | 2 +- 5 files changed, 28 insertions(+), 36 deletions(-) diff --git a/application/CobaltFusion/Timer.cpp b/application/CobaltFusion/Timer.cpp index 8f03760d..efe462dd 100644 --- a/application/CobaltFusion/Timer.cpp +++ b/application/CobaltFusion/Timer.cpp @@ -11,6 +11,13 @@ namespace fusion { +long long GetTicks() +{ + LARGE_INTEGER li; + QueryPerformanceCounter(&li); + return li.QuadPart; +} + Timer::Timer() : m_timerUnit(0.0), m_init(false), @@ -33,21 +40,22 @@ void Timer::Reset() double Timer::Get() { - auto ticks = GetTicks(); - std::lock_guard lock(m_mutex); + return GetTimeSince(GetTicks()); +} + +double Timer::GetTimeSince(long long ticks) +{ + // double-checked locking, prevents pessimizing the happy-path if (!m_init) { - m_offset = ticks; - m_init = true; + std::lock_guard lock(m_mutex); + if (!m_init) + { + m_offset = ticks; + m_init = true; + } } return (ticks - m_offset) * m_timerUnit; } -long long Timer::GetTicks() -{ - LARGE_INTEGER li; - QueryPerformanceCounter(&li); - return li.QuadPart; -} - } // namespace fusion diff --git a/application/DebugViewppLib/KernelReader.cpp b/application/DebugViewppLib/KernelReader.cpp index 68d3abcf..dcd7df71 100644 --- a/application/DebugViewppLib/KernelReader.cpp +++ b/application/DebugViewppLib/KernelReader.cpp @@ -98,24 +98,7 @@ void KernelReader::Poll() PLOG_ITEM pNextItem = m_pBuf; while (pNextItem->dwIndex != 0) { - SYSTEMTIME st = { 0 }; - FILETIME lt = { 0 }; - FileTimeToLocalFileTime(&pNextItem->liSystemTime, <); - FileTimeToSystemTime(<, &st); - - char message[4000]; - sprintf(message, "%d, Time:%04d-%02d-%02d %02d:%02d:%02d.%03d, %s\n", - pNextItem->dwIndex, - st.wYear, - st.wMonth, - st.wDay, - st.wHour, - st.wMinute, - st.wSecond, - st.wMilliseconds, - pNextItem->strData); - - AddMessage(0, "kernel", message); + AddMessage(0, "kernel", pNextItem->strData); pNextItem = (PLOG_ITEM)((char*)pNextItem + sizeof(LOG_ITEM) + (strlen(pNextItem->strData) + 4) / 4 * 4); } } diff --git a/application/DebugViewppLib/PolledLogSource.cpp b/application/DebugViewppLib/PolledLogSource.cpp index 0cf328f3..33e0d237 100644 --- a/application/DebugViewppLib/PolledLogSource.cpp +++ b/application/DebugViewppLib/PolledLogSource.cpp @@ -13,7 +13,7 @@ namespace debugviewpp { PollLine::PollLine(Win32::Handle handle, const std::string& message, const LogSource* pLogSource) : - timesValid(false), + timesAreValid(false), time(0.0), systemTime(FILETIME()), handle(std::move(handle)), @@ -24,7 +24,7 @@ PollLine::PollLine(Win32::Handle handle, const std::string& message, const LogSo } PollLine::PollLine(DWORD pid, const std::string& processName, const std::string& message, const LogSource* pLogSource) : - timesValid(false), + timesAreValid(false), time(0.0), systemTime(FILETIME()), pid(pid), @@ -35,7 +35,7 @@ PollLine::PollLine(DWORD pid, const std::string& processName, const std::string& } PollLine::PollLine(double time, FILETIME systemTime, DWORD pid, const std::string& processName, const std::string& message, const LogSource* pLogSource) : - timesValid(true), + timesAreValid(true), time(time), systemTime(systemTime), pid(pid), @@ -116,7 +116,7 @@ void PolledLogSource::Notify() { Add(line.handle.release(), line.message); } - else if (line.timesValid) + else if (line.timesAreValid) { Add(line.time, line.systemTime, line.pid, line.processName, line.message); } diff --git a/application/include/CobaltFusion/Timer.h b/application/include/CobaltFusion/Timer.h index 649d5abc..1c820ae8 100644 --- a/application/include/CobaltFusion/Timer.h +++ b/application/include/CobaltFusion/Timer.h @@ -10,6 +10,8 @@ namespace fusion { +long long GetTicks(); + class Timer { public: @@ -17,10 +19,9 @@ class Timer void Reset(); double Get(); + double GetTimeSince(long long); private: - static long long GetTicks(); - double m_timerUnit; bool m_init; long long m_offset; diff --git a/application/include/DebugViewppLib/PolledLogSource.h b/application/include/DebugViewppLib/PolledLogSource.h index 4cc0256c..83bad940 100644 --- a/application/include/DebugViewppLib/PolledLogSource.h +++ b/application/include/DebugViewppLib/PolledLogSource.h @@ -20,7 +20,7 @@ struct PollLine PollLine(DWORD pid, const std::string& processName, const std::string& message, const LogSource* pLogSource); PollLine(double time, FILETIME systemTime, DWORD pid, const std::string& processName, const std::string& message, const LogSource* pLogSource); - bool timesValid; + bool timesAreValid; // indicated 'time' and 'systemTime' were assigned values at construction double time; FILETIME systemTime; Win32::Handle handle; From 815b830fa1643907c229bc74126bd3d2ba5d92c8 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Sun, 27 Jul 2025 23:31:24 +0200 Subject: [PATCH 13/43] Correctly interpret the timestamps from kernel messages --- application/CobaltFusion/Timer.cpp | 4 ++-- application/DebugViewpp/MainFrame.cpp | 5 +++++ application/DebugViewppLib/Debugview_kernel_client.cpp | 2 +- application/DebugViewppLib/KernelReader.cpp | 1 - application/DebugViewppLib/LogSource.cpp | 6 ++++++ application/include/CobaltFusion/Timer.h | 2 +- .../include/DebugViewppLib/Debugview_kernel_client.h | 8 ++++---- application/include/DebugViewppLib/LogSource.h | 3 +++ 8 files changed, 22 insertions(+), 9 deletions(-) diff --git a/application/CobaltFusion/Timer.cpp b/application/CobaltFusion/Timer.cpp index efe462dd..d0671ab4 100644 --- a/application/CobaltFusion/Timer.cpp +++ b/application/CobaltFusion/Timer.cpp @@ -40,10 +40,10 @@ void Timer::Reset() double Timer::Get() { - return GetTimeSince(GetTicks()); + return GetTimeSinceOrigin(GetTicks()); } -double Timer::GetTimeSince(long long ticks) +double Timer::GetTimeSinceOrigin(long long ticks) { // double-checked locking, prevents pessimizing the happy-path if (!m_init) diff --git a/application/DebugViewpp/MainFrame.cpp b/application/DebugViewpp/MainFrame.cpp index ecdd8962..8017da39 100644 --- a/application/DebugViewpp/MainFrame.cpp +++ b/application/DebugViewpp/MainFrame.cpp @@ -1399,6 +1399,11 @@ void CMainFrame::Pause() m_logSources.Remove(m_pGlobalReader); m_pGlobalReader = nullptr; } + if (m_pKernelReader != nullptr) + { + m_logSources.Remove(m_pKernelReader); + m_pKernelReader = nullptr; + } m_logSources.AddMessage(""); } diff --git a/application/DebugViewppLib/Debugview_kernel_client.cpp b/application/DebugViewppLib/Debugview_kernel_client.cpp index 06e45daf..22bb07ed 100644 --- a/application/DebugViewppLib/Debugview_kernel_client.cpp +++ b/application/DebugViewppLib/Debugview_kernel_client.cpp @@ -6,7 +6,7 @@ #include "DebugViewppLib/Debugview_kernel_client.h" constexpr const char* DRIVER_SERVICE_NAME = "debugviewdriver"; -constexpr const char* DRIVER_DISPLAY_NAME = "DebugViewPP Kernel Message Driver"; +constexpr const char* DRIVER_DISPLAY_NAME = "DbgView Kernel Message Driver"; const std::string driverPath = "dbgv.sys"; void InstallKernelMessagesDriver() diff --git a/application/DebugViewppLib/KernelReader.cpp b/application/DebugViewppLib/KernelReader.cpp index dcd7df71..35e1b4a4 100644 --- a/application/DebugViewppLib/KernelReader.cpp +++ b/application/DebugViewppLib/KernelReader.cpp @@ -64,7 +64,6 @@ KernelReader::KernelReader(Timer& timer, ILineBuffer& linebuffer) : { SetDescription(L"Kernel Message Reader"); InstallKernelMessagesDriver(); - AddMessage(0, "kernel", "Started capturing kernel messages"); Signal(); StartListening(); StartThread(); diff --git a/application/DebugViewppLib/LogSource.cpp b/application/DebugViewppLib/LogSource.cpp index 43880d6c..6641cfa2 100644 --- a/application/DebugViewppLib/LogSource.cpp +++ b/application/DebugViewppLib/LogSource.cpp @@ -92,5 +92,11 @@ void LogSource::AddInternal(const std::string& message) const m_linebuffer.Add(m_timer.Get(), Win32::GetSystemTimeAsFileTime(), 0, "[internal]", message, this); } +double LogSource::GetTimeSinceOrigin(long long ticks) const +{ + return m_timer.GetTimeSinceOrigin(ticks); +} + + } // namespace debugviewpp } // namespace fusion diff --git a/application/include/CobaltFusion/Timer.h b/application/include/CobaltFusion/Timer.h index 1c820ae8..96276c9b 100644 --- a/application/include/CobaltFusion/Timer.h +++ b/application/include/CobaltFusion/Timer.h @@ -19,7 +19,7 @@ class Timer void Reset(); double Get(); - double GetTimeSince(long long); + double GetTimeSinceOrigin(long long); private: double m_timerUnit; diff --git a/application/include/DebugViewppLib/Debugview_kernel_client.h b/application/include/DebugViewppLib/Debugview_kernel_client.h index d1a2f8c9..f874a596 100644 --- a/application/include/DebugViewppLib/Debugview_kernel_client.h +++ b/application/include/DebugViewppLib/Debugview_kernel_client.h @@ -38,10 +38,10 @@ void UninstallKernelMessagesDriver(); #pragma pack(1) typedef struct { - DWORD dwIndex; - FILETIME liSystemTime; - LARGE_INTEGER liPerfCounter; - CHAR strData[0]; + DWORD dwIndex; + FILETIME liSystemTime; + LARGE_INTEGER liPerfCounter; + CHAR strData[0]; } LOG_ITEM, *PLOG_ITEM; #pragma pack() diff --git a/application/include/DebugViewppLib/LogSource.h b/application/include/DebugViewppLib/LogSource.h index 8097dcf7..9d6604ea 100644 --- a/application/include/DebugViewppLib/LogSource.h +++ b/application/include/DebugViewppLib/LogSource.h @@ -64,6 +64,9 @@ class LogSource : public fusion::noncopyable // used by FileReader void Add(const std::string& message); + // get the relative time since the start of the session given the QWORD of the performance counter + double GetTimeSinceOrigin(long long ticks) const; + private: bool m_autoNewLine = true; ILineBuffer& m_linebuffer; From 31b6d48da8c0a830734e81dd98e94a0ac88ba447 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Mon, 28 Jul 2025 00:02:52 +0200 Subject: [PATCH 14/43] renamed kernelMessageBufferSize and replaced c-style cast with reinterpret_cast --- application/DebugViewppLib/KernelReader.cpp | 6 +++--- .../include/DebugViewppLib/Debugview_kernel_client.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/application/DebugViewppLib/KernelReader.cpp b/application/DebugViewppLib/KernelReader.cpp index 35e1b4a4..cd0e13c6 100644 --- a/application/DebugViewppLib/KernelReader.cpp +++ b/application/DebugViewppLib/KernelReader.cpp @@ -45,7 +45,7 @@ void KernelReader::StartListening() return; } m_handle = std::move(handle); - m_pBuf = (PLOG_ITEM)malloc(dwBufLen); + m_pBuf = reinterpret_cast(malloc(kernelMessageBufferSize)); } void KernelReader::StopListening() @@ -89,9 +89,9 @@ bool KernelReader::AtEnd() const void KernelReader::Poll() { - memset(m_pBuf, 0, dwBufLen); + memset(m_pBuf, 0, kernelMessageBufferSize); DWORD dwOut = 0; - ::DeviceIoControl(m_handle.get(), DBGV_READ_LOG, NULL, 0, m_pBuf, dwBufLen, &dwOut, NULL); + ::DeviceIoControl(m_handle.get(), DBGV_READ_LOG, NULL, 0, m_pBuf, kernelMessageBufferSize, &dwOut, NULL); if (dwOut == 0) return; // no messages to be read PLOG_ITEM pNextItem = m_pBuf; diff --git a/application/include/DebugViewppLib/Debugview_kernel_client.h b/application/include/DebugViewppLib/Debugview_kernel_client.h index f874a596..ddb51b20 100644 --- a/application/include/DebugViewppLib/Debugview_kernel_client.h +++ b/application/include/DebugViewppLib/Debugview_kernel_client.h @@ -46,5 +46,5 @@ typedef struct #pragma pack() constexpr const wchar_t * strDbgviewKernelDriverDeviceName = L"\\\\.\\dbgv"; -constexpr const DWORD dwBufLen = 0x10000; +constexpr const DWORD kernelMessageBufferSize = 0x10000; From 58750f59d89dcafc9ec881310bcebddc45a4a2d3 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Mon, 28 Jul 2025 01:23:45 +0200 Subject: [PATCH 15/43] added Verbose Kernel Message toggle and Pass-through mode toggle --- application/DebugViewpp/DebugView++.rc | 6 ++- application/DebugViewpp/MainFrame.cpp | 24 ++++++++++ application/DebugViewpp/MainFrame.h | 10 ++++- application/DebugViewpp/resource.h | 4 +- .../Debugview_kernel_client.cpp | 15 ++++--- application/DebugViewppLib/KernelReader.cpp | 38 +++++++++++++++- .../DebugViewppLib/Debugview_kernel_client.h | 45 ++++++++++++++----- .../include/DebugViewppLib/KernelReader.h | 4 ++ 8 files changed, 124 insertions(+), 22 deletions(-) diff --git a/application/DebugViewpp/DebugView++.rc b/application/DebugViewpp/DebugView++.rc index c4a10c83..f4fbac73 100644 --- a/application/DebugViewpp/DebugView++.rc +++ b/application/DebugViewpp/DebugView++.rc @@ -112,6 +112,8 @@ BEGIN MENUITEM "&Pause\tPause", ID_LOG_PAUSE MENUITEM "Capture &Global Win32", ID_LOG_GLOBAL MENUITEM "Capture &Kernel Messages", ID_LOG_KERNEL + MENUITEM "&Verbose Kernel Messages", ID_LOG_KERNEL_VERBOSE + MENUITEM "Pass-&Through mode", ID_LOG_KERNEL_PASSTHROUGH MENUITEM "Connect DebugView &Agent", ID_LOG_DEBUGVIEW_AGENT MENUITEM "Sources...", ID_LOG_SOURCES MENUITEM "History Size...", ID_LOG_HISTORY @@ -622,7 +624,9 @@ STRINGTABLE BEGIN ID_LOG_PAUSE "Pause log recording\nPause" ID_LOG_GLOBAL "Capture logs from all processes\nCapture Global Win32" - ID_LOG_KERNEL "Capture logs from kerenel processes\nCapture Kernel Messages" + ID_LOG_KERNEL "Capture logs from kernel processes\nCapture Kernel Messages" + ID_LOG_KERNEL_VERBOSE "Enable verbose kernel messsages\nVerbose Kernel Messages" + ID_LOG_KERNEL_PASSTHROUGH "Enable Pass-throught mode\nPass-Through mode" ID_LOG_DEBUGVIEW_AGENT "Connect DbgView Agent\nConnect DbgView Agent" ID_LOG_HISTORY "Configure log file history size\nConfigure History Size" ID_VIEW_CLEAR "Clear log view\nClear View" diff --git a/application/DebugViewpp/MainFrame.cpp b/application/DebugViewpp/MainFrame.cpp index 8017da39..b2a8c27c 100644 --- a/application/DebugViewpp/MainFrame.cpp +++ b/application/DebugViewpp/MainFrame.cpp @@ -130,6 +130,8 @@ BEGIN_MSG_MAP2(CMainFrame) COMMAND_ID_HANDLER_EX(ID_LOG_PAUSE, OnLogPause) COMMAND_ID_HANDLER_EX(ID_LOG_GLOBAL, OnLogGlobal) COMMAND_ID_HANDLER_EX(ID_LOG_KERNEL, OnLogKernel) + COMMAND_ID_HANDLER_EX(ID_LOG_KERNEL_VERBOSE, OnLogKernelVerbose) + COMMAND_ID_HANDLER_EX(ID_LOG_KERNEL_PASSTHROUGH, OnLogKernelPassThrough) COMMAND_ID_HANDLER_EX(ID_LOG_HISTORY, OnLogHistory) COMMAND_ID_HANDLER_EX(ID_LOG_DEBUGVIEW_AGENT, OnLogDebugviewAgent) COMMAND_ID_HANDLER_EX(ID_VIEW_FIND, OnViewFind) @@ -330,6 +332,10 @@ void CMainFrame::UpdateUI() UIEnable(ID_LOG_GLOBAL, !!m_pLocalReader); UISetCheck(ID_LOG_GLOBAL, m_tryGlobal); UISetCheck(ID_LOG_KERNEL, m_tryKernel); + UIEnable(ID_LOG_KERNEL_VERBOSE, !!m_pKernelReader); + UIEnable(ID_LOG_KERNEL_PASSTHROUGH, !!m_pKernelReader); + UISetCheck(ID_LOG_KERNEL_VERBOSE, m_verboseKernelMessage); + UISetCheck(ID_LOG_KERNEL_PASSTHROUGH, m_passthroughMode); } std::wstring FormatDateTime(const SYSTEMTIME& systemTime) @@ -1529,6 +1535,24 @@ void CMainFrame::OnLogKernel(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wndCtl UpdateTitle(); } +void CMainFrame::OnLogKernelVerbose(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wndCtl*/) +{ + m_verboseKernelMessage = !m_verboseKernelMessage; + if (m_pKernelReader) + { + m_pKernelReader->SetVerbose(m_verboseKernelMessage); + } +} + +void CMainFrame::OnLogKernelPassThrough(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wndCtl*/) +{ + m_passthroughMode = !m_passthroughMode; + if (m_pKernelReader) + { + m_pKernelReader->SetPassThrough(m_passthroughMode); + } +} + void CMainFrame::OnLogHistory(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wndCtl*/) { CHistoryDlg dlg(m_logFile.GetHistorySize(), m_logFile.GetHistorySize() == 0); diff --git a/application/DebugViewpp/MainFrame.h b/application/DebugViewpp/MainFrame.h index 0dc6ecf3..0864c7f2 100644 --- a/application/DebugViewpp/MainFrame.h +++ b/application/DebugViewpp/MainFrame.h @@ -62,6 +62,8 @@ class CMainFrame : public CTabbedFrameImpl m_sourceInfos; std::unique_ptr m_GuiExecutorClient; diff --git a/application/DebugViewpp/resource.h b/application/DebugViewpp/resource.h index 1f72e76a..02590ed2 100644 --- a/application/DebugViewpp/resource.h +++ b/application/DebugViewpp/resource.h @@ -127,6 +127,8 @@ #define ID_VIEW_PROCESS_RENAME 32858 #define ID_OPTIONS_PROCESS_PREFIX 32859 #define ID_LOG_KERNEL 32860 +#define ID_LOG_KERNEL_VERBOSE 32861 +#define ID_LOG_KERNEL_PASSTHROUGH 32862 // Next default values for new objects @@ -134,7 +136,7 @@ #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 401 -#define _APS_NEXT_COMMAND_VALUE 32857 +#define _APS_NEXT_COMMAND_VALUE 32863 #define _APS_NEXT_CONTROL_VALUE 801 #define _APS_NEXT_SYMED_VALUE 107 #endif diff --git a/application/DebugViewppLib/Debugview_kernel_client.cpp b/application/DebugViewppLib/Debugview_kernel_client.cpp index 22bb07ed..efdbc4df 100644 --- a/application/DebugViewppLib/Debugview_kernel_client.cpp +++ b/application/DebugViewppLib/Debugview_kernel_client.cpp @@ -11,7 +11,9 @@ const std::string driverPath = "dbgv.sys"; void InstallKernelMessagesDriver() { + // try to uninstall first, in case the driver is somehow still loaded. UninstallKernelMessagesDriver(); + SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); if (!hSCManager) { std::cout << "Failed to open Service Control Manager. Error: " << GetLastError() << std::endl; @@ -44,20 +46,23 @@ void InstallKernelMessagesDriver() void UninstallKernelMessagesDriver() { SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); - if (!hSCManager) { + if (!hSCManager) + { std::cout << "Failed to open Service Control Manager. Error: " << GetLastError() << std::endl; + return; } SC_HANDLE hService = OpenServiceA(hSCManager, DRIVER_SERVICE_NAME, DELETE); - if (!hService) { + if (!hService) + { std::cout << "Failed to open service. Error: " << GetLastError() << std::endl; CloseServiceHandle(hSCManager); + return; } - if (!DeleteService(hService)) { + if (!DeleteService(hService)) + { std::cout << "Failed to delete service. Error: " << GetLastError() << std::endl; - CloseServiceHandle(hService); - CloseServiceHandle(hSCManager); } CloseServiceHandle(hService); CloseServiceHandle(hSCManager); diff --git a/application/DebugViewppLib/KernelReader.cpp b/application/DebugViewppLib/KernelReader.cpp index cd0e13c6..6e36571c 100644 --- a/application/DebugViewppLib/KernelReader.cpp +++ b/application/DebugViewppLib/KernelReader.cpp @@ -38,7 +38,7 @@ void KernelReader::StartListening() } // enable verbose kernel messages - bRet = DeviceIoControl(handle.get(), DBGV_ENABLE_FILTER_STATE, NULL, 0, NULL, 0, NULL, NULL); + bRet = DeviceIoControl(handle.get(), DBGV_SET_VERBOSE_MESSAGES, NULL, 0, NULL, 0, NULL, NULL); if (!bRet) { printf("DBGV_ENABLE_FILTER_STATE failed, err=%d\n", ::GetLastError()); @@ -102,5 +102,41 @@ void KernelReader::Poll() } } +void KernelReader::SetKernelMessagesDriverFeature(DWORD feature) +{ + DWORD dwOut = 0; + DWORD dwReturned = 0; + BOOL bRet = DeviceIoControl(m_handle.get(), feature, NULL, 0, &dwOut, sizeof(dwOut), &dwReturned, NULL); + if (!bRet) + { + printf("SetKernelMessagesDriverFeature for '%s' failed, err=%d\n", feature_to_string(feature).c_str(), ::GetLastError()); + return; + } +} + +void KernelReader::SetVerbose(bool value) +{ + if (value) + { + SetKernelMessagesDriverFeature(DBGV_SET_VERBOSE_MESSAGES); + } + else + { + SetKernelMessagesDriverFeature(DBGV_UNSET_VERBOSE_MESSAGES); + } +} + +void KernelReader::SetPassThrough(bool value) +{ + if (value) + { + SetKernelMessagesDriverFeature(DBGV_SET_PASSTHROUGH); + } + else + { + SetKernelMessagesDriverFeature(DBGV_UNSET_PASSTHROUGH); + } +} + } // namespace debugviewpp } // namespace fusion diff --git a/application/include/DebugViewppLib/Debugview_kernel_client.h b/application/include/DebugViewppLib/Debugview_kernel_client.h index ddb51b20..7a49c538 100644 --- a/application/include/DebugViewppLib/Debugview_kernel_client.h +++ b/application/include/DebugViewppLib/Debugview_kernel_client.h @@ -19,18 +19,39 @@ void UninstallKernelMessagesDriver(); // this is the dbgv.sys interface #define FILE_DEVICE_DBGV 0x8305 -#define DBGV_CAPTURE_KERNEL CTL_CODE(FILE_DEVICE_DBGV, DWORD(0), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x00 //enable capture kernel -#define DBGV_UNCAPTURE_KERNEL CTL_CODE(FILE_DEVICE_DBGV, DWORD(1), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x04 // -#define DBGV_CLEAR_DISPLAY CTL_CODE(FILE_DEVICE_DBGV, DWORD(2), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x08 //clear display -#define DBGV_READ_LOG CTL_CODE(FILE_DEVICE_DBGV, DWORD(3), METHOD_NEITHER, FILE_ANY_ACCESS) //0x0f //read kernel log -#define DBGV_SET_PASSTHROUGH CTL_CODE(FILE_DEVICE_DBGV, DWORD(4), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x10 //enable passthrough -#define DBGV_UNSET_PASSTHROUGH CTL_CODE(FILE_DEVICE_DBGV, DWORD(5), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x14 // -#define DBGV_IS_DRIVER_AVAILABLE CTL_CODE(FILE_DEVICE_DBGV, DWORD(8), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x20 //test driver is valid or functional -#define DBGV_GET_DRIVER_VERSION CTL_CODE(FILE_DEVICE_DBGV, DWORD(9), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x24 //driver version, 4.70 = 0x800 -#define DBGV_SET_CARRIAGE_RETURN CTL_CODE(FILE_DEVICE_DBGV, DWORD(0x0d), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x34 //force carriage return -#define DBGV_UNSET_CARRIAGE_RETURN CTL_CODE(FILE_DEVICE_DBGV, DWORD(0x0e), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x38 // -#define DBGV_ENABLE_FILTER_STATE CTL_CODE(FILE_DEVICE_DBGV, DWORD(0x0f), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x3C //enable log verbose -#define DBGV_SET_FILTER_STATE CTL_CODE(FILE_DEVICE_DBGV, DWORD(0x10), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x40 //reset log verbose +#define DBGV_CAPTURE_KERNEL CTL_CODE(FILE_DEVICE_DBGV, DWORD(0), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x00 //enable capture kernel +#define DBGV_UNCAPTURE_KERNEL CTL_CODE(FILE_DEVICE_DBGV, DWORD(1), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x04 // +#define DBGV_CLEAR_DISPLAY CTL_CODE(FILE_DEVICE_DBGV, DWORD(2), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x08 //clear display +#define DBGV_READ_LOG CTL_CODE(FILE_DEVICE_DBGV, DWORD(3), METHOD_NEITHER, FILE_ANY_ACCESS) //0x0f //read kernel log +#define DBGV_SET_PASSTHROUGH CTL_CODE(FILE_DEVICE_DBGV, DWORD(4), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x10 //enable passthrough +#define DBGV_UNSET_PASSTHROUGH CTL_CODE(FILE_DEVICE_DBGV, DWORD(5), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x14 // +#define DBGV_IS_DRIVER_AVAILABLE CTL_CODE(FILE_DEVICE_DBGV, DWORD(8), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x20 //test driver is valid or functional +#define DBGV_GET_DRIVER_VERSION CTL_CODE(FILE_DEVICE_DBGV, DWORD(9), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x24 //driver version, 4.70 = 0x800 +#define DBGV_SET_CARRIAGE_RETURN CTL_CODE(FILE_DEVICE_DBGV, DWORD(0x0d), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x34 //force carriage return +#define DBGV_UNSET_CARRIAGE_RETURN CTL_CODE(FILE_DEVICE_DBGV, DWORD(0x0e), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x38 // +#define DBGV_SET_VERBOSE_MESSAGES CTL_CODE(FILE_DEVICE_DBGV, DWORD(0x0f), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x3C //enable log verbose +#define DBGV_UNSET_VERBOSE_MESSAGES CTL_CODE(FILE_DEVICE_DBGV, DWORD(0x10), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x40 //reset log verbose + +inline std::string feature_to_string(DWORD value) +{ + switch (value) + { + case DBGV_CAPTURE_KERNEL: return "DBGV_CAPTURE_KERNEL"; + case DBGV_UNCAPTURE_KERNEL: return "DBGV_UNCAPTURE_KERNEL"; + case DBGV_CLEAR_DISPLAY: return "DBGV_CLEAR_DISPLAY"; + case DBGV_READ_LOG: return "DBGV_READ_LOG"; + case DBGV_SET_PASSTHROUGH: return "DBGV_SET_PASSTHROUGH"; + case DBGV_UNSET_PASSTHROUGH: return "DBGV_UNSET_PASSTHROUGH"; + case DBGV_IS_DRIVER_AVAILABLE: return "DBGV_IS_DRIVER_AVAILABLE"; + case DBGV_GET_DRIVER_VERSION: return "DBGV_GET_DRIVER_VERSION"; + case DBGV_SET_CARRIAGE_RETURN: return "DBGV_SET_CARRIAGE_RETURN"; + case DBGV_UNSET_CARRIAGE_RETURN: return "DBGV_UNSET_CARRIAGE_RETURN"; + case DBGV_SET_VERBOSE_MESSAGES: return "DBGV_SET_VERBOSE_MESSAGES"; + case DBGV_UNSET_VERBOSE_MESSAGES: return "DBGV_UNSET_VERBOSE_MESSAGES"; + default: break; + } + return std::to_string(value); +} // suppress the non-standard use of zero-sized array in struct/union #pragma warning(disable:4200) diff --git a/application/include/DebugViewppLib/KernelReader.h b/application/include/DebugViewppLib/KernelReader.h index 80f8ca0e..745698be 100644 --- a/application/include/DebugViewppLib/KernelReader.h +++ b/application/include/DebugViewppLib/KernelReader.h @@ -25,11 +25,15 @@ class KernelReader : public PolledLogSource void Abort() override; bool AtEnd() const override; + void SetVerbose(bool value); + void SetPassThrough(bool value); + private: void Poll() override; void StartListening(); void StopListening(); + void SetKernelMessagesDriverFeature(DWORD); Win32::Handle m_handle; PLOG_ITEM m_pBuf; From 9f7a89478c781563617d3fd000099054895a1664 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Mon, 28 Jul 2025 01:38:40 +0200 Subject: [PATCH 16/43] default to verbose kernel messages off --- application/DebugViewppLib/KernelReader.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/application/DebugViewppLib/KernelReader.cpp b/application/DebugViewppLib/KernelReader.cpp index 6e36571c..56835f18 100644 --- a/application/DebugViewppLib/KernelReader.cpp +++ b/application/DebugViewppLib/KernelReader.cpp @@ -37,13 +37,6 @@ void KernelReader::StartListening() return; } - // enable verbose kernel messages - bRet = DeviceIoControl(handle.get(), DBGV_SET_VERBOSE_MESSAGES, NULL, 0, NULL, 0, NULL, NULL); - if (!bRet) - { - printf("DBGV_ENABLE_FILTER_STATE failed, err=%d\n", ::GetLastError()); - return; - } m_handle = std::move(handle); m_pBuf = reinterpret_cast(malloc(kernelMessageBufferSize)); } From b3367f894673c2a8f7c79c27022e519e1ff3921d Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Mon, 28 Jul 2025 01:58:30 +0200 Subject: [PATCH 17/43] readme updated --- README.md | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index dedd4212..037b700a 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,11 @@ +Debugview++ v1.9.x.x (2025 Update coming soon!) +------------------------------ +- Noteworthy new features: capture kernel messages, verbose mode and pass-through mode. + -- Notice: +* This project is in low-maintenance mode, this means new features are only added if PRs are provided with tests. +* Updates are limited to keeping the status-quo and OS-related updated. * I'm looking for maintainers, so if you would like to join me in bugfixing or adding features, please let me know. * 2022 update: The project was migrated to VS2022 and boost 1.80, WindowsXP (32 bit) support was removed. * the OutputForwarder companion extension for VS2022 can be found in the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=JanWilmans.OutputForwarder2022) @@ -7,13 +13,11 @@ Debugview++, currently at v1.9 (2024 Update!) ------------------------------ - - ![Mastodon Follow](https://img.shields.io/mastodon/follow/109524813797978857?domain=https%3A%2F%2Ftoot.community&style=social) +![Github Follow](https://img.shields.io/github/followers/janwilmans) -[![All Releases](https://img.shields.io/github/downloads/CobaltFusion/DebugViewPP/total.svg)](https://github.com/CobaltFusion/DebugViewPP/releases/latest) +[![All Releases](https://img.shields.io/github/downloads/CobaltFusion/DebugViewPP/total.svg)](https://github.com/CobaltFusion/DebugViewPP/releases/latest) [![Current Release](https://img.shields.io/github/downloads/CobaltFusion/DebugViewPP/latest/total.svg)](https://github.com/CobaltFusion/DebugViewPP/releases/latest) [![Appveyor Build status](https://ci.appveyor.com/api/projects/status/ho962elp8chrdga0/branch/develop?svg=true)](https://ci.appveyor.com/project/janwilmans/debugview/branch/develop) @@ -21,9 +25,9 @@ alt="follow on Twitter"> [Download latest release](https://github.com/djeedjay/DebugViewPP/releases), I would really like to hear what you think! Leave any [**comments here**](https://github.com/djeedjay/DebugViewPP/issues/283) -[Download head version ](https://ci.appveyor.com/project/janwilmans/debugview/build/artifacts) ** only pick this if your feeling lucky and want to try the latest commits ** +[Download head version](https://ci.appveyor.com/project/janwilmans/debugview/build/artifacts) ** only pick this if your feeling lucky and want to try the latest commits ** -Questions? Tweet me at [**@janwilmans**](https://twitter.com/janwilmans) or chat on skype at 'janwilmans'. +Questions? Find me at [@janwilmans.bsky.social](janwilmans.bsky.social) or chat on discord as 'janwilmans'. There is also a [slack channel](https://cpplang.slack.com/messages/debugviewpp). If you need an invite, go [here](https://cpplang.now.sh/). Debugview++ started as a viewer for Win32 OutputDebugString messages in the style of @@ -58,7 +62,7 @@ So when is this Debugview++ thing useful? - first of all, with debugview++ you can see messages from different processes, not just 'attached' processes. - also: filtering, coloring and linking. To make sense of a large amount of information humans need to filter it or order it understand it. Also it helps if important events have different colors to quickly interpret the occurring patterns. -- finally, filtering is nice, but sometimes you need to see a line in its context to understand it, this is where linked views can help to quickly switch between a fully filtered view and a fully detailed view. +- finally, filtering is nice, but sometimes you need to see a line in its context to understand it, this is where linked views can help to quickly switch between a fully filtered view and a fully detailed view. New in stable version 1.8.x: - bugfixes (namely in file-tailing) @@ -99,12 +103,12 @@ Here are some features: - tailing files (drag ascii or UTF files into debugview to tail it) And more features: - + - capture both Win32 and Global Win32 messages - tabbed views - resolve process PID to name and track their lifetime - filter by process or message -- advanced filtering, exclude, track, stop, clear (optionally using regular expressions) +- advanced filtering, exclude, track, stop, clear (optionally using regular expressions) - line and token highlighting (create your own syntax highlighting) - SAIT (search-as-I-type) + token highlighting - bookmarks @@ -113,7 +117,7 @@ And more features: - commandline version - capture stdin piped messages, allows you to connect any kind of logging - beep-filter for monitoring without seeing the screen (To hear it make sure a 'Default Beep' sound is defined in Control Panel->Sounds) -- clear Log now releases the message buffer instead of reusing the memory (useful when running debugview +- clear Log now releases the message buffer instead of reusing the memory (useful when running debugview for a very long time) - tailing logfiles over samba network (experimental) - support for reading and tailing Sysinternals Dbgview logfiles (in the four most common formats) @@ -179,7 +183,7 @@ Filters: Filters can be defined per view, for example choose File -> New View, and the filter dialog will popup. -Pressing OK will open a new view without any filters. +Pressing OK will open a new view without any filters. Different types of filters: @@ -188,18 +192,18 @@ just type any word or part of a word to match. - include: if an include filter is added only lines containing a matching expression will be included. - exclude: lines containing a matching expression will be excluded from the view, excluding always takes precedence over including -- once: only the first line containing a matching expression will be included, this resets automatically at 'clear view'. +- once: only the first line containing a matching expression will be included, this resets automatically at 'clear view'. - highlight: lines containing a matching expression will be highlighted using the specified foreground and background colors - token: only the matching expression will be highlighted using the specified foreground and background colors -- track: lines containing a matching expression will be focused and centered if possible. Note: auto scroll turns off if a track filter is matched +- track: lines containing a matching expression will be focused and centered if possible. Note: auto scroll turns off if a track filter is matched - stop: if a matching expression is found autoscroll is turned off, all track filters will be disabled and the line is focused. Note: stop filters work only if autoscroll is on, think of a stop-filter as a single-shot track filter -- beep: a standard windows beep (configurable in config panel->sounds) is played +- beep: a standard windows beep (configurable in config panel->sounds) is played *Practical uses*: Include, exclude, once and highlight filters are the most intuitive filters to use. Track and stop can be a little confusing, let me try to give some examples. -**track**: use this filter to focus interesting lines that do not occur very often, but at a regular interval, for example, so you are monitoring a process that logs output every 30 seconds and you need to check the result. +**track**: use this filter to focus interesting lines that do not occur very often, but at a regular interval, for example, so you are monitoring a process that logs output every 30 seconds and you need to check the result. **stop**: this filter is good when some special event occurs (an exception?) and you want to inspect the context of the event in the log before continuing. A press of the 'end' button will resume auto scrolling. @@ -263,7 +267,7 @@ Since we use ATL and support Windows XP still some extra installation options ar - zip.exe, http://gnuwin32.sourceforge.net/packages/zip.htm, choose [zip-3.0-setup.exe] decompress the archive and you're done (add zip.exe to the path) -# VS2019 +# VS2019 There are [known issues](https://twitter.com/janwilmans/status/1369956897726599176?s=20) with compilation using Visual Studio 2019 16.10.x (preview at March 11, 2021). Know good combinations are Boost 1.69 + Visual studio 2019 16.9.1. (I have seen problems with Asio in Boost 1.72 + Visual studio 2019 16.9.1 and Boost 1.72 + Visual studio 2019 16.10.x) From 574001d31cb5e503cf7e7d0aff9da8625f0602b2 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Mon, 28 Jul 2025 03:24:11 +0200 Subject: [PATCH 18/43] fixed resource embedding and proper error handling when permissions are missing --- .gitattributes | 11 ++++ application/DebugViewpp/DebugView++.cpp | 48 +++++++++--------- application/DebugViewpp/MainFrame.cpp | 43 +++++++++++++--- application/DebugViewpp/MainFrame.h | 2 + application/DebugViewpp/res/Dbgv.sys | Bin 0 -> 23392 bytes application/DebugViewpp/resource.h | 1 + application/DebugViewpp/version.h | 4 +- application/DebugViewpp/version.wxi | 4 +- .../Debugview_kernel_client.cpp | 5 +- application/DebugViewppLib/KernelReader.cpp | 6 +-- application/Win32Lib/Win32Lib.cpp | 4 +- 11 files changed, 88 insertions(+), 40 deletions(-) diff --git a/.gitattributes b/.gitattributes index 966ce42e..6be5fc01 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,13 @@ * text=auto eol=crlf *.sh text=auto eol=lf + +# Define binary files +*.sys -text diff +*.sln -text diff +*.suo -text diff +*.vcxproj -text diff +*.gif -text diff +*.ico -text diff +*.jpeg -text diff +*.jpg -text diff +*.png -text diff diff --git a/application/DebugViewpp/DebugView++.cpp b/application/DebugViewpp/DebugView++.cpp index 31784609..f4a9e740 100644 --- a/application/DebugViewpp/DebugView++.cpp +++ b/application/DebugViewpp/DebugView++.cpp @@ -14,6 +14,9 @@ #include "atleverything.h" +#include +#include // for std::getenv + //#define ENABLE_CRASHPAD #ifdef ENABLE_CRASHPAD #include "crashpad.h" @@ -88,25 +91,26 @@ int ForwardMessagesFromPipe(HANDLE hPipe) return 0; } -void WriteDriverFromResource() +class DebugConsole { - HRSRC hRes = FindResource(NULL, MAKEINTRESOURCE(IDR_DBGV_DRIVER), RT_RCDATA); - if (hRes) +public: + DebugConsole() { - HGLOBAL hLoadedRes = LoadResource(NULL, hRes); - if (hLoadedRes) - { - DWORD dwSize = SizeofResource(NULL, hRes); - void* pLockedRes = LockResource(hLoadedRes); - if (pLockedRes) - { - std::ofstream outFile("dbgv.sys", std::ios::binary); - outFile.write(static_cast(pLockedRes), dwSize); - outFile.close(); - } - } + ::AllocConsole(); + ::freopen_s(&standardOut, "CONOUT$", "wb", stdout); + std::cout.clear(); } -} + + ~DebugConsole() + { + fclose(standardOut); + fclose(stdout); + FreeConsole(); + } + +private: + FILE* standardOut = nullptr; +}; int Main(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPWSTR /*lpstrCmdLine*/, int cmdShow) { @@ -121,13 +125,11 @@ int Main(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPWSTR /*lpstrCmdLine AtlInitCommonControls(ICC_BAR_CLASSES); // add flags to support other controls -#ifdef CONSOLE_DEBUG - FILE* standardOut; - AllocConsole(); - freopen_s(&standardOut, "CONOUT$", "wb", stdout); - auto fileGuard = make_guard([standardOut] { fclose(standardOut); }); - std::cout.clear(); -#endif + std::unique_ptr debugConsole; + if (std::getenv("DEBUGVIEWPP_CONSOLE_DEBUG") != nullptr) + { + debugConsole = std::make_unique(); + } CAppModuleInitialization moduleInit(_Module, hInstance); diff --git a/application/DebugViewpp/MainFrame.cpp b/application/DebugViewpp/MainFrame.cpp index b2a8c27c..86fa7596 100644 --- a/application/DebugViewpp/MainFrame.cpp +++ b/application/DebugViewpp/MainFrame.cpp @@ -192,7 +192,10 @@ CMainFrame::CMainFrame() : m_notifyIconData.cbSize = 0; } -CMainFrame::~CMainFrame() = default; +CMainFrame::~CMainFrame() +{ + RemoveDriver(); +} void CMainFrame::SetLogging() { @@ -284,11 +287,6 @@ void CMainFrame::OnClose() Shell_NotifyIcon(NIM_DELETE, &m_notifyIconData); m_notifyIconData.cbSize = 0; } - -#ifdef CONSOLE_DEBUG - fclose(stdout); - FreeConsole(); -#endif } LRESULT CMainFrame::OnQueryEndSession(WPARAM /*unused*/, LPARAM /*unused*/) @@ -1519,18 +1517,51 @@ void CMainFrame::OnLogGlobal(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wndCtl UpdateTitle(); } +static const auto driver_name = "dbgv.sys"; + +void WriteDriverFromResource() +{ + if (std::filesystem::exists(driver_name)) + { + return; + } + HRSRC hRes = FindResource(NULL, MAKEINTRESOURCE(IDR_DBGV_DRIVER), RT_RCDATA); + if (hRes) + { + HGLOBAL hLoadedRes = LoadResource(NULL, hRes); + if (hLoadedRes) + { + DWORD dwSize = SizeofResource(NULL, hRes); + void* pLockedRes = LockResource(hLoadedRes); + if (pLockedRes) + { + std::ofstream outFile(driver_name, std::ios::binary); + outFile.write(static_cast(pLockedRes), dwSize); + outFile.close(); + } + } + } +} + +void RemoveDriver() +{ + std::filesystem::remove(driver_name); +} + void CMainFrame::OnLogKernel(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wndCtl*/) { m_tryKernel = (m_pKernelReader == nullptr); if (m_tryKernel) { + WriteDriverFromResource(); Resume(); } else { m_logSources.Remove(m_pKernelReader); m_pKernelReader = nullptr; + RemoveDriver(); } UpdateTitle(); } diff --git a/application/DebugViewpp/MainFrame.h b/application/DebugViewpp/MainFrame.h index 0864c7f2..1dda1ff0 100644 --- a/application/DebugViewpp/MainFrame.h +++ b/application/DebugViewpp/MainFrame.h @@ -44,6 +44,8 @@ class DbgviewReader; using SelectedTabItem = CLogViewTabItem; +void RemoveDriver(); + class CMainFrame : public CTabbedFrameImpl>, public CUpdateUI, public ExceptionHandler, diff --git a/application/DebugViewpp/res/Dbgv.sys b/application/DebugViewpp/res/Dbgv.sys index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..70316ba0369e01eb15262c962c522b9ba3a9a539 100644 GIT binary patch literal 23392 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 literal 0 HcmV?d00001 diff --git a/application/DebugViewpp/resource.h b/application/DebugViewpp/resource.h index 02590ed2..886bed9f 100644 --- a/application/DebugViewpp/resource.h +++ b/application/DebugViewpp/resource.h @@ -141,3 +141,4 @@ #define _APS_NEXT_SYMED_VALUE 107 #endif #endif + diff --git a/application/DebugViewpp/version.h b/application/DebugViewpp/version.h index 9ccea24c..fdc0633a 100644 --- a/application/DebugViewpp/version.h +++ b/application/DebugViewpp/version.h @@ -1,2 +1,2 @@ -#define VERSION 1,9,0,58 -#define VERSION_STR "1.9.0.58" +#define VERSION 1,9,0,63 +#define VERSION_STR "1.9.0.63" diff --git a/application/DebugViewpp/version.wxi b/application/DebugViewpp/version.wxi index e5164fe9..a71ae563 100644 --- a/application/DebugViewpp/version.wxi +++ b/application/DebugViewpp/version.wxi @@ -3,6 +3,6 @@ - - + + diff --git a/application/DebugViewppLib/Debugview_kernel_client.cpp b/application/DebugViewppLib/Debugview_kernel_client.cpp index efdbc4df..b0bc891f 100644 --- a/application/DebugViewppLib/Debugview_kernel_client.cpp +++ b/application/DebugViewppLib/Debugview_kernel_client.cpp @@ -48,14 +48,15 @@ void UninstallKernelMessagesDriver() SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); if (!hSCManager) { - std::cout << "Failed to open Service Control Manager. Error: " << GetLastError() << std::endl; + std::cout << "Failed to open Service Control Manager for uninstall. Error: " << GetLastError() << std::endl; return; } SC_HANDLE hService = OpenServiceA(hSCManager, DRIVER_SERVICE_NAME, DELETE); if (!hService) { - std::cout << "Failed to open service. Error: " << GetLastError() << std::endl; + // this happens when the service is first loaded, because we always uninstall before installing + // std::cout << "Failed to open service for uninstall. Error: " << GetLastError() << std::endl; CloseServiceHandle(hSCManager); return; } diff --git a/application/DebugViewppLib/KernelReader.cpp b/application/DebugViewppLib/KernelReader.cpp index 56835f18..4cb458e8 100644 --- a/application/DebugViewppLib/KernelReader.cpp +++ b/application/DebugViewppLib/KernelReader.cpp @@ -23,8 +23,8 @@ void KernelReader::StartListening() NULL)); if (handle.get() == INVALID_HANDLE_VALUE) { - AddMessage(0, "internal", "Could not connected to kernel messages driver"); - return; + printf("Could not connect to kernel messages driver"); + throw std::runtime_error("Could not connect to kernel messages driver"); } // enable capture @@ -34,7 +34,7 @@ void KernelReader::StartListening() if (!bRet) { printf("DBGV_CAPTURE_KERNEL failed, err=%d\n", ::GetLastError()); - return; + throw std::runtime_error("Could not connect to kernel messages driver"); } m_handle = std::move(handle); diff --git a/application/Win32Lib/Win32Lib.cpp b/application/Win32Lib/Win32Lib.cpp index d55e19e8..e687e145 100644 --- a/application/Win32Lib/Win32Lib.cpp +++ b/application/Win32Lib/Win32Lib.cpp @@ -652,13 +652,13 @@ std::wstring GetSEHcodeDescription(DWORD code) case STATUS_NO_MEMORY: return L"EXCEPTION_NO_MEMORY"; case STATUS_ORDINAL_NOT_FOUND : return L"EXCEPTION_ORDINAL_NOT_FOUND"; case STATUS_ENTRYPOINT_NOT_FOUND: return L"EXCEPTION_ENTRYPOINT_NOT_FOUND"; - case STATUS_CONTROL_C_EXIT: return L"EXCEPTION_CONTROL_C_EXIT"; + case STATUS_CONTROL_C_EXIT: return L"EXCEPTION_CONTROL_C_EXIT"; case STATUS_DLL_INIT_FAILED: return L"DllMain returned false"; case STATUS_FLOAT_MULTIPLE_FAULTS: return L"EXCEPTION_FLOAT_MULTIPLE_FAULTS"; case STATUS_FLOAT_MULTIPLE_TRAPS: return L"EXCEPTION_FLOAT_MULTIPLE_TRAPS"; case STATUS_REG_NAT_CONSUMPTION: return L"EXCEPTION_REG_NAT_CONSUMPTION"; case STATUS_STACK_BUFFER_OVERRUN: return L"EXCEPTION_STACK_BUFFER_OVERRUN"; - case STATUS_INVALID_CRUNTIME_PARAMETER: return L"EXCEPTION_INVALID_CRUNTIME_PARAMETER"; + case STATUS_INVALID_CRUNTIME_PARAMETER: return L"EXCEPTION_INVALID_CRUNTIME_PARAMETER"; case STATUS_ASSERTION_FAILURE: return L"EXCEPTION_ASSERTION_FAILURE"; case DBG_EXCEPTION_HANDLED: return L"DBG_EXCEPTION_HANDLED"; case DBG_CONTINUE: return L"DBG_CONTINUE"; From f273d1849da65caae5ead9ead50c50e99e6b353a Mon Sep 17 00:00:00 2001 From: Michael Maltsev <4129781+m417z@users.noreply.github.com> Date: Sat, 25 May 2024 15:09:52 +0300 Subject: [PATCH 19/43] Use a statically-linked runtime library --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5500eb50..8b88d3f5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.16) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") include(CMakeLists.buildnumber) From dffd1630e001b787e4ec8bcdfd31b0b42c06443d Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Mon, 28 Jul 2025 03:33:20 +0200 Subject: [PATCH 20/43] bumped version to 1.9.0.64, now we are using the statically-linked runtime library again, was broken since the cmake migration after 1.8.x.x --- application/DebugViewpp/version.h | 4 ++-- application/DebugViewpp/version.wxi | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/application/DebugViewpp/version.h b/application/DebugViewpp/version.h index fdc0633a..de854cde 100644 --- a/application/DebugViewpp/version.h +++ b/application/DebugViewpp/version.h @@ -1,2 +1,2 @@ -#define VERSION 1,9,0,63 -#define VERSION_STR "1.9.0.63" +#define VERSION 1,9,0,64 +#define VERSION_STR "1.9.0.64" diff --git a/application/DebugViewpp/version.wxi b/application/DebugViewpp/version.wxi index a71ae563..a54d31b9 100644 --- a/application/DebugViewpp/version.wxi +++ b/application/DebugViewpp/version.wxi @@ -3,6 +3,6 @@ - - + + From d660502d29fabb997d46ffb5af598ee6cd48cae9 Mon Sep 17 00:00:00 2001 From: Guspan Tanadi <36249910+guspan-tanadi@users.noreply.github.com> Date: Thu, 24 Apr 2025 10:20:57 +0700 Subject: [PATCH 21/43] Update comments docs section link --- .github/workflows/cmake.yml | 2 +- doc/DesignOverview.md | 2 +- utils/apply-clang-format.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 7cd831a1..477bfcb6 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -14,7 +14,7 @@ jobs: build: # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac. # You can convert this to a matrix build if you need cross-platform coverage. - # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix + # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-matrix runs-on: windows-2022 steps: diff --git a/doc/DesignOverview.md b/doc/DesignOverview.md index 148e2488..656eb438 100644 --- a/doc/DesignOverview.md +++ b/doc/DesignOverview.md @@ -1,7 +1,7 @@ Project dependencies -------------------- -![DebugView++ Projects](art/DebugViewProjects.png "DebugView++ Projects") +![DebugView++ Projects](../art/DebugViewProjects.png "DebugView++ Projects") 1. Project **DebugViewCmd** CommandLine version of debugview++, diff --git a/utils/apply-clang-format.py b/utils/apply-clang-format.py index 01ace570..f3e325f0 100644 --- a/utils/apply-clang-format.py +++ b/utils/apply-clang-format.py @@ -85,7 +85,7 @@ def main(): if HasInvalidArgs(): print ("Usage: " + os.path.basename(sys.argv[0]) + " [/s] [/f]") print (" note: gen\ and gen64\ directories are ignored") - print (" /s = recursively process files in subdirecties"); + print (" /s = recursively process files in subdirectories"); print (" /f = actually format the selected files instead of just listing them"); print ("") print (" example: ") From d3743e5ea0504da4935ffd8a23f436a59d7a20ec Mon Sep 17 00:00:00 2001 From: Ishmaeel Date: Fri, 30 Jul 2021 22:51:25 +0300 Subject: [PATCH 22/43] Remove color support from "Include" filter. I would very much like to use the "include" filter but the fact that it has precedence over dynamic process colors has been a deal breaker. Now include filter does not apply text coloring either, very much like the exclude filter. Not a big functionality loss because it is still possible to recolor included lines by defining an additional highlight rule. Perhaps more work, but definitely more flexibility. --- application/DebugViewpp/FilterPage.cpp | 1 + application/DebugViewpp/LogView.cpp | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/application/DebugViewpp/FilterPage.cpp b/application/DebugViewpp/FilterPage.cpp index fd568929..66fa4943 100644 --- a/application/DebugViewpp/FilterPage.cpp +++ b/application/DebugViewpp/FilterPage.cpp @@ -49,6 +49,7 @@ bool SupportsColor(FilterType::type filterType) switch (filterType) { case FilterType::Exclude: + case FilterType::Include: return false; default: return true; diff --git a/application/DebugViewpp/LogView.cpp b/application/DebugViewpp/LogView.cpp index ad136775..77b6bda6 100644 --- a/application/DebugViewpp/LogView.cpp +++ b/application/DebugViewpp/LogView.cpp @@ -2107,7 +2107,6 @@ bool FilterSupportsColor(FilterType::type value) { switch (value) { - case FilterType::Include: case FilterType::Highlight: case FilterType::Track: case FilterType::Stop: From 779a0e31d1dbb3124c8a93d556c5a67fb5d7a841 Mon Sep 17 00:00:00 2001 From: Ishmaeel Date: Sat, 31 Jul 2021 07:54:00 +0300 Subject: [PATCH 23/43] Disregard "Auto Newline" user setting and always assume auto newline in FileReader This may not be the proper place to fix this but it works nicely at least as a temporary measure. The alternative is a potential DoS when trying to open large files as discussed in #352. Now FileReader always splits on newlines regardless of what the user selected for "Auto Newline" option from the menu. Fixes #352. --- application/DebugViewppLib/FileReader.cpp | 5 +++++ application/include/DebugViewppLib/FileReader.h | 1 + 2 files changed, 6 insertions(+) diff --git a/application/DebugViewppLib/FileReader.cpp b/application/DebugViewppLib/FileReader.cpp index 77673e15..45cec035 100644 --- a/application/DebugViewppLib/FileReader.cpp +++ b/application/DebugViewppLib/FileReader.cpp @@ -43,6 +43,11 @@ void FileReader::Abort() } } +bool FileReader::GetAutoNewLine() const +{ + return true; +} + void FileReader::PollThread() { // FILE_NOTIFY_CHANGE_SIZE is broken on windows vista and above in that it does not diff --git a/application/include/DebugViewppLib/FileReader.h b/application/include/DebugViewppLib/FileReader.h index cf220940..3f5e6bef 100644 --- a/application/include/DebugViewppLib/FileReader.h +++ b/application/include/DebugViewppLib/FileReader.h @@ -30,6 +30,7 @@ class FileReader : public LogSource HANDLE GetHandle() const override; void Notify() override; void PreProcess(Line& line) const override; + virtual bool GetAutoNewLine() const override; protected: virtual void AddLine(const std::string& line); From c43325561f4f271fc0726f91db06fd2604634a62 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Mon, 28 Jul 2025 21:55:26 +0200 Subject: [PATCH 24/43] actually start / stop the service --- application/DebugViewpp/MainFrame.cpp | 3 +- .../Debugview_kernel_client.cpp | 69 ++++++++++++++++++- application/DebugViewppLib/KernelReader.cpp | 6 +- 3 files changed, 73 insertions(+), 5 deletions(-) diff --git a/application/DebugViewpp/MainFrame.cpp b/application/DebugViewpp/MainFrame.cpp index 86fa7596..0dcf9440 100644 --- a/application/DebugViewpp/MainFrame.cpp +++ b/application/DebugViewpp/MainFrame.cpp @@ -1517,7 +1517,7 @@ void CMainFrame::OnLogGlobal(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wndCtl UpdateTitle(); } -static const auto driver_name = "dbgv.sys"; +static const auto driver_name = "C:\\Windows\\System32\\drivers\\dbgvpp.sys"; void WriteDriverFromResource() { @@ -1535,6 +1535,7 @@ void WriteDriverFromResource() void* pLockedRes = LockResource(hLoadedRes); if (pLockedRes) { + std::cout << "write to " << driver_name << "\n"; std::ofstream outFile(driver_name, std::ios::binary); outFile.write(static_cast(pLockedRes), dwSize); outFile.close(); diff --git a/application/DebugViewppLib/Debugview_kernel_client.cpp b/application/DebugViewppLib/Debugview_kernel_client.cpp index b0bc891f..c15647b4 100644 --- a/application/DebugViewppLib/Debugview_kernel_client.cpp +++ b/application/DebugViewppLib/Debugview_kernel_client.cpp @@ -7,13 +7,76 @@ constexpr const char* DRIVER_SERVICE_NAME = "debugviewdriver"; constexpr const char* DRIVER_DISPLAY_NAME = "DbgView Kernel Message Driver"; -const std::string driverPath = "dbgv.sys"; +const std::string driverPath = "C:\\Windows\\System32\\drivers\\dbgvpp.sys"; + +bool FileExists(const std::string& path) { + DWORD fileAttributes = GetFileAttributesA(path.c_str()); + return (fileAttributes != INVALID_FILE_ATTRIBUTES && + !(fileAttributes & FILE_ATTRIBUTE_DIRECTORY)); +} + +bool StartDriverSvc() +{ + SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); + if (!hSCManager) return false; + + SC_HANDLE hService = OpenServiceA(hSCManager, DRIVER_SERVICE_NAME, SERVICE_START); + if (!hService) { + CloseServiceHandle(hSCManager); + return false; + } + + if (!StartService(hService, 0, NULL)) { + if (GetLastError() == ERROR_SERVICE_ALREADY_RUNNING) { + std::cout << "Service is already running.\n"; + CloseServiceHandle(hService); + CloseServiceHandle(hSCManager); + return true; + } + std::cout << "Failed to start service. Error: " << GetLastError() << std::endl; + CloseServiceHandle(hService); + CloseServiceHandle(hSCManager); + return false; + } + + CloseServiceHandle(hService); + CloseServiceHandle(hSCManager); + return true; +} + +bool StopDriverSvc() +{ + SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); + if (!hSCManager) return false; + + SC_HANDLE hService = OpenServiceA(hSCManager, DRIVER_SERVICE_NAME, SERVICE_STOP); + if (!hService) { + CloseServiceHandle(hSCManager); + return false; + } + + SERVICE_STATUS status; + if (!ControlService(hService, SERVICE_CONTROL_STOP, &status)) { + DWORD err = GetLastError(); + if (err != ERROR_SERVICE_NOT_ACTIVE) { + std::cout << "Failed to stop service. Error: " << err << std::endl; + } + } + + CloseServiceHandle(hService); + CloseServiceHandle(hSCManager); + return true; +} void InstallKernelMessagesDriver() { // try to uninstall first, in case the driver is somehow still loaded. UninstallKernelMessagesDriver(); + if (!FileExists(driverPath)) { + std::cout << "Driver file not found at: " << driverPath << std::endl; + } + SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); if (!hSCManager) { std::cout << "Failed to open Service Control Manager. Error: " << GetLastError() << std::endl; @@ -41,10 +104,14 @@ void InstallKernelMessagesDriver() } CloseServiceHandle(hService); CloseServiceHandle(hSCManager); + + StartDriverSvc(); } void UninstallKernelMessagesDriver() { + StopDriverSvc(); + SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); if (!hSCManager) { diff --git a/application/DebugViewppLib/KernelReader.cpp b/application/DebugViewppLib/KernelReader.cpp index 4cb458e8..3852f411 100644 --- a/application/DebugViewppLib/KernelReader.cpp +++ b/application/DebugViewppLib/KernelReader.cpp @@ -23,8 +23,8 @@ void KernelReader::StartListening() NULL)); if (handle.get() == INVALID_HANDLE_VALUE) { - printf("Could not connect to kernel messages driver"); - throw std::runtime_error("Could not connect to kernel messages driver"); + printf("Could not find the kernel messages driver device name"); + throw std::runtime_error("Could not find the kernel messages driver device name"); } // enable capture @@ -34,7 +34,7 @@ void KernelReader::StartListening() if (!bRet) { printf("DBGV_CAPTURE_KERNEL failed, err=%d\n", ::GetLastError()); - throw std::runtime_error("Could not connect to kernel messages driver"); + throw std::runtime_error("Could not enable capturing kernel messages"); } m_handle = std::move(handle); From 8a802297a6aeca64323ccd1469e55383496067e5 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Mon, 28 Jul 2025 22:18:54 +0200 Subject: [PATCH 25/43] moved driver name to GetDebugviewDriverLocation and silently fail if driver can't be deleted --- CMakeLists.txt | 2 +- application/DebugViewpp/DebugView++.cpp | 2 -- application/DebugViewpp/MainFrame.cpp | 32 +++++++++---------- application/DebugViewpp/MainFrame.h | 4 +++ application/DebugViewpp/version.h | 4 +-- application/DebugViewpp/version.wxi | 4 +-- .../Debugview_kernel_client.cpp | 4 +-- application/DebugViewppLib/KernelReader.cpp | 21 +++++++++++- .../DebugViewppLib/Debugview_kernel_client.h | 5 ++- .../include/DebugViewppLib/KernelReader.h | 2 ++ 10 files changed, 51 insertions(+), 29 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8b88d3f5..a580a102 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,7 +61,7 @@ target_link_options(msvc_gui_link_options INTERFACE /SUBSYSTEM:WINDOWS /NOLOGO / target_link_options(msvc_console_link_options INTERFACE /SUBSYSTEM:CONSOLE /NOLOGO /RELEASE) # warnings (the project picked up a bunch of unresolved warnings with migrating to new VS versions and when {fmt} was added, work in progress...) -target_compile_options(project_compile_options INTERFACE /W4 /w14242 /w14254 /w14263 /w14265 /w14287 /w14289 /w14296 /w14311 /w14545 /w14546 /w14547 /w14549 /w14555 /w14640 /w14826 /w14905 /w14906 /w14928) +target_compile_options(project_compile_options INTERFACE /W4 /w14242 /w14254 /w14263 /w14265 /w14287 /w14289 /w14296 /w14311 /w14545 /w14546 /w14547 /w14549 /w14555 /w14640 /w14826 /w14905 /w14906 /w14928 /we4715) add_library(project::definitions ALIAS project_definitions) add_library(project::compile_features ALIAS project_compile_features) diff --git a/application/DebugViewpp/DebugView++.cpp b/application/DebugViewpp/DebugView++.cpp index f4a9e740..44af11cd 100644 --- a/application/DebugViewpp/DebugView++.cpp +++ b/application/DebugViewpp/DebugView++.cpp @@ -22,8 +22,6 @@ #include "crashpad.h" #endif -//#define CONSOLE_DEBUG - CAppModule _Module; namespace fusion { diff --git a/application/DebugViewpp/MainFrame.cpp b/application/DebugViewpp/MainFrame.cpp index 0dcf9440..965264c0 100644 --- a/application/DebugViewpp/MainFrame.cpp +++ b/application/DebugViewpp/MainFrame.cpp @@ -7,6 +7,8 @@ #include #include #include +#include +#include #include #include @@ -1474,15 +1476,15 @@ void CMainFrame::Resume() { m_pKernelReader = m_logSources.AddKernelReader(); } - catch (std::exception&) + catch (std::exception& e) { - MessageBox(L"Unable to capture Kernel Messages.\n" - L"\n" - L"Make sure you have appropriate permissions.\n" - L"\n" - L"You may need to start this application by right-clicking it and selecting\n" - L"'Run As Administator' even if you have administrator rights.", - m_applicationName.c_str(), MB_ICONERROR | MB_OK); + const auto message = std::format("Unable to capture Kernel Messages.\n" + "({})\n\n" + "Make sure you have appropriate permissions.\n" + "\n" + "You may need to start this application by right-clicking it and selecting\n" + "'Run As Administator' even if you have administrator rights.", e.what()); + MessageBox(WStr(message), m_applicationName.c_str(), MB_ICONERROR | MB_OK); m_tryKernel = false; } } @@ -1517,11 +1519,9 @@ void CMainFrame::OnLogGlobal(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wndCtl UpdateTitle(); } -static const auto driver_name = "C:\\Windows\\System32\\drivers\\dbgvpp.sys"; - -void WriteDriverFromResource() +void CMainFrame::WriteDriverFromResource() { - if (std::filesystem::exists(driver_name)) + if (std::filesystem::exists(m_driverLocation)) { return; } @@ -1535,8 +1535,7 @@ void WriteDriverFromResource() void* pLockedRes = LockResource(hLoadedRes); if (pLockedRes) { - std::cout << "write to " << driver_name << "\n"; - std::ofstream outFile(driver_name, std::ios::binary); + std::ofstream outFile(m_driverLocation.c_str(), std::ios::binary); outFile.write(static_cast(pLockedRes), dwSize); outFile.close(); } @@ -1544,9 +1543,10 @@ void WriteDriverFromResource() } } -void RemoveDriver() +void CMainFrame::RemoveDriver() { - std::filesystem::remove(driver_name); + // can fail silently + std::remove(m_driverLocation.c_str()); } void CMainFrame::OnLogKernel(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wndCtl*/) diff --git a/application/DebugViewpp/MainFrame.h b/application/DebugViewpp/MainFrame.h index 1dda1ff0..3b9ce97e 100644 --- a/application/DebugViewpp/MainFrame.h +++ b/application/DebugViewpp/MainFrame.h @@ -204,6 +204,9 @@ class CMainFrame : public CTabbedFrameImpl m_incomingMessages; int m_showCmd = SW_SHOWDEFAULT; + std::string m_driverLocation = GetDebugviewDriverLocation(); }; } // namespace debugviewpp diff --git a/application/DebugViewpp/version.h b/application/DebugViewpp/version.h index de854cde..673196cc 100644 --- a/application/DebugViewpp/version.h +++ b/application/DebugViewpp/version.h @@ -1,2 +1,2 @@ -#define VERSION 1,9,0,64 -#define VERSION_STR "1.9.0.64" +#define VERSION 1,9,0,65 +#define VERSION_STR "1.9.0.65" diff --git a/application/DebugViewpp/version.wxi b/application/DebugViewpp/version.wxi index a54d31b9..952533d8 100644 --- a/application/DebugViewpp/version.wxi +++ b/application/DebugViewpp/version.wxi @@ -3,6 +3,6 @@ - - + + diff --git a/application/DebugViewppLib/Debugview_kernel_client.cpp b/application/DebugViewppLib/Debugview_kernel_client.cpp index c15647b4..e0bf8261 100644 --- a/application/DebugViewppLib/Debugview_kernel_client.cpp +++ b/application/DebugViewppLib/Debugview_kernel_client.cpp @@ -68,7 +68,7 @@ bool StopDriverSvc() return true; } -void InstallKernelMessagesDriver() +void InstallKernelMessagesDriver(const std::string& driverLocation) { // try to uninstall first, in case the driver is somehow still loaded. UninstallKernelMessagesDriver(); @@ -90,7 +90,7 @@ void InstallKernelMessagesDriver() SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, - driverPath.c_str(), + driverLocation.c_str(), NULL, NULL, NULL, NULL, NULL ); diff --git a/application/DebugViewppLib/KernelReader.cpp b/application/DebugViewppLib/KernelReader.cpp index 3852f411..0ba43a89 100644 --- a/application/DebugViewppLib/KernelReader.cpp +++ b/application/DebugViewppLib/KernelReader.cpp @@ -9,9 +9,28 @@ #include "DebugViewppLib/LineBuffer.h" #include "DebugViewppLib/Debugview_kernel_client.h" +#include +#include namespace fusion { namespace debugviewpp { +std::string GetDebugviewDriverLocation() +{ + const auto driver_name = "dbgvpp.sys"; + // this has issues, because there could already be an existing file + // in that case we would load a possibly different driver verion? + // an we also do not seem to be able to (always?) remove it ? + // windows something reports it is 'in-use' even through we unloaded it. + + std::filesystem::path driverLocation = driver_name; + const auto systemRoot = std::getenv("SystemRoot"); + if (systemRoot != nullptr) + { + driverLocation = std::format("{}\\System32\\driver\\{}", systemRoot, driver_name); + } + return driverLocation.string(); +} + void KernelReader::StartListening() { Win32::Handle handle(::CreateFile(strDbgviewKernelDriverDeviceName, @@ -56,7 +75,7 @@ KernelReader::KernelReader(Timer& timer, ILineBuffer& linebuffer) : PolledLogSource(timer, SourceType::Pipe, linebuffer, 1) { SetDescription(L"Kernel Message Reader"); - InstallKernelMessagesDriver(); + InstallKernelMessagesDriver(GetDebugviewDriverLocation()); Signal(); StartListening(); StartThread(); diff --git a/application/include/DebugViewppLib/Debugview_kernel_client.h b/application/include/DebugViewppLib/Debugview_kernel_client.h index 7a49c538..4066536f 100644 --- a/application/include/DebugViewppLib/Debugview_kernel_client.h +++ b/application/include/DebugViewppLib/Debugview_kernel_client.h @@ -5,9 +5,6 @@ #pragma once -void InstallKernelMessagesDriver(); -void UninstallKernelMessagesDriver(); - #include #include #include @@ -69,3 +66,5 @@ typedef struct constexpr const wchar_t * strDbgviewKernelDriverDeviceName = L"\\\\.\\dbgv"; constexpr const DWORD kernelMessageBufferSize = 0x10000; +void InstallKernelMessagesDriver(const std::string& driverLocation); +void UninstallKernelMessagesDriver(); diff --git a/application/include/DebugViewppLib/KernelReader.h b/application/include/DebugViewppLib/KernelReader.h index 745698be..59e4d791 100644 --- a/application/include/DebugViewppLib/KernelReader.h +++ b/application/include/DebugViewppLib/KernelReader.h @@ -15,6 +15,8 @@ namespace fusion { namespace debugviewpp { +std::string GetDebugviewDriverLocation(); + class ILineBuffer; class KernelReader : public PolledLogSource From 0de5b985157d004a8f1b5f24e10c4897dc22770b Mon Sep 17 00:00:00 2001 From: Michael Maltsev <4129781+m417z@users.noreply.github.com> Date: Sat, 25 May 2024 13:25:44 +0300 Subject: [PATCH 26/43] Add necessary permissions for packaged applications --- application/DebugViewppLib/DBWinReader.cpp | 12 +++---- application/Win32Lib/Win32Lib.cpp | 38 +++++++++++++++++----- 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/application/DebugViewppLib/DBWinReader.cpp b/application/DebugViewppLib/DBWinReader.cpp index ff9536e0..08ff865f 100644 --- a/application/DebugViewppLib/DBWinReader.cpp +++ b/application/DebugViewppLib/DBWinReader.cpp @@ -43,14 +43,14 @@ DBWinReader::DBWinReader(Timer& timer, ILineBuffer& linebuffer, bool global) : SetDescription(global ? L"Global Win32 Messages" : L"Win32 Messages"); //Option 1: - //Win32::AdjustObjectDACL(m_hBuffer.get()); - //Win32::AdjustObjectDACL(m_dbWinBufferReady.get()); - //Win32::AdjustObjectDACL(m_dbWinDataReady.get()); + Win32::AdjustObjectDACL(m_hBuffer.get()); + Win32::AdjustObjectDACL(m_dbWinBufferReady.get()); + Win32::AdjustObjectDACL(m_dbWinDataReady.get()); //Option 2: - Win32::DeleteObjectDACL(m_hBuffer.get()); - Win32::DeleteObjectDACL(m_dbWinBufferReady.get()); - Win32::DeleteObjectDACL(m_dbWinDataReady.get()); + //Win32::DeleteObjectDACL(m_hBuffer.get()); + //Win32::DeleteObjectDACL(m_dbWinBufferReady.get()); + //Win32::DeleteObjectDACL(m_dbWinDataReady.get()); // TODO(jan): Please test this and choose one diff --git a/application/Win32Lib/Win32Lib.cpp b/application/Win32Lib/Win32Lib.cpp index e687e145..b3f39e6f 100644 --- a/application/Win32Lib/Win32Lib.cpp +++ b/application/Win32Lib/Win32Lib.cpp @@ -307,6 +307,7 @@ void DeleteObjectDACL(HANDLE hObject) } //add necessary permissions for "Authenticated Users" group (all non-anonymous users) +//and for "All Application Packages", "All Restricted Application Packages" for UWP support void AdjustObjectDACL(HANDLE hObject) { ACL* pOldDACL; @@ -317,20 +318,41 @@ void AdjustObjectDACL(HANDLE hObject) SID_IDENTIFIER_AUTHORITY authNt = SECURITY_NT_AUTHORITY; AllocateAndInitializeSid(&authNt, 1, SECURITY_AUTHENTICATED_USER_RID, 0, 0, 0, 0, 0, 0, 0, &pSid); - EXPLICIT_ACCESS ea = {}; - ea.grfAccessMode = GRANT_ACCESS; - ea.grfAccessPermissions = GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE; - ea.grfInheritance = NO_INHERITANCE; - ea.Trustee.TrusteeType = TRUSTEE_IS_GROUP; - ea.Trustee.TrusteeForm = TRUSTEE_IS_SID; - ea.Trustee.ptstrName = static_cast(pSid); + PSID pAnyPackageSid = nullptr; + SID_IDENTIFIER_AUTHORITY SIDAuthAppPackage = SECURITY_APP_PACKAGE_AUTHORITY; + AllocateAndInitializeSid(&SIDAuthAppPackage, SECURITY_BUILTIN_APP_PACKAGE_RID_COUNT, + SECURITY_APP_PACKAGE_BASE_RID, SECURITY_BUILTIN_PACKAGE_ANY_PACKAGE, + 0, 0, 0, 0, 0, 0, + &pAnyPackageSid); + + PSID pAnyRestrictedPackageSid = nullptr; + AllocateAndInitializeSid(&SIDAuthAppPackage, SECURITY_BUILTIN_APP_PACKAGE_RID_COUNT, + SECURITY_APP_PACKAGE_BASE_RID, SECURITY_BUILTIN_PACKAGE_ANY_RESTRICTED_PACKAGE, + 0, 0, 0, 0, 0, 0, + &pAnyRestrictedPackageSid); + + EXPLICIT_ACCESS ea[3] = {}; + for (auto& item : ea) + { + item.grfAccessMode = GRANT_ACCESS; + item.grfAccessPermissions = GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE; + item.grfInheritance = NO_INHERITANCE; + item.Trustee.TrusteeType = TRUSTEE_IS_GROUP; + item.Trustee.TrusteeForm = TRUSTEE_IS_SID; + } + + ea[0].Trustee.ptstrName = static_cast(pSid); + ea[1].Trustee.ptstrName = static_cast(pAnyPackageSid); + ea[2].Trustee.ptstrName = static_cast(pAnyRestrictedPackageSid); ACL* pNewDACL = nullptr; - SetEntriesInAcl(1, &ea, pOldDACL, &pNewDACL); + SetEntriesInAcl(std::size(ea), ea, pOldDACL, &pNewDACL); Win32::SetSecurityInfo(hObject, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nullptr, nullptr, pNewDACL, nullptr); FreeSid(pSid); + FreeSid(pAnyPackageSid); + FreeSid(pAnyRestrictedPackageSid); LocalFree(pNewDACL); LocalFree(pSD); } From 793963ae3fcfffced3afa2a170e601578a4d94f0 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Wed, 30 Jul 2025 00:12:01 +0200 Subject: [PATCH 27/43] merged Commit 9d79f53 from KirisameMarisa to add /tab: commandline option --- application/DebugViewpp/DebugView++.cpp | 10 ++++++++++ application/DebugViewpp/MainFrame.cpp | 13 +++++++++++++ application/DebugViewpp/MainFrame.h | 1 + 3 files changed, 24 insertions(+) diff --git a/application/DebugViewpp/DebugView++.cpp b/application/DebugViewpp/DebugView++.cpp index 44af11cd..702779b3 100644 --- a/application/DebugViewpp/DebugView++.cpp +++ b/application/DebugViewpp/DebugView++.cpp @@ -151,6 +151,7 @@ int Main(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPWSTR /*lpstrCmdLine auto args = Win32::GetCommandLineArguments(); std::wstring fileName; + std::wstring selectTabName; for (size_t i = 1; i < args.size(); ++i) { @@ -163,6 +164,10 @@ int Main(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPWSTR /*lpstrCmdLine //wndMain.SetLogging(); // todo: implement: FileWriter needs to concurrently access m_logfile, it now causes a crash if DbgMsgSrc -1 is run // this should be replaced by the new streaming-to-disk feature we discussed. } + else if (boost::icontains(args[i], L"/tab:")) + { + selectTabName = args[i].substr(5); + } else if (args[i][0] != '/') { if (!fileName.empty()) @@ -196,6 +201,11 @@ int Main(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPWSTR /*lpstrCmdLine wndMain.CapturePipe(hPipe); } + if (!selectTabName.empty()) + { + wndMain.SetSelectTabByName(selectTabName); + } + return theLoop.Run(); } diff --git a/application/DebugViewpp/MainFrame.cpp b/application/DebugViewpp/MainFrame.cpp index 965264c0..e903e850 100644 --- a/application/DebugViewpp/MainFrame.cpp +++ b/application/DebugViewpp/MainFrame.cpp @@ -1232,6 +1232,19 @@ void CMainFrame::Load(std::istream& file, const std::string& name, FILETIME file } } +void CMainFrame::SetSelectTabByName(const std::wstring& tabName) +{ + const int views = GetViewCount(); + for (int i = 0; i < views; ++i) + { + if (GetView(i).GetName() == tabName) + { + GetTabCtrl().SetCurSel(i); + break; + } + } +} + void CMainFrame::CapturePipe(HANDLE hPipe) { m_logSources.AddPipeReader(Win32::GetParentProcessId(), hPipe); diff --git a/application/DebugViewpp/MainFrame.h b/application/DebugViewpp/MainFrame.h index 3b9ce97e..bfebbccb 100644 --- a/application/DebugViewpp/MainFrame.h +++ b/application/DebugViewpp/MainFrame.h @@ -94,6 +94,7 @@ class CMainFrame : public CTabbedFrameImpl Date: Wed, 30 Jul 2025 00:32:46 +0200 Subject: [PATCH 28/43] clang-formatted and fixed comments, global application of clang-format is not possible yet, the WTL macros are not formatting the way I would like and ignoring every section sounds like a poor solution. --- application/DebugViewpp/DebugView++.cpp | 11 ++--- application/DebugViewpp/DropTargetSupport.cpp | 1 - application/DebugViewpp/MainFrame.cpp | 21 ++++----- .../Debugview_kernel_client.cpp | 44 ++++++++++++------- application/DebugViewppLib/KernelReader.cpp | 5 ++- application/Win32Lib/Win32Lib.cpp | 6 +-- .../DebugViewppLib/Debugview_kernel_client.h | 11 +++-- utils/apply-clang-format.py | 28 +++++++----- 8 files changed, 78 insertions(+), 49 deletions(-) diff --git a/application/DebugViewpp/DebugView++.cpp b/application/DebugViewpp/DebugView++.cpp index 702779b3..3806bd49 100644 --- a/application/DebugViewpp/DebugView++.cpp +++ b/application/DebugViewpp/DebugView++.cpp @@ -15,9 +15,9 @@ #include "atleverything.h" #include -#include // for std::getenv +#include // for std::getenv -//#define ENABLE_CRASHPAD +// #define ENABLE_CRASHPAD #ifdef ENABLE_CRASHPAD #include "crashpad.h" #endif @@ -161,8 +161,8 @@ int Main(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPWSTR /*lpstrCmdLine } else if (boost::iequals(args[i], L"/log")) { - //wndMain.SetLogging(); // todo: implement: FileWriter needs to concurrently access m_logfile, it now causes a crash if DbgMsgSrc -1 is run - // this should be replaced by the new streaming-to-disk feature we discussed. + // wndMain.SetLogging(); // todo: implement: FileWriter needs to concurrently access m_logfile, it now causes a crash if DbgMsgSrc -1 is run + // this should be replaced by the new streaming-to-disk feature we discussed. } else if (boost::icontains(args[i], L"/tab:")) { @@ -213,7 +213,8 @@ int Main(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPWSTR /*lpstrCmdLine } // namespace fusion -int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpstrCmdLine, int nCmdShow) try +int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpstrCmdLine, int nCmdShow) +try { #ifdef ENABLE_CRASHPAD initializeCrashPad(); diff --git a/application/DebugViewpp/DropTargetSupport.cpp b/application/DebugViewpp/DropTargetSupport.cpp index 4b26922f..e183f46b 100644 --- a/application/DebugViewpp/DropTargetSupport.cpp +++ b/application/DebugViewpp/DropTargetSupport.cpp @@ -18,7 +18,6 @@ namespace debugviewpp { */ DropTargetSupport::DropTargetSupport() - { } diff --git a/application/DebugViewpp/MainFrame.cpp b/application/DebugViewpp/MainFrame.cpp index e903e850..2750c924 100644 --- a/application/DebugViewpp/MainFrame.cpp +++ b/application/DebugViewpp/MainFrame.cpp @@ -234,7 +234,7 @@ LRESULT CMainFrame::OnCreate(const CREATESTRUCT* /*pCreate*/) HWND hWndCmdBar = m_cmdBar.Create(*this, rcDefault, nullptr, ATL_SIMPLE_CMDBAR_PANE_STYLE); m_cmdBar.AttachMenu(GetMenu()); m_cmdBar.LoadImages(IDR_MAINFRAME); - SetMenu(nullptr); //disable second menu bar + SetMenu(nullptr); // disable second menu bar CreateSimpleReBar(ATL_SIMPLE_REBAR_NOBORDER_STYLE); CReBarCtrl rebar(m_hWndToolBar); @@ -1492,11 +1492,12 @@ void CMainFrame::Resume() catch (std::exception& e) { const auto message = std::format("Unable to capture Kernel Messages.\n" - "({})\n\n" - "Make sure you have appropriate permissions.\n" - "\n" - "You may need to start this application by right-clicking it and selecting\n" - "'Run As Administator' even if you have administrator rights.", e.what()); + "({})\n\n" + "Make sure you have appropriate permissions.\n" + "\n" + "You may need to start this application by right-clicking it and selecting\n" + "'Run As Administator' even if you have administrator rights.", + e.what()); MessageBox(WStr(message), m_applicationName.c_str(), MB_ICONERROR | MB_OK); m_tryKernel = false; } @@ -1669,10 +1670,10 @@ void CMainFrame::OnViewDuplicate(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wn AddFilterView(dlg.GetName(), dlg.GetFilters()); - //auto &view = GetView(); - //auto newLogView = std::make_shared(view); // no copy constructor available - //newLogView->SetName(view.GetName() + L" (copy)"); - //AddFilterView(newLogView); + // auto &view = GetView(); + // auto newLogView = std::make_shared(view); // no copy constructor available + // newLogView->SetName(view.GetName() + L" (copy)"); + // AddFilterView(newLogView); SaveSettings(); } diff --git a/application/DebugViewppLib/Debugview_kernel_client.cpp b/application/DebugViewppLib/Debugview_kernel_client.cpp index e0bf8261..d853c617 100644 --- a/application/DebugViewppLib/Debugview_kernel_client.cpp +++ b/application/DebugViewppLib/Debugview_kernel_client.cpp @@ -9,25 +9,30 @@ constexpr const char* DRIVER_SERVICE_NAME = "debugviewdriver"; constexpr const char* DRIVER_DISPLAY_NAME = "DbgView Kernel Message Driver"; const std::string driverPath = "C:\\Windows\\System32\\drivers\\dbgvpp.sys"; -bool FileExists(const std::string& path) { +bool FileExists(const std::string& path) +{ DWORD fileAttributes = GetFileAttributesA(path.c_str()); return (fileAttributes != INVALID_FILE_ATTRIBUTES && - !(fileAttributes & FILE_ATTRIBUTE_DIRECTORY)); + !(fileAttributes & FILE_ATTRIBUTE_DIRECTORY)); } bool StartDriverSvc() { SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); - if (!hSCManager) return false; + if (!hSCManager) + return false; SC_HANDLE hService = OpenServiceA(hSCManager, DRIVER_SERVICE_NAME, SERVICE_START); - if (!hService) { + if (!hService) + { CloseServiceHandle(hSCManager); return false; } - if (!StartService(hService, 0, NULL)) { - if (GetLastError() == ERROR_SERVICE_ALREADY_RUNNING) { + if (!StartService(hService, 0, NULL)) + { + if (GetLastError() == ERROR_SERVICE_ALREADY_RUNNING) + { std::cout << "Service is already running.\n"; CloseServiceHandle(hService); CloseServiceHandle(hSCManager); @@ -47,18 +52,22 @@ bool StartDriverSvc() bool StopDriverSvc() { SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); - if (!hSCManager) return false; + if (!hSCManager) + return false; SC_HANDLE hService = OpenServiceA(hSCManager, DRIVER_SERVICE_NAME, SERVICE_STOP); - if (!hService) { + if (!hService) + { CloseServiceHandle(hSCManager); return false; } SERVICE_STATUS status; - if (!ControlService(hService, SERVICE_CONTROL_STOP, &status)) { + if (!ControlService(hService, SERVICE_CONTROL_STOP, &status)) + { DWORD err = GetLastError(); - if (err != ERROR_SERVICE_NOT_ACTIVE) { + if (err != ERROR_SERVICE_NOT_ACTIVE) + { std::cout << "Failed to stop service. Error: " << err << std::endl; } } @@ -73,12 +82,14 @@ void InstallKernelMessagesDriver(const std::string& driverLocation) // try to uninstall first, in case the driver is somehow still loaded. UninstallKernelMessagesDriver(); - if (!FileExists(driverPath)) { + if (!FileExists(driverPath)) + { std::cout << "Driver file not found at: " << driverPath << std::endl; } SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); - if (!hSCManager) { + if (!hSCManager) + { std::cout << "Failed to open Service Control Manager. Error: " << GetLastError() << std::endl; } @@ -91,11 +102,12 @@ void InstallKernelMessagesDriver(const std::string& driverLocation) SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, driverLocation.c_str(), - NULL, NULL, NULL, NULL, NULL - ); + NULL, NULL, NULL, NULL, NULL); - if (!hService) { - if (GetLastError() == ERROR_SERVICE_EXISTS) { + if (!hService) + { + if (GetLastError() == ERROR_SERVICE_EXISTS) + { std::cout << "Service already exists.\n"; CloseServiceHandle(hSCManager); } diff --git a/application/DebugViewppLib/KernelReader.cpp b/application/DebugViewppLib/KernelReader.cpp index 0ba43a89..cfa23ca9 100644 --- a/application/DebugViewppLib/KernelReader.cpp +++ b/application/DebugViewppLib/KernelReader.cpp @@ -104,7 +104,10 @@ void KernelReader::Poll() memset(m_pBuf, 0, kernelMessageBufferSize); DWORD dwOut = 0; ::DeviceIoControl(m_handle.get(), DBGV_READ_LOG, NULL, 0, m_pBuf, kernelMessageBufferSize, &dwOut, NULL); - if (dwOut == 0) return; // no messages to be read + if (dwOut == 0) + { + return; // no messages to be read + } PLOG_ITEM pNextItem = m_pBuf; while (pNextItem->dwIndex != 0) diff --git a/application/Win32Lib/Win32Lib.cpp b/application/Win32Lib/Win32Lib.cpp index b3f39e6f..0b82dc83 100644 --- a/application/Win32Lib/Win32Lib.cpp +++ b/application/Win32Lib/Win32Lib.cpp @@ -300,14 +300,14 @@ void SetSecurityInfo(HANDLE hObject, SE_OBJECT_TYPE ObjectType, SECURITY_INFORMA #ifdef DACL_MODIFY -//delete DACL at all, so permit Full Access for Everyone +// delete DACL at all, so permit Full Access for Everyone void DeleteObjectDACL(HANDLE hObject) { Win32::SetSecurityInfo(hObject, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nullptr, nullptr, nullptr, nullptr); } -//add necessary permissions for "Authenticated Users" group (all non-anonymous users) -//and for "All Application Packages", "All Restricted Application Packages" for UWP support +// add necessary permissions for "Authenticated Users" group (all non-anonymous users) +// and for "All Application Packages", "All Restricted Application Packages" for UWP support void AdjustObjectDACL(HANDLE hObject) { ACL* pOldDACL; diff --git a/application/include/DebugViewppLib/Debugview_kernel_client.h b/application/include/DebugViewppLib/Debugview_kernel_client.h index 4066536f..586405d1 100644 --- a/application/include/DebugViewppLib/Debugview_kernel_client.h +++ b/application/include/DebugViewppLib/Debugview_kernel_client.h @@ -3,6 +3,10 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) +// +// this is the dbgv.sys interface +// + #pragma once #include @@ -13,9 +17,9 @@ #include #include -// this is the dbgv.sys interface #define FILE_DEVICE_DBGV 0x8305 +// clang-format off #define DBGV_CAPTURE_KERNEL CTL_CODE(FILE_DEVICE_DBGV, DWORD(0), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x00 //enable capture kernel #define DBGV_UNCAPTURE_KERNEL CTL_CODE(FILE_DEVICE_DBGV, DWORD(1), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x04 // #define DBGV_CLEAR_DISPLAY CTL_CODE(FILE_DEVICE_DBGV, DWORD(2), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x08 //clear display @@ -28,6 +32,7 @@ #define DBGV_UNSET_CARRIAGE_RETURN CTL_CODE(FILE_DEVICE_DBGV, DWORD(0x0e), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x38 // #define DBGV_SET_VERBOSE_MESSAGES CTL_CODE(FILE_DEVICE_DBGV, DWORD(0x0f), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x3C //enable log verbose #define DBGV_UNSET_VERBOSE_MESSAGES CTL_CODE(FILE_DEVICE_DBGV, DWORD(0x10), METHOD_BUFFERED, FILE_ANY_ACCESS) //0x40 //reset log verbose +// clang-format on inline std::string feature_to_string(DWORD value) { @@ -51,7 +56,7 @@ inline std::string feature_to_string(DWORD value) } // suppress the non-standard use of zero-sized array in struct/union -#pragma warning(disable:4200) +#pragma warning(disable : 4200) #pragma pack(1) typedef struct @@ -63,7 +68,7 @@ typedef struct } LOG_ITEM, *PLOG_ITEM; #pragma pack() -constexpr const wchar_t * strDbgviewKernelDriverDeviceName = L"\\\\.\\dbgv"; +constexpr const wchar_t* strDbgviewKernelDriverDeviceName = L"\\\\.\\dbgv"; constexpr const DWORD kernelMessageBufferSize = 0x10000; void InstallKernelMessagesDriver(const std::string& driverLocation); diff --git a/utils/apply-clang-format.py b/utils/apply-clang-format.py index f3e325f0..4928d64f 100644 --- a/utils/apply-clang-format.py +++ b/utils/apply-clang-format.py @@ -30,12 +30,20 @@ def IsCppFile(fullname): return True if ext.lower().endswith(".hh"): return True - return False + return False def IsIgnoredDirectory(dirname): - if dirname.lower().endswith("\gen"): + if dirname.lower().endswith("\\gen"): + return True + if dirname.lower().endswith("\\gen64"): + return True + if dirname.lower().endswith("\\nuget"): + return True + if dirname.lower().endswith("\\packages"): return True - if dirname.lower().endswith("\gen64"): + if "\\application\\Libraries\\" in dirname.lower(): + return True + if "\\nuget\\packages\\" in dirname.lower(): return True return False @@ -44,22 +52,22 @@ def GetFiles(filemask, recurse): result = [] path = os.path.dirname(os.path.abspath(filemask)) for dirName, subdirList, fileList in os.walk(path): - if IsIgnoredDirectory(dirName): + if IsIgnoredDirectory(dirName): continue for fname in fileList: filename = dirName + "\\" + fname - if not IsCppFile(filename): + if not IsCppFile(filename): continue result += [filename] return result else: result = [] for filename in glob.glob(filemask): - if not IsCppFile(filename): + if not IsCppFile(filename): continue result += [os.path.abspath(filename)] return result - + def filter(keyword): for line in sys.stdin: if not keyword in line: @@ -80,7 +88,7 @@ def HasInvalidArgs(): if sys.argv[1].startswith("/"): return True return False - + def main(): if HasInvalidArgs(): print ("Usage: " + os.path.basename(sys.argv[0]) + " [/s] [/f]") @@ -105,7 +113,7 @@ def main(): except KeyboardInterrupt: pass except Exception: - traceback.print_exc(file=sys.stdout) + traceback.print_exc(file=sys.stdout) sys.exit(0) - + From 3e958b188438f7f05f5a12e4c125d9822cc8ba66 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Wed, 30 Jul 2025 01:45:20 +0200 Subject: [PATCH 29/43] removed comments and updated readme --- README.md | 102 +++++++++++---------- application/DebugViewppLib/DBWinReader.cpp | 9 +- 2 files changed, 55 insertions(+), 56 deletions(-) diff --git a/README.md b/README.md index 037b700a..712787b5 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,29 @@ -Debugview++ v1.9.x.x (2025 Update coming soon!) ------------------------------- -- Noteworthy new features: capture kernel messages, verbose mode and pass-through mode. +## Contact information --- Notice: +![Discord User](https://img.shields.io/badge/discord-janwilmans-blue?link=https%3A%2F%2Fdiscordapp.com%2Fusers%2F456038206987567105) +![Mastodon Follow](https://img.shields.io/mastodon/follow/109524813797978857?domain=https%3A%2F%2Ftoot.community&style=social) +![Github Follow](https://img.shields.io/github/followers/janwilmans) -* This project is in low-maintenance mode, this means new features are only added if PRs are provided with tests. -* Updates are limited to keeping the status-quo and OS-related updated. -* I'm looking for maintainers, so if you would like to join me in bugfixing or adding features, please let me know. -* 2022 update: The project was migrated to VS2022 and boost 1.80, WindowsXP (32 bit) support was removed. -* the OutputForwarder companion extension for VS2022 can be found in the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=JanWilmans.OutputForwarder2022) -* nuget.exe can be downloaded from https://www.nuget.org/downloads +## Debugview++ v1.20.x.x (Summer 2025 Update coming soon!) -Debugview++, currently at v1.9 (2024 Update!) ------------------------------- +- new features: capture kernel messages, verbose mode and pass-through mode, big thanks to x64bugreport and 593749519 for providing information, contributions and test scenarios. +- fixed #365: support for messages from UWP applications (poorly tested), feedback welcome! +- fixed #396: depending on the runtime dlls, this broke when we moved to cmake, now we link the runtime statically again. +- fixed title bar not being updated when 'Global Win32' was toggled. +- new commandline argument /tab: to select a tab that get focus at startup, contributed by KirisameMarisa +- removed color support from 'include' filter by request (a highlight filter can still achieve the same result), contributed by Ishmaeel. +- faster building by adding /MP. -![Mastodon Follow](https://img.shields.io/mastodon/follow/109524813797978857?domain=https%3A%2F%2Ftoot.community&style=social) -![Github Follow](https://img.shields.io/github/followers/janwilmans) +-- Notice: + +- This project is in low-maintenance mode, this means new features are only added if PRs are provided with tests. +- Updates are limited to keeping the status-quo and OS-related updated. +- I'm looking for maintainers, so if you would like to join me in bugfixing or adding features, please let me know. +- 2022 update: The project was migrated to VS2022 and boost 1.80, WindowsXP (32 bit) support was removed. +- the OutputForwarder companion extension for VS2022 can be found in the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=JanWilmans.OutputForwarder2022) +- nuget.exe can be downloaded from https://www.nuget.org/downloads + +## Debugview++, currently at v1.9 (2024 Update!) [![All Releases](https://img.shields.io/github/downloads/CobaltFusion/DebugViewPP/total.svg)](https://github.com/CobaltFusion/DebugViewPP/releases/latest) [![Current Release](https://img.shields.io/github/downloads/CobaltFusion/DebugViewPP/latest/total.svg)](https://github.com/CobaltFusion/DebugViewPP/releases/latest) @@ -32,6 +40,7 @@ There is also a [slack channel](https://cpplang.slack.com/messages/debugviewpp). Debugview++ started as a viewer for Win32 OutputDebugString messages in the style of Sysinternals DebugView. However, it can now be attached to virtually any other kind of logging, such as: + - tailing ascii and UTF logfiles (just drag it onto the window) - Android ADB (or any console based standard output) - serial ports (using plink) @@ -40,8 +49,7 @@ Sysinternals DebugView. However, it can now be attached to virtually any other k See examples down below. -Sponsors --------- +## Sponsors This project is sponsored by: @@ -49,7 +57,7 @@ This project is sponsored by: Build in code analysis, handy auto-fixes and refactoring options -[![Backtrace logo](art/backtrace_logo.png)](https://backtrace.io/ ) +[![Backtrace logo](art/backtrace_logo.png)](https://backtrace.io/) Gather and analyse crash information. @@ -57,14 +65,14 @@ Gather and analyse crash information. We use Incredibuild to make use of all cores of multiple machines to accelerate building our C++ projects. -So when is this Debugview++ thing useful? ------------------------------------------- +## So when is this Debugview++ thing useful? - first of all, with debugview++ you can see messages from different processes, not just 'attached' processes. - also: filtering, coloring and linking. To make sense of a large amount of information humans need to filter it or order it understand it. Also it helps if important events have different colors to quickly interpret the occurring patterns. - finally, filtering is nice, but sometimes you need to see a line in its context to understand it, this is where linked views can help to quickly switch between a fully filtered view and a fully detailed view. New in stable version 1.8.x: + - bugfixes (namely in file-tailing) - tested on windows 10 - last version with (official) XP support (v141_xp target) @@ -74,23 +82,25 @@ New in stable version 1.8.x: - no other new features planned, if you're missing something you need, file an issue! Features we dream about and will create when we choose to spend the time: + - a gantt chart-like view, a horizontal timeline, with bars/flags/signs on it to identify events - a better plugin based input system - transparent background streaming to disk - proper memory limits Known issues: + - the history limit doesn't work right, this is troublesome for long-running duration-tests. A workaround is to send 'DBGVIEWCLEAR' before each test-cycle (this clears all logs from memory). - there is no 'pass-through' mode like the original dbgview had, if you can help me implement this, please contact me. - same goes for catching kernel messages, help wanted. -References ----------- -[OutputDebugString on MSDN](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363362(v=vs.85).aspx) +## References + +[OutputDebugString on MSDN]() + +## Screenshot -Screenshot ------------ ![DebugView++ Screenshot](art/syntax_high.png "DebugView++ Screenshot") Here are some features: @@ -128,18 +138,18 @@ And more features: - View->Process Colors, easy way to give every process its own color! - Options->Link views, best effort to synchronize the line-selection over all views -Download old version (stable, dated 20 Sept 2015) ------------------------ -+ [DebugView v1.5.x Zipped executables](https://github.com/CobaltFusion/DebugViewPP/files/1408599/DebugView.v1.5.zip) -+ [DebugView v1.5.x Win32 installer](https://github.com/CobaltFusion/DebugViewPP/files/1408607/DebugView.v1.5_msi.zip) +## Download old version (stable, dated 20 Sept 2015) + +- [DebugView v1.5.x Zipped executables](https://github.com/CobaltFusion/DebugViewPP/files/1408599/DebugView.v1.5.zip) +- [DebugView v1.5.x Win32 installer](https://github.com/CobaltFusion/DebugViewPP/files/1408607/DebugView.v1.5_msi.zip) Screenshot demonstrating bookmarks and highlighting features. **Highlighted**: -- regex (token filter): ``[^\s]*\\[\\\w+\.\s]+`` filenames in blue -- regex (token filter): ``0x\w+`` hexadecimal numbers in red -- regex (highlight filter): ``Unittest`` lines with the word 'Unittest' have a lightgreen background +- regex (token filter): `[^\s]*\\[\\\w+\.\s]+` filenames in blue +- regex (token filter): `0x\w+` hexadecimal numbers in red +- regex (highlight filter): `Unittest` lines with the word 'Unittest' have a lightgreen background - a doubleclick on 'bytes' causes all instances of 'bytes' to highlight in yellow See http://www.cplusplus.com/reference/regex/ECMAScript/ for all options for supported regular expressions @@ -150,8 +160,7 @@ See http://www.cplusplus.com/reference/regex/ECMAScript/ for all options for sup Screenshot demonstrating connecting to ADB logcat (Android Debug Bridge) -More examples -------------- +## More examples **Connect any pipe**: @@ -159,7 +168,7 @@ To connect directly to a port or service, [plink] can be used, make sure an inst > plink -ssh -batch -v 192.168.0.1 2>&1 | debugview++ -Notice that 2>&1 is used *before* the pipe (|) symbol to redirect stderr to stdout. +Notice that 2>&1 is used _before_ the pipe (|) symbol to redirect stderr to stdout. [plink]: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html @@ -170,18 +179,16 @@ And connect DebugView++ using Log->Connect DebugView Agent. Note that 'Log->Conn **Use RegexGroups + Token Highlighting**: -Suppose you want to highlight some data value in your logging, since the actually value may differ, you cannot use normal matching to highlight them. With RegexGroups you can match text _before_ or _after the actual token you want to highlight. +Suppose you want to highlight some data value in your logging, since the actually value may differ, you cannot use normal matching to highlight them. With RegexGroups you can match text _before_ or \_after the actual token you want to highlight. Example: ![FilterDialog Screenshot](art/regexgroups.png "RegexGroups Screenshot") -Filters: --------- +## Filters: ![FilterDialog Screenshot](art/filterdialog.png "FilterDialog Screenshot") - Filters can be defined per view, for example choose File -> New View, and the filter dialog will popup. Pressing OK will open a new view without any filters. @@ -199,7 +206,7 @@ just type any word or part of a word to match. - stop: if a matching expression is found autoscroll is turned off, all track filters will be disabled and the line is focused. Note: stop filters work only if autoscroll is on, think of a stop-filter as a single-shot track filter - beep: a standard windows beep (configurable in config panel->sounds) is played -*Practical uses*: +_Practical uses_: Include, exclude, once and highlight filters are the most intuitive filters to use. Track and stop can be a little confusing, let me try to give some examples. @@ -207,10 +214,10 @@ Include, exclude, once and highlight filters are the most intuitive filters to u **stop**: this filter is good when some special event occurs (an exception?) and you want to inspect the context of the event in the log before continuing. A press of the 'end' button will resume auto scrolling. -Other features: ----------------- +## Other features: **views**: + - reset view; make the first line in the logbuffer the first line in the view - reset view to this line; make the current like the first line in the view - clear view; make next incoming message the first line in the view @@ -227,8 +234,7 @@ Now you can monitor the filtered view, and when your event occurs, select a line **process colors**: If enabled each process (even processed with identical names) will get a its own background color automatically without adding any filters. -Other documentation: --------------------- +## Other documentation: **Auto Scroll**: scrolls down to new incoming lines automatically @@ -239,11 +245,12 @@ turned off if any other line is selected. **ClockTime**: when enabled the time is displayed as provided by the system's real-time clock (RTC). Such a timestamp has a 16ms resolution on a typical desktop PC. When disabled, time is displayed as a relative time to the first message, however this timestamp is obtained from the High-Performance Counter (HPC) which typically has a sub-microsecond resolution. -The resolution should not be confused with accuracy here, the recorded timestamp is not the actual time the message occurred, it is the time the message was received by DebugView++. Also there is no guarantee that the time between occurrence and reception of messages is constant, *however* in practice this is **pretty** constant :) +The resolution should not be confused with accuracy here, the recorded timestamp is not the actual time the message occurred, it is the time the message was received by DebugView++. Also there is no guarantee that the time between occurrence and reception of messages is constant, _however_ in practice this is **pretty** constant :) + +## How to build -How to build ------------- This project has a special configuration: + - 32bit debug/release configurations are targeted to v140_XP, SDK v7.0 (windows XP SP3 and up) - 64bit debug/release configurations are targeted to v141, SDK v8.1 (runs on windows 7 and up) - only the release configurations also build the Wix installer @@ -265,7 +272,7 @@ Since we use ATL and support Windows XP still some extra installation options ar ![VS2017 Option screen](art/vs2017_options.png "VS2017 Option screen") - zip.exe, http://gnuwin32.sourceforge.net/packages/zip.htm, choose [zip-3.0-setup.exe] - decompress the archive and you're done (add zip.exe to the path) + decompress the archive and you're done (add zip.exe to the path) # VS2019 @@ -279,4 +286,3 @@ mailto:janwilmans _at_ gmail.com Gert-Jan de Vos mailto:boosttestui@on.nl - diff --git a/application/DebugViewppLib/DBWinReader.cpp b/application/DebugViewppLib/DBWinReader.cpp index 08ff865f..008b44b9 100644 --- a/application/DebugViewppLib/DBWinReader.cpp +++ b/application/DebugViewppLib/DBWinReader.cpp @@ -42,18 +42,11 @@ DBWinReader::DBWinReader(Timer& timer, ILineBuffer& linebuffer, bool global) : { SetDescription(global ? L"Global Win32 Messages" : L"Win32 Messages"); - //Option 1: + // required permissions for messages from UWP applications Win32::AdjustObjectDACL(m_hBuffer.get()); Win32::AdjustObjectDACL(m_dbWinBufferReady.get()); Win32::AdjustObjectDACL(m_dbWinDataReady.get()); - //Option 2: - //Win32::DeleteObjectDACL(m_hBuffer.get()); - //Win32::DeleteObjectDACL(m_dbWinBufferReady.get()); - //Win32::DeleteObjectDACL(m_dbWinDataReady.get()); - - // TODO(jan): Please test this and choose one - Win32::SetEvent(m_dbWinBufferReady); } From 90ab301c7adfc648d715ba2df1fe09eba928fb4e Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Wed, 30 Jul 2025 02:17:06 +0200 Subject: [PATCH 30/43] added discord invite link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 712787b5..aab39722 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ## Contact information -![Discord User](https://img.shields.io/badge/discord-janwilmans-blue?link=https%3A%2F%2Fdiscordapp.com%2Fusers%2F456038206987567105) +[![Discord Invite](https://img.shields.io/badge/Discord%20Live%20Coding%20Chat-invite-blue)](https://discord.gg/V6HRYgBFUX) ![Mastodon Follow](https://img.shields.io/mastodon/follow/109524813797978857?domain=https%3A%2F%2Ftoot.community&style=social) ![Github Follow](https://img.shields.io/github/followers/janwilmans) From 244e7d39e992204a3e54ac14310450dfbdac60bb Mon Sep 17 00:00:00 2001 From: saltybelajo Date: Sat, 18 Apr 2026 18:20:07 +0300 Subject: [PATCH 31/43] force wstringbuilder to return a wstring via WStr method --- application/include/CobaltFusion/stringbuilder.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/include/CobaltFusion/stringbuilder.h b/application/include/CobaltFusion/stringbuilder.h index 5ea58dfe..68144f70 100644 --- a/application/include/CobaltFusion/stringbuilder.h +++ b/application/include/CobaltFusion/stringbuilder.h @@ -54,9 +54,9 @@ class wstringbuilder wstringbuilder& operator<<(const std::string& str) { - m_ss << WStr(str); + m_ss << WStr(str).str(); return *this; - } + } operator std::wstring() const { From 6095f7ddbcde0eb67423ed1862f8b69579092bd8 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Sun, 19 Apr 2026 12:21:38 +0200 Subject: [PATCH 32/43] Revise README for upcoming release details Updated version information and release notes in README. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aab39722..1e2cdc37 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ![Mastodon Follow](https://img.shields.io/mastodon/follow/109524813797978857?domain=https%3A%2F%2Ftoot.community&style=social) ![Github Follow](https://img.shields.io/github/followers/janwilmans) -## Debugview++ v1.20.x.x (Summer 2025 Update coming soon!) +## Debugview++ v1.20.x.x (upcoming release) - new features: capture kernel messages, verbose mode and pass-through mode, big thanks to x64bugreport and 593749519 for providing information, contributions and test scenarios. - fixed #365: support for messages from UWP applications (poorly tested), feedback welcome! From bb5c5e0f84a72f603b70fbf06dd43f79fab4857c Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Thu, 23 Apr 2026 11:22:19 +0200 Subject: [PATCH 33/43] added error message if driver cant be written --- application/DebugViewpp/MainFrame.cpp | 7 +++++++ application/DebugViewppLib/Debugview_kernel_client.cpp | 5 ++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/application/DebugViewpp/MainFrame.cpp b/application/DebugViewpp/MainFrame.cpp index 2750c924..ad99a717 100644 --- a/application/DebugViewpp/MainFrame.cpp +++ b/application/DebugViewpp/MainFrame.cpp @@ -1549,12 +1549,19 @@ void CMainFrame::WriteDriverFromResource() void* pLockedRes = LockResource(hLoadedRes); if (pLockedRes) { + std::cout << "Write " << m_driverLocation << "\n"; std::ofstream outFile(m_driverLocation.c_str(), std::ios::binary); outFile.write(static_cast(pLockedRes), dwSize); outFile.close(); } } } + + if (!std::filesystem::exists(m_driverLocation)) + { + std::cout << "Could not write to " << m_driverLocation << "\n"; + m_logSources.AddMessage("Unable to access kernel messages driver"); + } } void CMainFrame::RemoveDriver() diff --git a/application/DebugViewppLib/Debugview_kernel_client.cpp b/application/DebugViewppLib/Debugview_kernel_client.cpp index d853c617..814f1f6f 100644 --- a/application/DebugViewppLib/Debugview_kernel_client.cpp +++ b/application/DebugViewppLib/Debugview_kernel_client.cpp @@ -7,7 +7,6 @@ constexpr const char* DRIVER_SERVICE_NAME = "debugviewdriver"; constexpr const char* DRIVER_DISPLAY_NAME = "DbgView Kernel Message Driver"; -const std::string driverPath = "C:\\Windows\\System32\\drivers\\dbgvpp.sys"; bool FileExists(const std::string& path) { @@ -82,9 +81,9 @@ void InstallKernelMessagesDriver(const std::string& driverLocation) // try to uninstall first, in case the driver is somehow still loaded. UninstallKernelMessagesDriver(); - if (!FileExists(driverPath)) + if (!FileExists(driverLocation)) { - std::cout << "Driver file not found at: " << driverPath << std::endl; + std::cout << "Driver file not found at: " << driverLocation << std::endl; } SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); From a3c05344612ea1f0e438232c4361517c82f965c7 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Thu, 23 Apr 2026 12:04:38 +0200 Subject: [PATCH 34/43] fixed ninja install upx step --- application/DebugViewConsole/CMakeLists.txt | 32 ++++++++++----------- application/DebugViewpp/CMakeLists.txt | 16 +++++++---- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/application/DebugViewConsole/CMakeLists.txt b/application/DebugViewConsole/CMakeLists.txt index cf0d6976..cde25119 100644 --- a/application/DebugViewConsole/CMakeLists.txt +++ b/application/DebugViewConsole/CMakeLists.txt @@ -3,15 +3,15 @@ project(DebugViewConsole) add_executable(DebugViewConsole DebugViewConsole.cpp) target_link_libraries(DebugViewConsole - PRIVATE - project::definitions - project::compile_features - project::compile_options - nuget::boost_test - dv::library - dv::indexedstorage - CobaltFusion - docopt +PRIVATE + project::definitions + project::compile_features + project::compile_options + nuget::boost_test + dv::library + dv::indexedstorage + CobaltFusion + docopt ) install(TARGETS DebugViewConsole RUNTIME DESTINATION bin) @@ -21,16 +21,14 @@ target_include_directories(DebugViewConsole PUBLIC ) add_custom_command( - TARGET DebugViewConsole - POST_BUILD + TARGET DebugViewConsole + POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/DebugViewConsole-small.exe -) -install(CODE " - execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/DebugViewConsole.exe ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/DebugViewConsole-small.exe) - execute_process(COMMAND ${PROJECT_UTILS_DIRECTORY}/upx.exe ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/DebugViewConsole-small.exe) -") + COMMAND ${PROJECT_UTILS_DIRECTORY}/upx.exe + ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/DebugViewConsole-small.exe +) -INSTALL(FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/DebugViewConsole-small.exe DESTINATION bin) \ No newline at end of file +install(FILES $/DebugViewConsole-small.exe DESTINATION bin) diff --git a/application/DebugViewpp/CMakeLists.txt b/application/DebugViewpp/CMakeLists.txt index 54ed37b2..7c474738 100644 --- a/application/DebugViewpp/CMakeLists.txt +++ b/application/DebugViewpp/CMakeLists.txt @@ -43,9 +43,15 @@ target_include_directories(Debugviewpp PUBLIC $ ) -install(CODE " - execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Debugviewpp.exe ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Debugviewpp-small.exe) - execute_process(COMMAND ${PROJECT_UTILS_DIRECTORY}/upx.exe ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Debugviewpp-small.exe) -") +add_custom_command( + TARGET Debugviewpp + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + $ + ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Debugviewpp-small.exe -INSTALL(FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Debugviewpp-small.exe DESTINATION bin) + COMMAND ${PROJECT_UTILS_DIRECTORY}/upx.exe + ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Debugviewpp-small.exe +) + +install(FILES $/Debugviewpp-small.exe DESTINATION bin) From fa72b042cc50a8fe570b917b0a316a643298d5f6 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Thu, 23 Apr 2026 12:11:15 +0200 Subject: [PATCH 35/43] replaced remaining tabs in cmake files with spaces --- .editorconfig | 14 ------ application/CobaltFusion/CMakeLists.txt | 12 ++--- application/CobaltFusionTest/CMakeLists.txt | 12 ++--- application/DbgMsgSrc/CMakeLists.txt | 18 +++---- application/DebugViewpp/CMakeLists.txt | 26 +++++----- application/DebugViewppLib/CMakeLists.txt | 16 +++--- application/DebugViewppTest/CMakeLists.txt | 16 +++--- application/GDIGraphicsPOC/CMakeLists.txt | 24 ++++----- application/IndexedStorageLib/CMakeLists.txt | 12 ++--- .../Libraries/docopt.cpp/CMakeLists.txt | 50 +++++++++---------- application/Win32Lib/CMakeLists.txt | 8 +-- 11 files changed, 97 insertions(+), 111 deletions(-) diff --git a/.editorconfig b/.editorconfig index 60e03a5d..3a3a85f7 100644 --- a/.editorconfig +++ b/.editorconfig @@ -6,19 +6,5 @@ trim_trailing_whitespace = true insert_final_newline = true end_of_line = crlf charset = latin1 - -[*.cpp] -indent_style = space -indent_size = 4 - -[*.h] -indent_style = space -indent_size = 4 - -[*.rc] -indent_style = space -indent_size = 4 - -[*.yml] indent_style = space indent_size = 4 diff --git a/application/CobaltFusion/CMakeLists.txt b/application/CobaltFusion/CMakeLists.txt index 44ea63b3..9d7ec27d 100644 --- a/application/CobaltFusion/CMakeLists.txt +++ b/application/CobaltFusion/CMakeLists.txt @@ -13,12 +13,12 @@ add_library(${PROJECT_NAME} add_library(dv::cobaltfusion ALIAS ${PROJECT_NAME}) target_link_libraries(${PROJECT_NAME} - PRIVATE - project::definitions - project::compile_features - project::compile_options - nuget::boost - dv::win32 +PRIVATE + project::definitions + project::compile_features + project::compile_options + nuget::boost + dv::win32 ) target_include_directories(${PROJECT_NAME} PUBLIC diff --git a/application/CobaltFusionTest/CMakeLists.txt b/application/CobaltFusionTest/CMakeLists.txt index 2672727e..00266e2e 100644 --- a/application/CobaltFusionTest/CMakeLists.txt +++ b/application/CobaltFusionTest/CMakeLists.txt @@ -3,12 +3,12 @@ project(CobaltFusionTest) add_executable(${PROJECT_NAME} CobaltFusionTest.cpp TestExecutor.cpp TestGuiExecutor.cpp) target_link_libraries(${PROJECT_NAME} - PRIVATE - project::definitions - project::compile_features - project::compile_options - nuget::boost_test - CobaltFusion +PRIVATE + project::definitions + project::compile_features + project::compile_options + nuget::boost_test + CobaltFusion ) target_include_directories(${PROJECT_NAME} PUBLIC diff --git a/application/DbgMsgSrc/CMakeLists.txt b/application/DbgMsgSrc/CMakeLists.txt index 43f08e33..b1b4355f 100644 --- a/application/DbgMsgSrc/CMakeLists.txt +++ b/application/DbgMsgSrc/CMakeLists.txt @@ -3,15 +3,15 @@ project(DbgMsgSrc) add_executable(${PROJECT_NAME} DbgMsgSrc.cpp Timer.cpp) target_link_libraries(${PROJECT_NAME} - PRIVATE - project::definitions - project::compile_features - project::compile_options - project::console_link_options - nuget::boost - dv::cobaltfusion - dv::library - dv::win32 +PRIVATE + project::definitions + project::compile_features + project::compile_options + project::console_link_options + nuget::boost + dv::cobaltfusion + dv::library + dv::win32 ) target_include_directories(${PROJECT_NAME} PUBLIC diff --git a/application/DebugViewpp/CMakeLists.txt b/application/DebugViewpp/CMakeLists.txt index 7c474738..b6a3e0b2 100644 --- a/application/DebugViewpp/CMakeLists.txt +++ b/application/DebugViewpp/CMakeLists.txt @@ -22,19 +22,19 @@ add_executable(Debugviewpp ) target_link_libraries(Debugviewpp - PRIVATE - project::definitions - project::compile_features - project::compile_options - project::gui_link_options - nuget::boost - nuget::wtl - dv::cobaltfusion - dv::tabbingframework - dv::propertygrid - dv::indexedstorage - dv::library - dv::win32 +PRIVATE + project::definitions + project::compile_features + project::compile_options + project::gui_link_options + nuget::boost + nuget::wtl + dv::cobaltfusion + dv::tabbingframework + dv::propertygrid + dv::indexedstorage + dv::library + dv::win32 ) install(TARGETS Debugviewpp DESTINATION bin) diff --git a/application/DebugViewppLib/CMakeLists.txt b/application/DebugViewppLib/CMakeLists.txt index 9b656c19..8d7861dc 100644 --- a/application/DebugViewppLib/CMakeLists.txt +++ b/application/DebugViewppLib/CMakeLists.txt @@ -41,14 +41,14 @@ add_library(${PROJECT_NAME} add_library(dv::library ALIAS ${PROJECT_NAME}) target_link_libraries(${PROJECT_NAME} - PRIVATE - project::definitions - project::compile_features - project::compile_options - nuget::boost - nuget::wtl - dv::cobaltfusion - dv::win32 +PRIVATE + project::definitions + project::compile_features + project::compile_options + nuget::boost + nuget::wtl + dv::cobaltfusion + dv::win32 ) target_include_directories(${PROJECT_NAME} PUBLIC diff --git a/application/DebugViewppTest/CMakeLists.txt b/application/DebugViewppTest/CMakeLists.txt index f9a9e71e..b6cc104c 100644 --- a/application/DebugViewppTest/CMakeLists.txt +++ b/application/DebugViewppTest/CMakeLists.txt @@ -3,14 +3,14 @@ project(DebugviewppTest) add_executable(${PROJECT_NAME} DebugView++Test.cpp) target_link_libraries(${PROJECT_NAME} - PRIVATE - project::definitions - project::compile_features - project::compile_options - nuget::boost_test - dv::library - dv::indexedstorage - CobaltFusion +PRIVATE + project::definitions + project::compile_features + project::compile_options + nuget::boost_test + dv::library + dv::indexedstorage + CobaltFusion ) target_include_directories(${PROJECT_NAME} PUBLIC diff --git a/application/GDIGraphicsPOC/CMakeLists.txt b/application/GDIGraphicsPOC/CMakeLists.txt index 4b11482c..d9307542 100644 --- a/application/GDIGraphicsPOC/CMakeLists.txt +++ b/application/GDIGraphicsPOC/CMakeLists.txt @@ -8,18 +8,18 @@ add_executable(${PROJECT_NAME} ) target_link_libraries(${PROJECT_NAME} - PRIVATE - project::definitions - project::compile_features - project::compile_options - project::gui_link_options - nuget::boost - nuget::wtl - dv::cobaltfusion - dv::tabbingframework - dv::propertygrid - dv::library - dv::win32 +PRIVATE + project::definitions + project::compile_features + project::compile_options + project::gui_link_options + nuget::boost + nuget::wtl + dv::cobaltfusion + dv::tabbingframework + dv::propertygrid + dv::library + dv::win32 ) target_include_directories(${PROJECT_NAME} PUBLIC diff --git a/application/IndexedStorageLib/CMakeLists.txt b/application/IndexedStorageLib/CMakeLists.txt index 82dc2da7..11c0aec4 100644 --- a/application/IndexedStorageLib/CMakeLists.txt +++ b/application/IndexedStorageLib/CMakeLists.txt @@ -4,12 +4,12 @@ add_library(${PROJECT_NAME} IndexedStorage.cpp) add_library(dv::indexedstorage ALIAS ${PROJECT_NAME}) target_link_libraries(${PROJECT_NAME} - PRIVATE - project::definitions - project::compile_features - project::compile_options - nuget::snappy - dv::win32 +PRIVATE + project::definitions + project::compile_features + project::compile_options + nuget::snappy + dv::win32 ) target_include_directories(${PROJECT_NAME} PUBLIC diff --git a/application/Libraries/docopt.cpp/CMakeLists.txt b/application/Libraries/docopt.cpp/CMakeLists.txt index ce638f8f..4b31e014 100644 --- a/application/Libraries/docopt.cpp/CMakeLists.txt +++ b/application/Libraries/docopt.cpp/CMakeLists.txt @@ -17,7 +17,7 @@ option(USE_BOOST_REGEX "Replace std::regex with Boost.Regex" OFF) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) if(NOT CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD LESS 11) - set(CMAKE_CXX_STANDARD 11) + set(CMAKE_CXX_STANDARD 11) endif() #============================================================================ @@ -25,11 +25,11 @@ endif() #============================================================================ set(docopt_SOURCES docopt.cpp) set(docopt_HEADERS - docopt.h - docopt_private.h - docopt_util.h - docopt_value.h - ) + docopt.h + docopt_private.h + docopt_util.h + docopt_value.h + ) #============================================================================ # Compile targets @@ -52,10 +52,10 @@ if(MSVC AND BUILD_SHARED_LIBS) endif() if(USE_BOOST_REGEX) - add_definitions("-DDOCTOPT_USE_BOOST_REGEX") - # This is needed on Linux, where linking a static library into docopt.so - # fails because boost static libs are not compiled with -fPIC - set(Boost_USE_STATIC_LIBS OFF) + add_definitions("-DDOCTOPT_USE_BOOST_REGEX") + # This is needed on Linux, where linking a static library into docopt.so + # fails because boost static libs are not compiled with -fPIC + set(Boost_USE_STATIC_LIBS OFF) find_package(Boost 1.53 REQUIRED COMPONENTS regex) include_directories(${Boost_INCLUDE_DIRS}) target_link_libraries(docopt ${Boost_LIBRARIES}) @@ -65,24 +65,24 @@ endif() # Examples #============================================================================ if(WITH_EXAMPLE) - add_executable(docopt_example examples/naval_fate.cpp) - target_link_libraries(docopt_example docopt) + add_executable(docopt_example examples/naval_fate.cpp) + target_link_libraries(docopt_example docopt) endif() #============================================================================ # Tests #============================================================================ if(WITH_TESTS) - set(TESTPROG "${CMAKE_CURRENT_BINARY_DIR}/run_testcase") - set(TESTCASES "${PROJECT_SOURCE_DIR}/testcases.docopt") - add_executable(run_testcase run_testcase.cpp) - target_link_libraries(run_testcase docopt) - configure_file( - "${PROJECT_SOURCE_DIR}/run_tests.py" - "${CMAKE_CURRENT_BINARY_DIR}/run_tests" - ESCAPE_QUOTES - ) - add_test("Testcases docopt" ${TESTPROG}) + set(TESTPROG "${CMAKE_CURRENT_BINARY_DIR}/run_testcase") + set(TESTCASES "${PROJECT_SOURCE_DIR}/testcases.docopt") + add_executable(run_testcase run_testcase.cpp) + target_link_libraries(run_testcase docopt) + configure_file( + "${PROJECT_SOURCE_DIR}/run_tests.py" + "${CMAKE_CURRENT_BINARY_DIR}/run_tests" + ESCAPE_QUOTES + ) + add_test("Testcases docopt" ${TESTPROG}) endif() #============================================================================ @@ -92,9 +92,9 @@ set(export_name "docopt-targets") # Runtime package install(TARGETS docopt EXPORT ${export_name} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) # Development package install(FILES ${docopt_HEADERS} DESTINATION include/docopt) diff --git a/application/Win32Lib/CMakeLists.txt b/application/Win32Lib/CMakeLists.txt index 28b58271..249a6b3b 100644 --- a/application/Win32Lib/CMakeLists.txt +++ b/application/Win32Lib/CMakeLists.txt @@ -4,10 +4,10 @@ add_library(${PROJECT_NAME} Com.cpp Process.cpp Registry.cpp Socket.cpp Utilitie add_library(dv::win32 ALIAS ${PROJECT_NAME}) target_link_libraries(${PROJECT_NAME} - PRIVATE - project::definitions - project::compile_features - project::compile_options +PRIVATE + project::definitions + project::compile_features + project::compile_options ) target_include_directories(win32lib PUBLIC From 5d47d8b1f318809de8e6874230809d67cab9f4fe Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Thu, 23 Apr 2026 13:38:09 +0200 Subject: [PATCH 36/43] fixed warning about statement always true --- application/Win32Lib/Win32Lib.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/Win32Lib/Win32Lib.cpp b/application/Win32Lib/Win32Lib.cpp index 0b82dc83..87b83c75 100644 --- a/application/Win32Lib/Win32Lib.cpp +++ b/application/Win32Lib/Win32Lib.cpp @@ -411,7 +411,7 @@ WaitResult WaitForMultipleObjects(const HANDLE* begin, const HANDLE* end, bool w { ThrowLastError("WaitForMultipleObjects"); } - if (rc >= WAIT_OBJECT_0 && rc < WAIT_OBJECT_0 + count) + if (rc < WAIT_OBJECT_0 + count) { return WaitResult(true, rc - WAIT_OBJECT_0); } From 5248a58cb67558e37134fd24957d83e06e73065c Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Thu, 23 Apr 2026 13:38:31 +0200 Subject: [PATCH 37/43] disabled timing test in CI --- application/DebugViewppTest/DebugView++Test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/DebugViewppTest/DebugView++Test.cpp b/application/DebugViewppTest/DebugView++Test.cpp index 1ff29635..58b61670 100644 --- a/application/DebugViewppTest/DebugView++Test.cpp +++ b/application/DebugViewppTest/DebugView++Test.cpp @@ -594,7 +594,7 @@ std::string GetTestFileAsString() return ss.str(); } -BOOST_AUTO_TEST_CASE(LogSourceAnyFileReaderRewriteByteByByte) +BOOST_AUTO_TEST_CASE(LogSourceAnyFileReaderRewriteByteByByte, *boost::unit_test::disabled()) { using namespace std::chrono_literals; auto executor = std::make_unique(); From fb4dc7988d8b2b61a665a5bbde7d856e87a0b313 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Thu, 23 Apr 2026 15:08:30 +0200 Subject: [PATCH 38/43] removed leftover tabs in CMakeLists.txt --- CMakeLists.txt | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a580a102..78528853 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,18 +41,18 @@ add_library(msvc_console_link_options INTERFACE) target_compile_features(project_compile_features INTERFACE cxx_constexpr cxx_auto_type cxx_final cxx_std_20) target_compile_definitions(project_definitions - INTERFACE - UNICODE - NOMINMAX - WIN32_LEAN_AND_MEAN - _CRT_SECURE_NO_WARNINGS - _WINSOCK_DEPRECATED_NO_WARNINGS - WIN32 - WIN64 - _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING - "_WIN32_WINNT=0x0601" + INTERFACE + UNICODE + NOMINMAX + WIN32_LEAN_AND_MEAN + _CRT_SECURE_NO_WARNINGS + _WINSOCK_DEPRECATED_NO_WARNINGS + WIN32 + WIN64 + _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING + "_WIN32_WINNT=0x0601" ) -# "_ITERATOR_DEBUG_LEVEL=0" # trips over debug/release mismatches +# "_ITERATOR_DEBUG_LEVEL=0" # trips over debug/release mismatches # /Oy and /RELEASE are added to avoid tripping malware detection # this is quite random, ymmv @@ -80,4 +80,3 @@ message("CMAKE_C_COMPILER: ${CMAKE_C_COMPILER}") message("CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}") message("will be installed in: ${CMAKE_INSTALL_PREFIX}") message("\n") - From 354ebb3a92ec4b651a30a75755c47915468bbe79 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Thu, 23 Apr 2026 15:08:54 +0200 Subject: [PATCH 39/43] added 150K messages test --- .../DebugViewppTest/DebugView++Test.cpp | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/application/DebugViewppTest/DebugView++Test.cpp b/application/DebugViewppTest/DebugView++Test.cpp index 58b61670..3ff42142 100644 --- a/application/DebugViewppTest/DebugView++Test.cpp +++ b/application/DebugViewppTest/DebugView++Test.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include "Win32/Utilities.h" #include "Win32/Win32Lib.h" @@ -32,7 +33,7 @@ namespace fusion { namespace debugviewpp { -BOOST_AUTO_TEST_SUITE(DebugViewPlusPlusLib) +BOOST_AUTO_TEST_SUITE(DebugViewPlusPlusTest) std::string GetTestString(size_t i) { @@ -511,6 +512,41 @@ BOOST_AUTO_TEST_CASE(LogSourceDBWinReader) BOOST_TEST(lines.size() == 1); } +BOOST_AUTO_TEST_CASE(LogSourceDBWinReader150KLines) +{ + using namespace std::chrono_literals; + + constexpr int amountOfTestLines = 150000; + auto executor = std::make_unique(); + Lines lines; + { + LogSources logsources(*executor, true); + executor->Call([&] { logsources.SetAutoNewLine(true); }); + executor->Call([&] { logsources.AddDBWinReader(false); }); + + for (int i = 0; i < amountOfTestLines; ++i) + { + std::string message = stringbuilder() << i << '\n'; + OutputDebugStringA(message.c_str()); + } + executor->Call([&] { logsources.Abort(); }); + executor->Call([&] { lines = logsources.GetLines(); }); + } + executor.reset(); + + + for (int i = 0; i < amountOfTestLines; ++i) + { + std::string message = stringbuilder() << i; + if (lines[i].message != message) + { + std::print("'{}' is not '{}'\n", lines[i].message, message); + } + BOOST_TEST(lines[i].message == message); + } + BOOST_TEST(lines.size() == amountOfTestLines); +} + std::string CreateTestFile() { Timer timer; From b7e63d5a7b2e94e06513cee09965dc04b4316d3a Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Thu, 23 Apr 2026 15:37:24 +0200 Subject: [PATCH 40/43] Fixed issue where every 5000th line was not displayed! --- application/DebugViewpp/MainFrame.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/application/DebugViewpp/MainFrame.cpp b/application/DebugViewpp/MainFrame.cpp index ad99a717..cbdd634d 100644 --- a/application/DebugViewpp/MainFrame.cpp +++ b/application/DebugViewpp/MainFrame.cpp @@ -458,11 +458,9 @@ bool CMainFrame::OnUpdate() int count = 0; for (auto&& line : lines) { - if (count++ < 5000) - { - bucket.emplace_back(std::move(line)); - } - else + ++count; + bucket.emplace_back(std::move(line)); + if (count == 5000) { count = 0; m_incomingMessages.emplace_back(std::move(bucket)); @@ -479,7 +477,6 @@ bool CMainFrame::OnUpdate() return false; } - auto linesbucket = std::move(m_incomingMessages.front()); m_incomingMessages.pop_front(); ProcessLines(linesbucket); From 52b6a605890627b71ee2d070240e4dc68f7d3dd7 Mon Sep 17 00:00:00 2001 From: Jan Wilmans Date: Thu, 23 Apr 2026 22:57:14 +0200 Subject: [PATCH 41/43] Updated upx to version 5.1.1, added a 150k lines test, fixed a utf-8 sourcecode issue, updated the version to 1.20.0.0 --- README.md | 2 + application/DebugViewpp/MainFrame.cpp | 2 +- application/DebugViewpp/version.h | 4 +- application/DebugViewpp/version.wxi | 4 +- .../DebugViewppTest/DebugView++Test.cpp | 37 ++++++++++++++++++ utils/upx.exe | Bin 563712 -> 623616 bytes 6 files changed, 44 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 1e2cdc37..d9fd6adc 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ ## Debugview++ v1.20.x.x (upcoming release) +- bugfix: every 5000th line was not visible in the viewer (thanks to roman-orekhov for reporting and reproducing) +- bugfix: unicode message were messed up (depending on windows utf-8 settings) - new features: capture kernel messages, verbose mode and pass-through mode, big thanks to x64bugreport and 593749519 for providing information, contributions and test scenarios. - fixed #365: support for messages from UWP applications (poorly tested), feedback welcome! - fixed #396: depending on the runtime dlls, this broke when we moved to cmake, now we link the runtime statically again. diff --git a/application/DebugViewpp/MainFrame.cpp b/application/DebugViewpp/MainFrame.cpp index cbdd634d..366e2b4b 100644 --- a/application/DebugViewpp/MainFrame.cpp +++ b/application/DebugViewpp/MainFrame.cpp @@ -96,7 +96,7 @@ std::wstring FormatDuration(double seconds) return wstringbuilder() << FormatUnits(minutes, L"minute") << L" " << FormatUnits(FloorTo(seconds), L"second"); } - static const wchar_t* units[] = {L"s", L"ms", L"µs", L"ns", nullptr}; + static const wchar_t* units[] = {L"s", L"ms", L"\u03BCs", L"ns", nullptr}; // visualstudio is apparently unable to display the micro-sign correctly in UTF-8 encoded files const wchar_t** unit = units; while (*unit != nullptr && seconds > 0 && seconds < 1) { diff --git a/application/DebugViewpp/version.h b/application/DebugViewpp/version.h index 673196cc..ced0201d 100644 --- a/application/DebugViewpp/version.h +++ b/application/DebugViewpp/version.h @@ -1,2 +1,2 @@ -#define VERSION 1,9,0,65 -#define VERSION_STR "1.9.0.65" +#define VERSION 1, 20, 0, 0 +#define VERSION_STR "1.20.0.0" diff --git a/application/DebugViewpp/version.wxi b/application/DebugViewpp/version.wxi index 952533d8..acfd7791 100644 --- a/application/DebugViewpp/version.wxi +++ b/application/DebugViewpp/version.wxi @@ -3,6 +3,6 @@ - - + + diff --git a/application/DebugViewppTest/DebugView++Test.cpp b/application/DebugViewppTest/DebugView++Test.cpp index 3ff42142..9e80f604 100644 --- a/application/DebugViewppTest/DebugView++Test.cpp +++ b/application/DebugViewppTest/DebugView++Test.cpp @@ -547,6 +547,43 @@ BOOST_AUTO_TEST_CASE(LogSourceDBWinReader150KLines) BOOST_TEST(lines.size() == amountOfTestLines); } +BOOST_AUTO_TEST_CASE(LogSourceDBWinReader150KLongerLines) +{ + using namespace std::chrono_literals; + + std::string test_string = "ThisIsALongerTestMessageThisIsALongerTestMessageThisIsALongerTestMessageThisIsALongerTestMessage"; + constexpr int amountOfTestLines = 150000; + auto executor = std::make_unique(); + Lines lines; + { + LogSources logsources(*executor, true); + executor->Call([&] { logsources.SetAutoNewLine(true); }); + executor->Call([&] { logsources.AddDBWinReader(false); }); + + for (int i = 0; i < amountOfTestLines; ++i) + { + std::string message = stringbuilder() << i << test_string << test_string << '\n'; + OutputDebugStringA(message.c_str()); + } + executor->Call([&] { logsources.Abort(); }); + executor->Call([&] { lines = logsources.GetLines(); }); + } + executor.reset(); + + + for (int i = 0; i < amountOfTestLines; ++i) + { + std::string message = stringbuilder() << i << test_string << test_string; + if (lines[i].message != message) + { + std::print("'{}' is not '{}'\n", lines[i].message, message); + } + BOOST_TEST(lines[i].message == message); + } + BOOST_TEST(lines.size() == amountOfTestLines); +} + + std::string CreateTestFile() { Timer timer; diff --git a/utils/upx.exe b/utils/upx.exe index 50aac9268246e0584b2fb1ed5b2ed7106984df25..f092ae5b9a730faacfc6a63a38b04e5645e6c4d7 100644 GIT binary patch literal 623616 zcma%idpy(8|Nm|nW*g={45Q7R#OAh*jbSdiB`udou&R?L68|1-~jYX9E2DgUkhuPR`Ktq17; z*O{OP7!ljld@O)@^k2vSr$p%iaQ~ms{}blt6=3?G_NK4@%eMda{B+uExG^~bwIjkJXX|!(4+zY5yr4w0Fcg^!_j$S3OjTFX5GR&Kjymt zKrC8OMMd=74gSvmmTyEh!99?Tpoe9SJ^1ZqO9%FQ(JWX|-WRwsm8}mK9*J}TJV0I> z+o>^XT3xCm2HL&mppfNEVHScv&CO2kq*tqYwkx)lmt zGBU!J*IcnGbsNMj3&Jrj6^rrCJC`ZAMS&)!=RYBIASiwmUq4aZ-;EvqKJ@IlN_3;l zr?&bS2Dj@6Jx5yq;q^4T06zr08<8g^T7UWt60=tiqH8LqUhJa-OMsevWAN73Ip1_` zetno#ETa=U5xD`d#%b{A)8NG((M!4MMLOcnR=VPcgl%E_mJi!R^29l-!0kFHbNTTh zaYCKeEaH8kzoAIoWkXw z`2h-}db#T&5#(I+f+GkZT=V#jE=_n*SMY}U`>WWy{OfG=tiC_`LI5du@HS_%X^Ti& z)&6i&8~On<>klU5GleTmlMpRaIEz3YHBrO4;2p9`rfn!y7r<<6u@LM%+i-^Q?u#76MMe_K-Q_yypZH;K2|@)6@K0gCtC zj{W&a2CyyKSL4wV+#y@rMY9vnTBzSD*9;uGp}(*_YwNLR{LF3M0f77)e~kKy`TUC{ z1(`s+gI1oW43Zb(=tuX#j#1`5sT7X6jt#D zrsU7QBO%DPtorwtk%ctIdyJuXa zXUSbWVAspV%V z=e;6%(}4O16||P8p??F4B6qchww_n&R{O^K_xYna(^!kpR!3Za7OnM`QAO1C*35Qt zP~rrwx*|kBfL5?Cq*W7B05=>5g=FF?9A5{UwMB4&T|R2-qaYDrJ%U37Ada<-k=7UI zz$s)By+H(A?*cxUqjeGl>6hd@TOJ^A zvlFxPIAYOmQfBedDqQ0;B+S)VKR|?ZHFh;d%Kj^5WpNKSOU((9n~Vkm&%$DUAdoUI z0$VcAD{VApYs>=3~K8%^4W8OayBM_PIvsdm%lIF5{EMzR9$Pe=@aaPlO>|6a@*KQ1nzRe zOV_j8Jz8!7r1d{{--7b?3+)=7CFxu@)Yvv3a^U^nT!e3D`%n3N*Xak- z7@xnn?J&F&M`lMnx zo}3a2btAjo+;^LsCt>N?Mw@!6)f6WyBehu}nL*(vstAk=nPmZ01_sXdr2&f5iqrc8 z_VTT;b>87Zm8p{>LdRzgSI78siB~f<0_MDx_icJuSm?MmwHf})J0c@9DLW*VrT|q+ z(5j>aIes*dm2a5>&w}0G* zf9|qrXs?kjj@vC1e%f4wDZ1mcY2WCX({$2+mdUM;&*_;$dY?=A3m3Sjza-kjKfb%C zM@3&nU*G>fR2yQYq#W;d9ofeKDSypW{@VRz*WEEcpO_Ip;nq97Jw1-a4*q6<0~LfiwJWoFB_iWk0>^3vsDbz>!4z`kmTx;6Qh@bA)pl-Oc$^#T#8G z62jmggIn~voTY;{8PpT!%{nD@uUK8jBRWb+YPEGJpMQoL(DZ1YPSUihsZYA% zv=_8l>It`&6Q8N1f?mB7(K5|>x_LLTcS_1CH9%-2VwmD4KqkB({JEPTaNReNA-s!y~A&sV$ zl-SXeh?a(&*x0!w;a?jn!`Vktx}uQy35LQryV{z&|sy-=_iCFTt~5^j?M{} zt6MHoH$y|WP>-`285Ph--7xc{lT%L|=vYVdrQPP~xK>l0e-#*%WCq4M$e2s=Gml9h zU{&XMrdRpgO{(zJT-RJL4&QSkjQ0M$UERpbMB?Me)z4_~lOvzboUwa%cn2nvdAQoj zJ>4HZg~6z&KlT6+cn;RZ{g263K9L$Zf=QsQKSegV{Zy76Em++T8uvkvirY!(H1`dv~c_ zg(nO~GcjrV#OK->A`tVoQ#cY#YeDK`lJJRL%!?NijiBGvS6tV$4LBJeL7%dHu;tDsF;3pc_5Kl~qnM&QwHc9#gEs!y zsYl`A+lwq)P1&2FX{M@ZQ+-@|>XWREk}csx7XkM}Oju6W+sr~I-J~4f#V=&XeBWZQ zvc*8$(82vQzZWAd&FDc)nF|eOXT__SP2El>OzG~uy(6DSa+~e0Uw@IyEVYw>+3|Sx z<10Oe2YuPz%5u-33NR(c$9ZpU6d%(w&y>1r+PK%|es_8A zA5bLACS@q}kjLasba4MH@Ed8=LzRtDg_{$AY%Nauh!QFYFwR!hwqQO9*u{%z{gOe_ zojomcbbMt{Ls}Da;aQV17JU1DYE1$rZpPR2T`QGk=WPU&M7Oo}v)GvyI772Gn(3+q zE~056La%Y`PC`WLU5F+pUH?Peim@rQNkPrJ9WH2|MZU&ZO9Bk5;se;YZ=62N2#J?QRIn~zHXpD1hD zBz9N6+S+Ek$`_`G2!g}(L`QUL%wy8^K|6^;0C4lP4&j#riG*#|CmsCr_2KAZbhoT` zl|I1Y*yX|h4C{cCvIrJL)LnC|KHM<6l;2a=Y|x+?^SV@^FMrLvi#lL=kn`W$wNT-Hl zz2uuE2l2-|*O0d9TadcP;x5U`rpq_44JxYLPYqK)HedhB#!Mnzvbf6ony-Fc^Rsu+ z$2>31twCXE`RjR#`%}ZRrPEg<)hUf)bxmZ+ba@`{1^IUJQ1FFA7c?=W5-#c4g~yz2 z(!Dkhr^c_0=8$`dPM0w!PC$&zXrj^b!I(Tmz?=4P8^{@lWWhTuI_aSrfzTEsE z?H&HdWyFd0thWQp$o(vW=`$y{h^wk~-#Jmb4yb3+;TC z!E>>$dX`<;W>*|Gn88kGMIeMkSnn6u$&p?eG~cJJ{rgdj{l z;AhQJWcIZ2jUW%p?Z&E0Ns1=Jmd0Wt19YS9w+8_NE#DdAPoKmZJMDpbV%Mssgx$5o z$!)sK%}vdE$s6TUR@*z=Ji^%E^ElE!iK<`+Xo=?Ln`RE^4q zE=S}UI0`+rDOf`b+kcwM@MRWTe3}Z6fw9s&>%VQq8*rl`QejXG%td2OGu@t&wGIz{ zNhzUia8{vy8q)B2^Li<5o#F5OtJH)`1Av|1gR;^zY=7FU!E&(y>Rcw4%#D##SvcUv z)F)H5ajOy|2js6=qS{xgc#2#fmy3x}&_5;CBUSmj_LLw>u=g&mc!NZ+dDdM?W z!);la-wW8$Lz(fhqF>YRV6)uJn$q<93y0^bwp9jvEvi*xnmFr|OdSc{vsS)@@Tny| zdmX3V%`Yz;4R*d>>>Fe*@zE-SXEp&Sr4y=iK+@A+!RcwYC)77edw(*p3B0X&%RH+` z#9?QftPGgdX>+6{axRnRoH|Hpigu}J&-o2!h0sd2-7sbQAEtk6>Zx9q}yyw@=gNK9(}O6$lxhxVfx*9a-|2GG&52$X_#;}OS|Itvxe3u z&t{*Q8GbjMy`Q=CCX3XPQ#@OHxxnfcVCrp@i_m@m9N>Nk#fO#l^cF z(t1|Uol5^^xe-hc{06-LjUQT%EusF*n!M>$2;a`r5W&Xtm%PQ7vDb34E(XU(ZRAt{zcnpAaW|TYw4{|?Q>21 zynfowO3m|&UX90B%|5yL*4G|#K!Fi&+0xTmVKDGiKcx!aYsrDQ`h zTE{=g>=yATwsbHhEo|ul1lchf-@1A>>i{-myDdx6lI~Q3mU9$W;pPN&h&rkGF=7W5 z;oRrjA4q{)>tdHRQfVmi#G|6pd6A(Y-5oEORW)1v<|`_3@F;NwGKhmg#KmvJ2Px0c zvXoo`8p--dxb!>#z3u^-U8G1sUL<`szy_0kJdllQ#o(wohJ?hlh=Fh84$_JJh~qc! z1>%&&##>uWCF(B(`?MLo9C$gp=&(iM`POq@@6uJ(FVnd14zhBBeqBRwrZEw=ZEO?T z&5@M43v!^F?I0vXwu)XIaq7bg@UBYAm>n|WkJKo?N5z0Yu`8@iurQtr5&sKe!994W z(KOKPVG!h^!yhLE@~Mrb@A>c`&LnKr}6yXxIUe$U@Di zIkramb23)t*`J6<3#Ro(epMNR0r927oKB>b&!MKcS@!8$(YLq-WYu|pz}?vaEhzi! zANc64t;(xG*nXR;%W1q{Iad1|)J@9>S)jMXPSz!l*@SrZxvm0b!!2}_S4Zj!{s2(q zg~9l1%^=I?B*vb+sj#h_NKvb|Nz48N1AfFboeOv8cSw0JK`1aAaXv*4iiCeZd>lBf*iMot zgOgoW0?7hr!(`h)*~mgFc6QqIwt*#W;&nSqmHc#<6*LBmEyhaFfPn^qBZfb zL4>2SD;?i|{z2{IkQ6a)r}9(253+N5%^zC=8IE?!6R|*CtAMS|($^o^SMP`mRfl2D zpA<@VI>t-zM{&UOZdr%yRoYhi-#Z4r(iJn#dKlb@xv+<&6B%EV6KQ4YSiSSOR*6`_ zVovq^%JXEdqZhW`Q%3=M64R}(s03pDID(eRo*HI6yL=vJcQwaTWpUs-tR zfme~5Y6Mu3G2s>AE>^A?B_dLDQ&xt3cKYp}YUpee*|4clo6jLvRU7yvQDD1x+sQnC z_Xf#n@OE4Sl&Y_?y7bP*_Qmh)!1q!3!w8@%ULSPZI;b4HvBGu5ZRpiJ! zVin>TGAl+E(EtG#CQ?6(i8_C`7XZuajMuo9QvK^eqH~A&BnPo3$EpNN0z>aZTdVx| zCs+s>lf^dUL_vXURF(aRt#R|;Cew1@bn9pw6Bx%yc)c=pWY;;e^6V!>>nWYkL1WxR zpSaW6&&$Lf7ISfsr2*QhERHwb;l**ZEH#?qZzfhdj6e@p#yy*DI+r2eZ1Kk8{OpYg zzOu_3*5u^uoAC^&6Z-81Rg|VE_aM5K-tdt8%LTe7RACd;AM@-lsb*lh zZ@uV`(%J+t`#Xly@a+^$!1*ev^ic^r<;aB;xlFiZ|7Kb0YQ(WSGAhM(UQmMs7n!vS zrlG3|TOoX=`texbV0#&&-f)cPZR=r*J%i@a=9nFE{5>(kJG#7DK{DX4r0PhwZzN@C zdI}m}^&V!EV>pdrPX@oq&*u;4Yq;!jAtQowQ@q?A3_VIbM zZ4djC@%XWW_xm4Z%t$_=t#*=mZ>6QK6N6AJfKwmeoL%6zx+pjL3$f1nYHJg2LhP+s59NDv6E>j&odccALCQ7@V-IIFZyle# ztEo(#H9vOY@@NE#iR4~#Dl$%_XJJe=cV9i{-R@%B=HV{#Jc?o9g*2itS$qxEaBhAZ ztaaU#F_#(e2`hykRwTA3iSZIqiZ{05q>sDd_$vqH^H+VEt5ts-!ts2N1mys`fsYR7 zF;?{Fiw-cB|4jxu=s}A>@k5HQHww5^3FRt|80W5Ms8NXm)3XStfy!h|_DnvwXuqkp z-vu{VG+}I{6YBr=tD`9}2?w2h7NlJ~=@mRH=Q+X-IrQ9(Db+?yXV1lFzxn$(*pb`e zB)+xL`J;XF>Y~}ZCiv>^tJhG=%>q5kH9jQQZI*O`BmQPs<2huQT1FPzqmszu)mYQRz?EzA*vCQ^<7 zg}hq!=xjY{T|M7Nwm0=f_8-xPC{t^1n@OQ3`sb1}0q+R1ZO`A8y*q0lrVUBUO;0d} zfDCfMacF8uVPBhjRhmH7#FLg06T;~PqShv??u!wVnXGMhN{TJvK*7z4=NP(R64aTl z#=>PD@{%W_-^Gm z|C2i^jO}MH@-=fAT4i48tidWu*pS0R1_zWt69rR5r<1XDUEg`ZfGP%hweU46<2e$x_ z_m674YvKdFAe_;G@Oo0zLuMO4eOey?Y}%S z4xNgqA!a1bW{gapIh{Ge?GVg%a7ScTNo!MMBi#0ZuU`<(?OdlcvFr|+h`A?YY218w zSnuLw2s*F(Cks16pAO3QiTtjuj7pf5RXdd*^__n+sQX$|IRA)~hto4JVx&Rvt{rEw zWy)~_vsd_;-fP^N^Ozn`7F460+3nrGx1@40;gtGeuG864&5J5QpOU|zDpUP;b#O4< zaLA=7g`7}8@NkV4<*w#-WN-rgK!Go`i(=tyHnyBR!_PV($Cgscd{*ceA{u85B)5r4 zN%DLwo~?>x(g+M-`-ls7zy&WLwzKe*l0=cU(gx{+8GU7p3U(w@@cn+txbv<0upNjV zv*p>*d%6m5gU<>yi+t=OF&RGTnhN{wc-KpAREf!64$C>$4Gn3lP4wowEi=3hMnbPg z?B-XyxNVzl9S=cDu^{$7yzR`O_VkX^rwsZiku=&>Zwhx%&ncuMbAX0#r{#^Zwg&o$ z_UlJ?h@~+35EGb4VtkQC6gcK0DG0}*90=EIjZPe4e|{MHH-cXY9CQ!smfDV)cQJ)K zP9T+fY+K*%m3iyaK?&HymFkvW=CN!jOtwT9DziEE*s8T{iI=f2oMHpTq?ox^HtdEd zLtVg%rY^(oePj8KvvR*P_wH1xHbUpI z9?$lfRIWO;MZUB2t#i=s90^Y()lY^TBb7$N4}^pygcFQmuTajGwDhUwv zSWC^W}K?U6D+fH?WUB7c)&C5|MV2U(?Fu(!1d^2l4 zsURNrhY3S8+>uLrB>gG1M95&wO2YOh+<(!wfN@h#uWUx))WG=7@KQzsh&I}6Ny_5@ zq`Iln2|?GEP+85dJ5lH918x{*K(k33KHWC7xiWI#K82s3*%oIjC*Y*^&o4cZ5SMCT z>+5hdBU_1G>%#M2qNAy*5if$#)0xOPGL`WkUh9eH_dZM1O zBha>;`-<}i)TaCb4=F=1qXL!S=2tnD}9$zWNK`QL4dyDiz-VaNgB? z1YXB5YSGF%k(X=-W-Cb+a1cgICUtud0EvfTJIm~Me<|>S@9b>x6|}Opt&^^F;0K8P z+`f#JcIK>W=yji<2htl@!H1J3qMDW-SUFFY3v}njw9hy-V9<1r=#6AxSUTCJIP}1Jem}1K5sVK5AJXRt` zZZYM=d0_uARp5Y$8JR5;bu|I1E>~1xW>}G@hXXogRwyn+)M$huj?^quaW! z4Y^;ToEvlmuTG|QTI4Wtl5+IZmF{kZ6q-ANN~yK`+wXs;WKW0~Iu|@!&J0JI=Cm|F z066ksMT1$7yH70I=SDt*@25H6k}0Q00RT&+_Cj46DsoSTQvM? zpW>R|R69F59gQrs_-^ADzc=`7Nz$G{6qWlo82+_zJ%6fp3!|>|=^; z-7VeX1fp`M`_JwupzW8Zr9lNbMEyBhaPBYq4sz7BA3yVpI2$65UFzX0c|2R%I~nwZ z5;%9?(3WGu{o$o=gYIkqTsCqw8Nj#pFBl`QLoBw8kwcv+m$GF!cGfmqdzpk=1*Ko? z=(2qRX=}rRImcX2pxhF*D;wwFCJ$t)MIfzpuY52HDG!BAx4RhsN@K;S|A@NmQ07Gr z8bf1sUQp>|uTzTem#FEY)>2!2G&}DElNo|Z3r{-}=B{eGnx;k>y3Ii@^6id3+J{APt<*WIA#o<=`?(|Tk^Bf`9x!{Q4NBmFNE7O{La`)s`=}&!PKHC!$HkafYl*MF* zR!bW>+zlOm6q(lu;NbVz^~a9wUX|V@4{-xpZiSuj20ep}NYk<>6MaqFKv3r8lA?Hs zP-(0#uBiP{cW-*=oRXQyY#GR0UELGv8SI5IA%@O{&Q-j)J{9_BkB#J_xR!)ec=00N z7@e|Dn=m6LpHV|>PeCMvffLQoFGW40GT)Vo4^<0f;`g_;P}Yu&v}2AVFCa9Lr{u@D;K@ka)0@jyy=Y zONqsMmz8hjJVk49;_GC^)pKQAtLBX+90?YWqcAj;$!Mh(nXYMU(D|&?1!wMBjz{7y(4QOR+H?--@tHdYG9(Cxa4 zspTNi2stXB5YbG_LvmtjdSuEO-)3~i-7L!-JR^%E*AVPNq)Yf(5Va%~s@~?baaHO# zrxVn3&%S}H-Qg1Ugle0o^aXMpe5j47M<5`7eu-MN)mo*BCyLiZWsV-iD?848*(Ook zQ|i>{jMIpCxt&T-Tz{fZ=E#?CZA~{uM3SOwz|l26dCkq?YthBA9^KM>!|>w$t=ifuxjTD&m%O+ecr@e5g?4SiR;D)(R(k%agH8aoVp2@U z--7YV%==-34kIRTqIfm89Dt0<7Noz}UYu5(Q!o_0S~yw=%R^-chddE0&ZJ~3wcQBM zxVnQ}>J%3d!|T)mt9#;`8nX`yLq{IwiegUrki9VlV!Gs5A-AF^uphhKZ4Ob@`%SINTRsYxiA zQfuXe_V;Za*7{Ad(NzA(z44XMn^ZB)&_P-8onWX75a0j#>sA;awH;C!|Lgg6kzhj1 zrNpqvtY3x7a|e`E2LHSiCq~b12SZK?Q594!4eY0+rq`RSWEgW>Vq>~WSV?puq>ITX z`d)aTgO*aaG~{QczGDAi> z2_=KAIU{Yg@<~PXgGgDdLY@YRuZnsmOR|lH{iv@}4g>Ip^XlFj%#azNKz&`JHiuEq zd+Ti>NhMf7+2@8LPp6|K3GliWIe;|kfk&S+y1mfWbfvXut3Xh=d+y& zR|_Z$!Y*e?21@fRd%_t?qB*$DNbE>T8hVU5wkv%<-~A4a+wW{t9lV-k!CChc#Lo(Z zk5`eLZ=l{8m3!){aLr!{SXRWVLmURLK=c$uujIl`aC_1VsTLhgj6AErmf@CZWb$rque5T z8THc!{WzE3`bVZ5CZqEWJ`7V}7=6$7<3f-I_AA z@s=C$0iOO>8gUC``x(f3h=0(=05&hj8-F(Efw%&}j2ON;^>#ya!7k7UAJ(qBkz&&} zIU3OCfnl5Tz&RX3c`Sen{yIFLq~$rjw#?35#APYW>*rp8@DC}^nn2+I!<;w3ZL-xB z9rA+~gsdDN27`fNM7EMcA~W1DltKs+hecLjxa=_3JN=ts8xOY*Xv`=JR4#Ocz^xZA zH}F`gq*nF_SN(AdaQ)s4+8(Is%b^lq_r*XjL&aaCFq@&9UDF-K0V>k8aPKPa_Ek(ZgFqrwcBbFLy$6*{N`8$%4n*38pi$ zrwoWR(lmZ~nR9+Xb)Vy6xY@-}zjBh@S5rc1{YPb!apCr?DP{}dp~hK|j#SDEqOyNS z=0P@P-+m#D96bB^iKfDVR=FNXckUp2XFlBST%Bg)%@K_Zk=JgzE})t-6C%t94q|Pa z7TcG%Fink5)mX|7DXyP?m2etxH zt4iV}6d1i&u8wBO9#_X2Y^!z2#7t4~Br#ta+USQmg;oK?+xf9sS7j{tBT!DQ~Ba zVfN8)IUhVF!8rIbTlNGrzo)++wu}L23L>*tW0wv$Q+(g``~gy$zX`s8kIzZtN|wJt zmb4=SR^rEjf9i(5-KHLgay|js+pjYe(L*vIGs{Q*xsQgV7v*W4uO;VaKjeU}XKGR| zCwrc#_(P}OKiVPhGW7O(XKlu-`boYoCisPxqx&PDblcZm#T?K6$G6(;R3V<#+C1^f zua*_!n(q+OTT3!oMyvi1PUA6|KkJBe=5CF3x5{D(CrJBvC4E0BHlsN3TgPLWgpl(< zZH)Df#m+&Ty$4tAJUk!Sz;T@2#*de=qAnCcA^ofIIp|<>l#%rw;JoCg^yO$N{gz+1 zP}8b&Dc`pzeg#P7?KZ&vZt0CwCTBCROy7_iJ1WyA&gIXKHD0RAHOYrh`IYvN30A- zu{8JvY~PlOX0N{Atxw$teBH0)51itB`AG!_7q=>0R3{aTwn7x;=vPT{DGD$?e?A`$Wh2dp;`Sw?FvvzII8m{c|x<palJ;84m%OGy`Pdqr*yIVXYoy#dhs@x=!<9P1EEXTYp z8b13945N8cPz`?5Cy$bo^AVbng`2lc6#{%ul5*hd`3bHv-!Q)ZpqF}+>YeX0#g8K3 zA=yxU##aY9&aa6asPVmk5@qhB>9%#Qz840~BG+fAZv!Kn+|~EDLH};pi0Ai{J;%bhKxk&waZ6H6VT^wTNBO<&lkXW zwGvT}sMhbU2c)T!KEDk_bFTXUd5>+{F3m~xhwR{Sy2po_-|>&r^9f51y53IWuuVQ;iiBfw;JGFJENaSLEd$2kAhFBe}o|Ke0SXsQN7|hXTr|BLa z{WimpdBJCKcZ7eE!;@3>SyeLqpncBVf;9~exoe4!YkZCi`Ey|G+ zKV<@}uy2uk``xKOo!Q!E<*XbdjyAe>ut~W_lbj_0*KQ!!xjLMb8abFNFVg-|sE;_O zRgJ~FetqO^sA-^6KR!L&ZvJ(@cd7z^O#{qXHIRqpz9&wE6~9a@cMsG$8mK)q5kyw_ z=|`!TI!_hYrN9e1gV;l#r549_w_QoUUc$Wx&>PHCe`XM(~O*wd3ShZ?tf+opOw?VO`MspQgl};9l(IBM#-dCCdT0tH~o1uF*F4bWDoG)#BO$ z@?~`2x&K*d7&{YPd};=IE_fBJk1>&g_o&wk!_Q1X^qN`Xu%`Lv0$73U_affj(Il1)0GUQnsskKowfaiiR|lk&4iMpve7m=1dp*Cy#4y`LJ5@HNw8du3f7 z`tWWm37E}4bShjAIQ|Wik2;FXy+oFvdzh9TMe!LX2t}>V@bZvj70yUpYt0+%7GhHQ zuG??=-#BRS(Lc)#$w5Kz_S^64CPBhpC3|#9K*<}0o0fW=Sq)Um-KzR|cXOZ%>UM{H z;dSkF7?YNHu6>%{TDkq!O{Fc_dzi4S3z;3M=G`>jPWs(M#;iWyiRWwlZcssTDNDS; zURlJ0Qh9U+jXT0kVDu$WN%w3Z-b1<0=#i{Lf_TqX;xSgcHu#*cB*6vPO}==(ZNCGm zAjAPg8{POOZOh$G_q7JF&Uu!gDj28%i*NdR50ZF?8V>&1MOH}*xd96l^5_{AKzx8q zGlIgPQ|KY}7m)sgr!@1}P9eVKT_C&hki$_^U123hpt9fFq%GrWR=?eJc+w}&@AMGCZ zqlmnb;U#jL)Qu z?Fx(!0O(!i=m6%GAzZuXz-sT&0F^zOUciN(95OY(!uD(l>Ap7>Dfb{*#AldJGYpOM z?9QtqZ|L4|YBmKX3q#PRkegp02SmDWK$gAx$I7tW=SR%xz*@cLbs5p>%7~-21*q1Y z`_TnIm0+3;~?`m8;<1EHhA*tF;q5F+4{ATG}yH#%hd`%3$(a(1w#osb6Gn3fjLPy}Ll+ ztN~@)#v=z;`eMMMcTd_|A5b^12#&RD^;@d8=k^;TVLG3^+k!DX`G>3hMTI8NV>)F} zMbLxScXIJh-qI^klU;wjoV9LJ3WEu9QtuCv&x`N*d_q%_P|TQ5&I&CkZ2K!-5#G(< zN}=bL#tG{?L~)-rxH)Rz?yyFGFWPJO^a9jm$9^~ z>J|FBQXmQ#azuf3Ro~-kS3YzGVzfr$O+|!lvMYly5Ajs z#+^cIS<2@>j509eNi)qO@%u+KG<;ChJ*Cu;<6kGluO@9|(twM$T>;Yw*W(GUCB>4^ zhoXWwYJFLq2C&m6K{{EM3+*B!oR-~y-vZ=2VU|^=vSi{pe{x);v(gT}mV>Muzsjph zOh0yG^>p6oRa&kVghqUlz*?m=pUREchOkjS+(WY|*!lFvw25H69_SSaI{Mbh22z>& zVAPv<^ExahJzR$kshOd|F(+?F4Mf^argV76{ecE4F>&wg_5p+wkfZNAS^y&DPsbEW*7V zjw5_`tZO{!y7hTSsz(VLJS#`tkrCcn;s7KLq*SVAM!s*Ms)}5x@*>t0Fo>djq^Hb@ zn5$`7@A>5GQBV8%rC&3*Ug0JbGSA)8m;mPY4JlXD>AqL;wmNb*xblfGAgg+=Q0#US zN&3!JhzU?^Zynk2PC00`S%OlzH#%fAb4TBLyAJGrSbzg0djUB9+4PVBCLu4Pc$iZ&`O*TVVpd~uk`AtZOJE)jEYE2Z9q#MOQX)8nCzd;GB% z#Y^wIsp3rCd|(9M$NfI7+ujgcN}fTLF1v0}e%3?s#gQhotA)Elt<40Mh8h_>wG0RP z$ng*KF_`kz0QTCB5dDoRU=b2A@&|Fx16I3xVOQYt`~xLP68)(W69vh;y2z z{{fdu52yxl2BdZ-U+bpmvBlh$@5(gf(X7MD7lvXNOYdKRq3xSO%?1LaE)DuY)Dz4n zQBYGKlrQHoY+#u1q2osSPwN}OZFX-uQHqA%M^^4HpvWlMx2uN&?bXwAcgF9#bS3<# zX9rXyW=Kam@|gKZZdGDQ&bKY8H>yoxeHN6Mhth>{Itf6QI%d1Cd|b=BqgZ7S3+56) zg-EnKaz^7zT!77oi(lTBi3EIS(7oJ|3Ao$B3Tk0R{seW^pYED6KUHGa3|f#n@V(Ga z+i&u8?4#RU8k)IVS==2%!@BTF^QE=ZhYPVIxNPK$$^_7bvy0(GV;D8LR$Ux)G-9MQ zC)%B$VD0S)Uc*g&&RyyE6;J!cZvL#XTjV7s+I3&w0%Dj_=;09nxItdld9W;Ikp=Xb z%g>Z8yC!atr$F0~Bu%Dj(HX$ytUpg^I>)1<_qEp#nnco2xq7yfgFMSu^}SP-317M< zT6#<4dJ|1q2`MQ)&L5pD7{%WQ+~t-w)OB=S3rn11VuIe8+W1+BR|1l?=^^{~q~vOk z(YjWjyG$G=P`YTg>q5ZE8(Tt_H5pm&wA)<7l>P@r=N$<3|Htv$4#(Mh@9oGqBknjH z&Xy<{&@P(WD;#=y;HwHJ(NL&7xa489B?XFW!4X;KT^Bk z>{O9|Uo^C@T9HKCo9vM0ee$KRo3X8D6^{rFhNV>cXqpULP|cL_0zIOi29%21xsqtHH?xm8!O2a4^(gzX`NV z`JzB>)q6H_mXwt(FV~y#bKcp>qc9`$+x#n74L-`iHNuc{zqWcbKdLr4R|#;88{d|& zJ@%rHY`_?!!jP z!|R$dcxPXRVv~-ruV8|vZYhJ?uSa%;P)v88PrTuneU&mFr!d8l97&wjO!_6N`K*pg z@XL(OyA>7BLu}q>Gc*vxSY9!S#z*7O9#;uFZj?!%Xfb3DS#5dZAcGS&*66c|eZNOrMllhQ1`dW#{%VPrM0FFzt0 zc93lw;Gtlf8vkHE+np_A-V(S*g6Vhdtnn4p7%$k5;g2JuI~h#zAz zB+x$R7nJ^pqt=d0oG*FO8^ z4rkjj>KEWpYtnvK4Bvtj&jwFm(H*DZ&WeW@njgt0m255+wV3c?%`)#>+r@_Fn41V? z0vDx0Umx?lFKZHIh7ZcVJuIi*1muXTVI@Z{_*Y(ML*{ruNjuo=t2@#1lB!^U1a;}Qj`JYCK&PnTxVdW6$SmsGImU6(dY(p7kg=>1fH&5DQEcV zbyf?TJoGl7m|5U)^C)I^a$);#;H7e2xA#(7pSk;DvTVX7p3JfV@?$q}htrFoXWjgh zUfcc6Mcl(>m&siR{ka>*LnraAC6>1^_L+ER7T0a5cLrz4z2v+b@upo!KTyQ$?J#!u zT|x^1YL&OZXKrk>N;aeDjogswV5zrq6*A&NyYv2W`~$tenC*B%UY-zP+O&?k6mQUs zj&v+VD_x8pz5WM?-5Y^C>i0ljRF2o8cLRH!WpwK59H;FfAHm#bCA>8g9gVP51xvl& z@jqUW(1HrxExYRvlb>Nlamw71?Cy{AtK5W5I95M3ZSyi+6a1^0X+q8#o(CiD%1E%` zYyNm0BY#PT#G($5@^f77Ah@sgV+C=#mc<4RI6$%WE!IL7SPUtQ&{0S=X&i%+w7}d9k1vzad*bj4 zj)-H%WCXS01ZS2qZ%oCq2cUd+87m(Ezn8GJ(OX~p0KWmhjrLz0Q-qkhehzZV2)Liu zSZrtL&0Fr4-gt)6Ps_;q6hAS0;J|GlC7yrZYXhL(0sM}c#7Pdh%$ZZ}Zts8v-~(2G zn+Q*DVO|})!Hsny4_W(X8g_}pRxgjB1gOHOh0U;(;;*bMHApj>`g z^B+4P_#eQk_Op}$HU#gFUg@khX8^)zGnu)8?_&8e0Js^N*}FEhjGRzBqAI#StDyj$Aza1mexn zm?rp{{hnw4>zlNMz=j)DPBOdFljIF8+9h>d=5G#X<0&;S<=uVB>zTqHAQzSWfW`Yg zG@itESKwFMc(rICk^dx)gKBj_u?&-(;~(hz#0zT=J9yeWz!Uznznd-69`r4^>WnFF zS-Lq!3-3e(W^_>r{8M?uf6)HLrWYKZJW(r^k&gsd)5~(E_=0)vs@<@57&5oNJ1^4j ztU21&^*rwU2NaRStJv^78Gao$Z zpSAa`+2NEpGr4mTAjgp0_QT_}(0?_+!%vy1_tU#pS5?SJR_0f$mX^QRa5-<3ve?xr z3dF%5@>Fv_$u5EHl44C|3L? zMy~u-SAcV1$vx0(E#q^uifyC&!r()#XU~0e?R*L0;T#gVceLt5y97I(Y*?OK(@n<> zro-cHNvlYdDSH$#fvezEgurfxG)SDy!*2|@qc=Eo@8rCH@MltxO3giivjF8E#bmm^ z{=$z-#&Na>kA(=8SC|Y$|J+WxA7I9wP9RfM=Cu}V$a`L-33@PQ_p$?lruOT&O&D!5 zP!irrw#U!wjOi$?@FM49~9x+@Jj8%3JS2}gK!L( zf8pU{3^o~y$FhGKi7aWh(;@Er)_qF4Sn7&5W5<}yyaR@UV;5gJuoj0~5}K6ocW%Bv zH4Z8T0otih5hl zt#}HiFxjJJe7Ad0Pw=4+rN!B#wcAP0#NMGu6SBvCA2zPDcVW1x_WA|eg4dQDOCSMF z39tpy>34a-3K*y{-1%$-h>it5PByNIJgjNBRD;my<{Zx)mUO>4$XV2qiJ@Tp?DR;D z>X?IpyM%kN+Cr|4f=tKA05YdL+-A^+;Ck7lfj=)o#@UzQx`sUicOy(nB25egc>0yz zEn@AJf@HPf&sZ;521y3SmDUN{o;EAb+1#JbBr!NSU0hY^Z>m!myl=-W{$Wr7?+h<8 z20xQ^^S3Ihu#%QND3U{Ao!FOlkd;tf*WSb%tC~qMj|dLuL(AREs**3<5ny6eCm}R? zIt!BoJA_1Zc!Dl@{17Vs+qmxaM*n4=H+0l z+wtgJREt^aE)jtn8UAQXKbPBOm>9{NaxfBy#g$%EkBn3*1t!ct8XpZ|2Zb|Zlm10U zdHC%jb|k6geQ=IJD_VZ8%7r`jrY9 zi0GrGe1VAZXj31*XZHd{-4;OJh9S)wE`JQ2CEa*iN*>}v>YZPcw3DJM=kRpMzX#uJ zV;_HKxANv_A={zHFWUPpYD~Vn89c)kb#_}mK7ZkO8mID>7( z^<$Y<>n3dk58gltNtD*MP9_TL*aA1Qs|`pSIDdgVAN7_gc=cTe?cE%tZ3b|mw7_#HOVC(GCGMQwY$>#_v!L=Ne9DN=%<-sGJo zyADD}vWhzXdeMx+_ZDbrjE<^;riqX21MjAPe^Y+ltaA;F>Two)+0RXrGe+jRr;7OF zcMO@EBt4zIUfsg1`2CQ?Y?xMQs_%TLN0r^!ho+!9QZ6cn4I_~O3{pcx1d~8=8%}-g z8uRL3l5x_8WHZyrVB+4{>zuOb1ZLT)=kvJt5)bPxtWW_Wwk-%S_Z!)G)Detq`H90O6!|}%`p%IxZ zjp_4O?%E5*FHUKwXpvGb-IAd8U?Oe5tpt9q^6X0mjh4BkZmk~rgKaK+|Fhch=aAu0 z@O-7_T?srLnzrTlVK*M$H2PO4B>6<^W zGl+SWsX+j4g-P7(rbzIB+ix-QOY$xp&Ka>Q3rqy*7VT0vVuho%oqRPG(`W=At_hiZu+6jS&D=ZC&dO(+2PxEjsh z-TF5)RP;-4KVo#et9LJ^S{6(+@2{AwUXbzJaB&}~l?6NFShCs`m=hjipLa1gmeDMgYDgZLDBY>FI^){=zY=b%v5;DmmNFP2GE}gM5%{ z9pn@0`Y~s+xoCZWb{_zV{kVb{B|`McE?-(9*ef=o+ZdrpbQ#HY)LF(^nJ(e{)}jZ) zNICH?S|plDZV@KjEnV7wtG<{T6>?T7X6?#9JS5y= z`0*lpEYQr#{xKGqm2Lt5&kfwYEVs^rc3MXnwhp4AlWkEG3ZssuEbcx#4bzCWs>?^f z8VaE?ou`*-n+4}FZ`*Y)C2)-I4Fg--_Q;e@ z%$dijX3)=snjQ1``P-UDJHT(P$`q&6?g+7KlF_ANO-yUOaSjttCq<9-kwKqh&M{Aj zq&9_YDNpdf5Ku5QZkTZIEOJ?!tuWetug6}SeHASHy(uokaLfDxvHz4rQm*&%`70_H z&U=lk(N02?^G|IYZ7gx$b>fL%+R#WQv9BwWjjycD;Q3^?401V>(v71}oE7jltnWhP zQ=4kr^KN{srK=bJNb27}bd5=*@*}mQ-mJ3XC?2z2!xy_AY?zT#&w~LsM%BL-CA9Aj zsXp)FmU$#nG4E9V!(w>wor zo6LB!O;5l|4;-4bcJ7-Tw!_|NE2J2!&<%@HUU%6H;;>*Oi$DXS2z zEha!`Zx#}&&SWA!@SdGVC}C4(ZvZB12ukTxc+U6)W3lj7wh2A?N)j#;PCMzhpj!fH zs3;i@j97{4kj&lpKnY+^A?4?fjN86jY16Hn|6pr9mH&7q2|)VD=ImOy^yO>qkgI_j zm6h_XhQx~h1Vh1BY=Bv^Zi`7owXI&osKRA2IMtT*)s@Dl>g>-hwP%&+!ra^hzQ_l& zP#?t#&pZ2kpo{q2@JZ8$Ep}Z_GGEKx&&&f|A$?t41U9=(q?vW3^i&>(#6 z$o6!&8n1X*9hymXvOpE97{4$7{H9gqo><3b!8h7st@$8AyoOnl!ZzJa{x1Q_;r8fo zXlqAh4mWX?CB2i&GzcXI`C+>ocMkw_F=hR4J%Qy}&#+hO6SpK!!|JD$hVJx7O-dE_ zy!$pTQcOZt=cy*)l>Ml9TJAIyu9*AuN}x2sJ5L@w=oUBMF$(h9Guq7kMvHO;&c)pD zOB#9P!ZB6)6 zXtZXY9RRO@w5kX2NXlxnP!CYrCb?U@6^~wAH4JhQ9bXeQcDb7pqOLBo=FlbE)Q1QI zKP(qN=#S8U>U{BP-?1cy-8rOpv?l4TD8r{ATd{+Qf&E07$o@XT`&(vj>e7{k*;zH_ z`W#JWy9I;!6GeD-6q_VYa$O|jTVw0`)W|-tSPS!Ph}WIYVgp{J`;&T1F?TM(sNdYV zLnj|Ee;URrf9tW005~Z29Off6#Oe)65hCCV&)FO^yqU(_C)geozuyRM_HOI9UHRH1 z_x!Zt6-JZ7PhpA2GV~QteNmbD(%8KhIMbYk=bd(AOYQMX9(G@P{QibW{@Fg1QNo~|{O<5-r&&Yqhs18{$an9by3BRb z`$Aenlf9o&|6^mSV9&bzcd+smlMiFieOy5*2EfD^=qr+F*B-bKZmt&N{BJz2NZf4a zR%`gLag`(!gyy7LA_3gY+dUnGYyv<%QU@WP(pXtne8~B#%XEdWsbW7^nv3^kp5r{F zc`i05MlA5SU+Pu}sTE1(Zy8h9aZq2`YLx}o?%+RSPwd+8)Fl`pJ4*~}O&+}y^7Lk0 z0;MgNIp(}Z!hv{H1+TVtI`v(GP^vRLvKOq$_%alwkKc<^%Sx(*H=hYeY~Z6AF0+Qc;eO1Ep^*!d>!Cv1RE!naW((M{Q( z#rCG8412+n+Gc0W(5>DWXBNO)OYFXLDm#-GH@&7yAtP?fG{-Bo+Ai*JR1!Z#GitHU zgo`$Izoja3XtQ#9`e#ft|Ar5BY1%b637&}Zv)X{*YjNo#C(KIUp&1Bra`GNuXaxtL z{I(4+^+Q*ZRZ1pD?_~73r{wV_=eKOAI6(oj+3Pmg%(tQ6&3^-rq8#r~Hz6s%V8{%q zk(mIFoSaO~+n^Ma~Kj?|<$|vyDR?aCS_*`CpH}&o)GaXTEaWnPNuKi5?1Tfj* z|F~-j|bym}$hq1y!$ic9(R@lOQn0SG?V^QZ|T+j)6T0YFXs z*U8TOVb#mIjd<=h6vQ<2;pDN*1*J>yb*%_K0q(~(Uo#~?ix%1RUZu?_W1C>x;`Ir% z-bG+0#WP9;iWW+|-pmaBy1)K9MzwTV#^ZoIrK4D2t!skl9$B2{!b~XRI9ji(nyJ~d zK8TgV-K&JT)ECr4OKgK7BkS-)CxO^l`{R^VOvGB@8@k%}h}Sn6OeX6Vh0}3~^#yPR zwsu2sHeLkp$$oN-S8P8%OAAvAFe+v5lwjA@d_mSH`0~t1=}-*WGgtVPOO1i!%eFSl zsck+B#_V1;*=~?mCT5E!eETudNkWseGa{<~u{Njf1^KB_Te%vC`@Z^Eb}yDACTaAB&ZE-=pz zzhWf&v^ezLwML#|*=u`Axdpvl4-Wuk+YKMHwS17btJhzo{L#PmUN_({MDzO9_|pb~ zKSL!qZgWbul)v_pgglt(c}>co`p@tpw)hEd%!B zFA{!)LVp@;@^#2W>yoH!1D9s{`aEx!%j_w{fws;v;2v{^C&<^M?^zmGqPCviWdm4U zf#iLmUVCfKm=DH5DCQp+GT1pHmJ}mI9QA+nV-iR%7eFv!;X(o<#lFit93mo3Y0mVW z4WG<(9R*7nkiwqd{e%-R*-3&OHT4G2I{z;&(@7*Vz5X-Lp_S#~J~oM>!&EF?6ewq# zVyb(BI^nWajahQJmlRnC3*GnOC~cX(rWLTXn?w!48d#ztJ%c0a0GOzeFH6pY?T2W# z8M+8T$Zblf*oElbR+J8tLA)%A;xsCr9sw%|Qr!}1`2QVZv) zEtMmNV@2h8I^NEAu38=5`L%RO&d-*NYfzFa@qj16fn zuI4IJF`@MGqNiE$YB&dhmz2k79ogKs=>|r3G`%pf%K`u zW%ltFz+fEF^`_i7BVIb1zGE}eE3`P;*?Wm%;dg%Tz4`vao9tRLtRp5u+8lyrGfaJm z2xZ~`N8Um;)Pc@wlrHmfv3|XQvXs2Z%Cr>33G-wkfrIb(DJO9n5pYUL?XH7OH>C8@{va(EG+#+@aWMr&SZ zi4_kP_H7!u&zKfx9GOb_Z9EYd{Kw+rYW-hvAVhHDg0|v6!Q2ojUZBas-IGV3EFlx$ zv)GzJA-N^W^I2?y*=(PU|IbMLOyNA$#JX0TfD)40tr=IjE(+*amUFJn+`8`76;(mo z%Zv(J&fJr?FgIEe$ud@G7s~oS#`dv%#XM_OH$8JQlMk;M9^?6arzf$8uUUKFGSWe#8W)__ZubGMLYBr zmu$v`4QeMS8PnH0Au@a5(ew)iS;N7*T^Nq>UC`l89E{W4b-oqR`{yiY=;BKP0{D@_ zQl@u}UE%3TKEy)=`B5Ef6<7|MT{T#J>t1EKKcu)uJ!tIefVU@dh!io&@MRjxU?ul| zjU~#*sfvso;ec(~h>L%0va9X(v-sMB*#Co3HdI769ewmSnv|U(B8HwH$PbV-wUR+# zw=%HcA5L+ex)03}D7*yNXILGl?MB>4I=HbK2V@YgP{}7rKWuUH9^fmpwlchZbiKdU z*+FJDLNXyTpb|71Mcsga?&ug8qO&l|BVqkq-s99QquU9nn~5`pP9Rs%?(55n;&G@SZyj35?tLJePtVj}la zXW3%v^``VTW}dksgq)}>7^D3OwT* z4z-E%?Q)2uqwS^Z4NGdbOzCnO-8$-nZcCk1UjQ&esD-^qgHt|LVrJphFq z2FldYLUKiK6^-n!fRz&rZbM|?1vXbUsYlQk)&3!IqUQ4R(~WK*H=p_aF!Dh26-m!s z{YdMF6C1>fxY^}gOCzyMT>|%hEDKVm+GsP~zw^|m!Ye1Ti8@mmk$~p+5l{6-eikme zxFaAkiUXm#WR9#>b5l*@&84kt!#82$%`k_fTZ467wm(akVJb=OwK7b`=mnaXN8+^N zejL`!W(Ar+?()TLoqN?AFo9Sg02lh~&enjx;{Sus_rxa`G9kIE2adQx0Kt_ns0?DZ zyD)Hmw~ddWc=SBtWeN>r@;&7U$`5>IpYvy$JQ=(sB>a98ICQ|$3sPfCqKk*o%&*rT zPuH2bVn5ZQ>^I-g6{j<3d_whg!Ig2IC$SK^IEUl24<|HPU+_z`MaizHYfz{fsx)e| zSGj6Gi>Jbak7y)`y`Dxb5y#Dy^JijNMW0m&ahatDu~L~=DwJvEi%HHG_Z3gjv7wKZ zsnWhJiga4Ui?z?rEu%_bV>S4hAoX)K{bphp4d$jsipHI~H zaT*(1U%T>>=tYO|$1od;^SO>9398*Mwp*%!_TyQEeG44ZN&7UAdY?TLA@iIbi3qF( zzTVPp|M7v;y=FfA7edN}O^C1ySy@Cfn;_f9oHN8|*D-gd$A|2#)*yHLL^_ysPp;d( z)286EJwbZ?n(QyH)pm*Kfm*9=ZeR?&E5sG|kVmH@Q^C@HP$a`CMDDV4hPyT(oyd;W z>x*LFV1B-MjowNwwl`>f)~5T+n!YPtbrw|G!Et2(vg=IoDKGeXED~kd@h6^pyZ(TO zL{&NKViSv6iuOjexQGArY(cZ-0%ad^aLqsvTJ>Y#BKB8&nebrcVk7d}k>}hLQ5~fT zFjH8YgT+ih`9zK%#Hr(74JqisO4t8JH-Kd6bW%9%e0|whh~oB2D6qp)XHPdGfAkAmMcpyOOG`XP)01t$9o_ao4 zgZv#vODgi;R&(3n?4;6UbQP4E>0Ejebk?pm4!lJ0uWw}T)PG^VZI|l74~$K?#9vE# zHKZ;;=EuX*WgAsy3CfvavmsHxq`_znN?vGV2(4pX%NaWt8U%e$)d&22$F_t?ufs&W z`m?5q{;l9@&uLeziFfs4#}fctuM8~}4uA8Qb!nC!Ab`woS9zI+JrIXnZ7B;(8h@Xg zkeKS13^$B1#-*eqxREpRK^y77WZY?PbBv1$@7;q)-{!7#3>fOCoV9I0mm&-}u8&*!_>|bq<5A})J86NGX3vX4dQTKL%-K^fZ z_V*ftS#KT+KKY$-i@^L8akV#CQYIh#-;3rVHcpaI?VZ*~-ikj|UjDiB+nGL)U+9n->qh~X^hhsa0w@3lKFn`g^BJ@TZeQ>^DKLaobdZmE|y zCcBIV0JIiq&0Dv5MJn?Ach0J{b7rLp{QTInnJIx0KQ2cW_Vm6png5%RFA?9>71ebi z{+n?JK<_jsK!Wt)%Y2-zq;AY+;?lRB)>E$Xj%!B4JK`y!o!`i>{x0JG{AB#c>prI_ z`sxIQIwzk~6g>gn^5Klhxc!8&`1VI_o;ebg-BQeE=$-2~Qd^(H{YJpVu2U)A|&{Y!VmWxoH8D&@h)ejO{}-9_N-(FSMktVXvVPE9)D zuHAll&L0-{DuDb~{_9F*=&nr~LxebUHRG9EmgQ8^&YIlADc7J8m5q;-o5emeGdFuk zRMCb>fAm-C)%hasZ53-PNgWd;yPm>N{3ua-8T)j&-+6af!_YZgsPI^8UM3mAVz~SS zq%|ZM`~kZ+bJk4cDgJbd{SjGgra_5s*w+a9lZ|6$M{lq`%pI^3JBVM)Wo^ivEX#8^ zy(WdlR_rX{8GrL*&&Gcb@Y)Ig8>1ep!|5vlX&dh!d4XzahOWjVG|Q3>&>ist_jb)} z1kSMX&6A!PCsF%~W}*VqP4^ErJQA-!ZYB79c)(rc)K>psVl!By#OZ`+0B6Lp?~L7K zv;4I;(NbR(_#^U_+9To<#6Oh4-Pg>d=)<%FLeY+>$FB5#aDxc%E%DAD6fo(N3X?m* z*tVBl@O92ngqV$#pk)A9p1XV$iaG7?@r2j6^{Sbl-p#0qXeFf1lLs{?Mh)JI9psxD z(nSssS|!uR2iFfu8fDK0odNvhKjU>t#|yBt4()Hl_?c=sS6oN6V%$D)dT}Y)3Hq^z z+6-SD`V}i~nQemkeIbO!CezVAp%a92>G8`7MRHEn{o72|XW+73PRLGGrs%F4S_q5{ z`m5$XP(AfuDh2!b;O^&_F92!2ql21w#5XtRZB{PHYzRj2OZ1m=)%UP?kFoz6ov|~a z*l&Z0p;@jR8zE_D&x_wFc?yb*^?l4FbljS<1ua9Bk_|6xf*K4p-EpHg=Qt1pV?aq7iCoXY7{S>Y=yw7r^@W^+Bjld!hZ<$PB z`b6Te%afr8FtI*tTAni|FXMJfX9}z3?{IfNCUp0;ZWQ5dWxmY(RWVZ0%iE0G>AE2i zj3&G-@k_r;Vt44u`H&7i5IO#D?FQ!c>4V6lc(#sR5L)~K|7W-)8D)dEpArWk$Y?0r1mIO2f>El zPl>Z9rxZb~TlUGEai+AD#H-(2so4%C6D?3@$45cSO}Y9^0D!K0q`(Dt&$3XrdQkke z0@Cjppr`_pkrK+u`>`|_Dq;U$N)wXD0}`7@G9!;8ijodt92_4RyLK7k{sW9LFr%*X z6Jv#9LgW-Dru<`RWPX5K7hs&Te^sFvLyGnSxTfwh-7vFv7x07F`vl%YRXJ`iChtwT zaXVOb*`h*w#chc5hM6#kgcpVkjKyWHpLeww1gaZ~#Dip5sg7u01t=d2vI7&uc?NT! zv%(pDi@!ZnyUN|6z*q$Sacbn7EM8r&syZu($Nj%imz9gx9{#E_S2QFMLq)>aPxeyU zn52wEQjVCTFkIbBtS*W&_aOyG)q3N>FFmi1CG)Ac8}K#q>5%!-B(k-ZOOe06M9qcO zuk?yb1%+C>2sfWtPLv3Pqs@{7uJD;_oGvugQ+k?dd96{=UG!NZ_r129>@U6=Z)88q zer9yD$Eoj0F+eIMQBhrE=oe8*py)*7|0n4<-I|E3cAs3zjqk;STgn1WaB zoIMQp{H^6(93%7p&o57isE^Pz{`7x-xd)xAsr2+^jedj^{dmR2Q(oVZUq%8USAgJL zyXM?>AVdTRo>4kjRs=#+fZ&b6GRq6YhR5Qee!AHP>iWwz(&q&2#4yc3h$|36076VX zfp-wU-kMmv6!&@D{D$b>^@U43FDcEvE6q}m`=&>iq99Qmcq##Z1(&T{?*jY_*S%in z;VNUG;H-T%<8`Yiyso+dnTC8o0kaAjm^4#r)2?z`7kSicHA)AZ-4xvVH?KY;lI}c3_)*fR&_Dn0x0ipkNmA?`U`6w_^-UEjO-q|E60+ee& z#)K==QHC){-DVgpr~NJ3KG4xnREiUm4TUql1uW5??u0Mzu$Wo>4RZ}YjnlG`HMabw_W#5NsQHJ3FadCdmNlc2;-aCBb+w(G}q#=L8xa)==t z(GaV*7sr$&UYAm(!oXS)FQm55LV`abWU!lUK$33Ty&i@ki-0AK_E}YcU!0z>N%|MR zii1Qs*#R;bc@*$$`oJP*x03>`Puz36X?o;+j)?DO1iU}3Y!0KvcSrv##-sxW$*Z&n z9IND1RX=~-*4^dS-4&;9ro<*)lwGU#&swEy1V2b&pSS4Js3elzdKI$N< zuE!y9JFuT78ArW^?KnitA6EU`9i0hGXcz4%`Zm$vAOaVM-lXi_KYUA?vg$H%ML(7} zn`BH-(yxYc^8~5U>}2Gqa2y!TbhQYnJUCSox3I+Mv?r0{{rx%n;HS9k(4i-+xy z8m8;Q`>OYqafxMj7^NqaNp?08p~Z9dSQNNe{SO^p>vkSm5(IL%bTa*mrAw{Tt`F+C><*eGXMh+(WbDDl&<`!(KR<&BSMA#jV&V@Ty+mwZNnp zuQzu!SH65sDXFQE;9|O#;<`L6JV(5&dBpf)XxI>J1#_DQ2p=9@ zzua!jaq%}Y1Prt0XaxTJ9nU{4;3NURh`NG-)Q21e+9Npu5IhH;sh8WMdx-H?dy5!8 zS5#A+htZ>4FU*rtKl|T1F$XVeFQBN-;k}@$0XIeC` zHB1?!#8rN9EHEKIVlZ#n#bwblpJnNunW30vi>OpvpneENs?>FM)2M`N8yJRxKyx8LHeNaZp+D0l^Qu(?+Une1 z^fr=Z2={qH=3`k%!fUNDtbvn?e3b93rhDR_>^LSy^(A?Zl$0GEpF6Q@GwsZATevvZ zG&`#yP%7@MQC&@~c}p?Q0mPoVn|kVg#U7hyAP8RL*bn)O(<0XJ80xd_v2?$w;m-=o z+Q}PZUKmJF?!5El0E*}AWlvX6Ctp%Z20=2)|sfJ2E5 z_Gh#t_5CotTSiq+tkbVw$Y>qTC;gD{rgm$(<%--+&DwAkvs*-4MLe4%SYR7`lNNpU z3WBz8F%QOxY}#YeAU7JN!-dnu6D@+yW!?8(jh{&zy8Lj#?sKM}R%SHptgK2+TYPHt zGycZp`I|%*WXlClD?%4MAr(Yc!<=9DM@$DR6a1SQ%!V_iz24(w3*~!q>2CI@a*l6JN`B{R`Khlz$9;zk+L)S=`w*)CHR} ztjYCr{*eB`4SxN?uKi5|^4D=o; zV#woelIkLTj=qV&MREus{=9wo_Cto?vb|7Lw7@svZBdgF#o01iOSNL{FGgPd!1g)g zp)!c6t~bsuzU_5Czado7#PCDIgv19=0XLv6p8({D9*r=l1>p@4aflG3K`;9XmA8}n z5u9wkOjd*|np9V_s_SSCBVW9423Sn20N7r1>g7&=MD)$xBu*4~&h2;V_(k)(M|16| z#KUj~71h=&A2AA3^qHS1nx4r&du%G>yVgftW`( z;*GMr*)CgIUAdJ5#AH7*FJWH&@6m~|K0XJdXBf7|viT;*uV`0K5l{pDE+(QcU#>@i zOt=}s=8=F2kB9D5CWYhCN_c z^CE9_ji}_eNVt8$;N*88zmhH zd!D7LOCHHDsJH4vQMBtAQ@MZeeKE5}=X{s=r3 zY#($>!0pg#XGy59Ki+GO(4^tBzq8}QHO?lmg}Q^eC)^H0p=c%Ytgj)vMCAt902=X} z>@``l2KgHyVGe`w5yj-I7(CflgQNrIsKJnkjT!$jE%6F8FG7xc7kCT36{akCbJ3HJ zVE;n1MaNnw?fzTe^1*~_^V9=lgvKC2k>zXvVqIf6Dimh4kQ7z84;1?xS;Hnkk%q8e77O6-)L!BB?@3s+uR$tp%POI9CLeBzuAN$l}Ug;RGUb zq9&zGBGv2mW6qm4vZ(I($*F!I*dbr*oVP_`$}oYl*t&PIPGZ$9?%SUwCYt>LK2( zz1#*hSK8DytadNRT@{aj8+2^32o(MtEjjoH`=y~b7{9n|GDw@;9=z0Zl?gS*;(-G` zQS9o0c&K=^cy;yWC`f=N_&kao1S4Bo6nRN{ZSUG4_$(2h2lqnSB+dvx1ZJ<=rg&D(pH`rH?QZ=b3(*%>ZJw=2bDQ-n{@jsM?A5ZToh->9LxGj zqH$y`*sEyQQbej6`(593R+{*HrRzVI+ZXk^-Gho!`-Mgr6GEgA8HpknrW+P%sVY66 z$Bc0{aopC)FiW0H2gKk!$Lk0ITO8O&-po^(hfL*B(=>I;e%V`&QX!40=i^=c@gE!& zUaLRO=n{ly<7gkv@^a51bjRi>z_%&l51I4JYTM9>XD;3)(s_YoCpeFQ;1lbOYe)qE zV@-wwo{{+K9)(5`mt^lDOLB`ldKjZsYgl>%Bxh2slO)fHasN}v;$dml5#R7kXiK_n zxTqjy*ywjnq1$@Ubi!g;_A`^4wn6L6m6R*PQEOlpAH9~Z;;4DSN|6HoZxRMxT>_bw z7gJ>qR=1Q&L3KR&4-epxdi3I7OY|Vbf7)gb6tpI{_j#G*dD7NqG(sBV`$#l|CHV-%Q;#K+pW4FB5&&@ zg?{s#5L(`2LG0hCm{RZGlk{JrZ|4Z)IC-y1zycH>4|)*Jx;EDmo_T|_a*AFP=Jc9R zl?NIO2w5RbuI)rlI;zh{o-MxvE9kZoOWW>a>L*>b7A1U)w zt;h^dy9P|%X!f@Pq(G%wt~choN+*9vn|oOrrFFEP^}s|N?c!fFYWD-GR9b`L&9ImN zUguLg;wVfPxgio{eRU-C)8K18+XQX>(G~7n?3BS#X@@Ut&Cib+EnN|e93jVgRmbX% ziC=1Te=n%0I3>qM70gpSlP-O38{6XLbbsenq{wDb37Hzy_cM&IF(p*M@6YN&%GtGT zj+Kp`^w=yI?zQ~#PnQ7@Lg9)8Gm5DqmbfX%(ps6eV(@V-v9;g~C-qhJw_YHk3 zv*8Ij8Xu4Q<)Pr&ohpEPyAD$3oP+cHmOy2dIU?!>g_n2V#q0JhlPmV7W$iI(OEqk)N$!NEA7tEH}TFkzL@^8ec-BPsU3J;Fi)|JwuQ z0okdTE^+Ve|H<(?TKww44iO`(@zyZvUNbm##DFc^7t){1;b5dk0K4310Mg?th@AmV@{Xu z`81hjzKK!3Yv833CFM%^-b*xUz0rX-!KxwjL^r&m%KXmbs>uTvue(DZT+PNdl7YKrMWjl&D|l6ugZeSm#V%pt4u5li@F?5dmoX!Pf3J-+H9aXI3J%B5y1 zDpnYA#Kh7Z?>~@yGv&3l?#HvF3?D^~KzC2fi^+@7b83h~!m6C(B|h~D_}7k19NLAD zLm3#1H6pAY6*eNd$-bKNKSiZm5K_O=6f|g3LKXh!e33ml=ivj9QjU5x24!c8tdMUx z&V!OJOrPi{&slDT4QhuyLWVyA0GWmN)vYxMw@v78{X^6`LQ#2&<*+;*+m(0 zWkL3j^7VXRh;ZdMwGMTl?VBtozi1N?`O34EPAqSd(={hxhZS=5^xzxh-wgrXnob@+ zY>XDeBu!G>?U+mbCPhnByU87}I_C zPq^&I=$WQWo`Im)eGJyUwYkTGz-T?5oaPca*=qSaL!(lW_Kj>mP5h;4gR~P*kH0l| z%X{x>B72PzDTT!A7S&OV9Z+{b|y`ULDF5qZ$l3 ztaUhHRPdOhAL`YHCP;}L;DOvHXj6gC;7BR0)HaF$-BQH~A4m-lgbn+YOn^cupi@iE zzZ1pm$^3&@C_FQ>#J}+`GBXO;wGMLuHRPrF=#d|G$37VFY}8NWs=vRQ4dLz^EXY9X zxsdL{Hl5i;(DsepS-g*)IJOdb!+N3rJPQe>fLlPxC6%F7Ag5@a0^?iQ%(%L{4;dD2 zzFc)ZBP^v78BU;$-k95PJjZvh@`eFEL0ON}S|vu;JvQa(9mhBhg;`hidYEkaSInTA7ZdxzzA$>3WPVe!D3kB)!m!2B2Y>9ZmD|>Vw^RW+a1lZmnL` zr#UVv&BZ6jkHyb@F(*W1?5xowhW3TxR1yFY8msgr4PKI1)Ocyv2UgvK7sZvU&~%c} z+8(}Cu2F!e5@L9|E(Kpn&CO$0yc$Xwm=%f(q6X#uta0V3l>%xYc{#H+r-#K@z9Nb{ z(l-qv?`OdoXX6T=!W!3u(Ui|!^C0Ra0A5N#GzU4c1(CbsBhr!pMU5MQEDb)e+b}J? z$*!NvI?Ji95euXgeo3mT7oB5HuIs^cbZtpFSS#|j!t0Y`F=&NQ)*qfD12XIfAh9r z89_w-y|lSpo0DsQ9l-n4Mh@b0Ta<5-@SIv9tJq$@RHjCN4>4FU!YycJ8K3%gWaB2o zN5GTIUCX10N3SLYHWCapSAd5UJn#pV-A5$}17uDNb}X$#3@tJPl1_PE!Ctjjae~k3 z_o}-Vx__Hiyc+1I+n$$s&L*U?=YDWDdlfG{aGnSTCf9h@a_y*RJk#Ew*sF%mco`jv z`n*6*z%^HNCNIEoH0LPpsG@(W*Sys4ciZakhO5)g0>1Fj)ix65K-MLed(aqB4TO;K zKc^C|6$1xD&?3>R8R)Z9=e?}Jz~czB@;{GD9uWy6ks`qAOPpuUWD^(-N!S?Y%H-v- zXFz#TJVZo))=mp4Q&nv%6A8*XH_4YEq}v{*`{`Dov$}~49CED%?lx+NK0tZK`KQW~+7BkK2C9Sn*sCytAfS@uCSGFP zd|8It(UgPfniuK;q)$qwWW8?n2b^iLNxz$%bMK7H;u)wbc|VU-?L^H*H2ksa+QdXn z*PZFM&4a`!Za=$Kt(RHt(u!=q1dLja=%akYSdjoeDf8;xXmm0vk4l$de&xw~auY?h zzfLZf7n{!LABE0+-Z zd456yW>{Sv5h-)Yx4hxkUrzwRg^JH~Eti$Lb2p2UoIqNOi-#zcQw>dI=3|A`8he_~@Tphst>vK-%(c0(n4 z(6_qUL@Y<=*?;FHsK7-SjGQTwDU|2H0}Gg_(vBJ;dKo6C*i92t03{Ne^7Dtf0?-%_ zeeOQ_Z>w^e74r|O)}a}!gJc873?~`WvoGxCTba9t&gu_xQtcC|xi0!iJI^&*Z46W%b%V+YPo}OU}{Utq)KWTijX1^rjH{R3ScT+!fq33_m6d4H`0GjN# zO~LURw@>Do9TS91%Q!pXP0Qr5&ngPiO18=O=KgZsj53`3m5sW(HRfT-&_hGc#gVbV zm`E=I5UL7}5DYWquDPYjp;xmCsj72o(1D1rlS%KVILfv&m47ieWOy{$`XjJrjbt`k zUk@6*>UZB;S=8vz0MDVuxkHITuSG`N@4jBjR94$$uO1@z+{c5pl92nKoWJU=gc0C}53Z+PKUOv1pJU-VuQo>SCkyJpf3E!g#tqOP9 z*RU;QDOYM!i9MQY`kCxX!w3zj)30Bx5ZFBg%#l?~zoMIg$cx>8=r>3|BVWdS?bqzi z)k{+R1O=kDwwAKQzJZ7%%LT`GWP3ZJszOK0N?!}xBk|ZzD+#<5y%cRj{H}?LHZ4*D zA@RXbQ-eoyn!p2bv|w7(;#{Q=QjRdT`nOs$S^0^>txNtowgzW9lfZX~rX(AiKs4xp zhf<2fE6y8;r?NEun&=Ta!HXJ6RUu#l!X5;&7bqorkORyplguPH_^CntHiK|2^6%$|t3gTROcK|_CKD_E#o#*;LFx9Qe>l)NBlJve zG-;Tf_q?1UH>U0UaeL&Y3XfKAZjmKP5PEeJ0vGi6$K1fz8ej61v1x>z^}H8$?y@K>J8-C zv#WzC!-FIp5K@kYZQ9Fp;gT|CJjUHO3Vp_edJv#R)uMx1exh->>VQf=)8!G$uH7lB zN{({Yc|(YUEW3^x)>&@;75$Qg(23&8%_6h5x9y#-DfECys*vsIJKEhUXqEOQ55`47 z)zpg*15TSPDs$Bq$kstoF5m}MoC67bioV^`q++NT-Q-}yAhW5fM~}fQ`apm7{FTXX z`{^tF%l*r4n$MKQ>!lh4{VM&h@C)=W*MB2 ztmuCec4s$6A63gMyKxTm3w;FkwbFr0Mj+n&Wn2{FVmw8_R|9ZxLp)uep;3&JLE5Eb zBN+#+B1#vP<`?`&@pk9^O?Xqa-E|6Br1T{XjoZZ?GS+KKeTpa+fPX1XksbvqhrJwI zA8-Nri$bnnuc^#)Ldmh6v_ilRAgB`OQd9^j3;oiQA*gz~U;vAHzT~E)qKI0;^rzvV z7VQ*7-3SaNn3z9odM92-3&7Euih{&N{p*@4_*oQ5^`Q5g^=`?=$J zgOK6|FRi0kb?J296NE}^IZUqzdzBw8u#{1zuTbfy0Fy4_vudXpV0yM-A(dFHDS;t& zH3H>5fY8mBuWXSIRuti>oMp}%Ed=+mAdLlWW>WqYPHHDud{Ts(%eiWC*gm}i&|8K2 z4mohA@tT~Ze2ORVa;3#I#6^d4TO^5SphswM2CSra8M;)eN%uA0soAdtY3h#LOVU%& zHj@jL6V#N#ScH;$^+0MUKe=1u$_V#9`Qp+-B?Uv-|70b>(xG!yi5wQYByL&z;5V)w zfIu}zG#xJnZ5pT7(9s)MwwR4937iCr7(XrI?|ns=;S1o@N5(H#{T^0mF4D~Er%CDn zTX>_u|E&w?qmLa;0wsDQYn#}H2Voh~Q<>Fa$XVW&=E;ZmTh(tzX#-9oc_uiO(;?PcEXBs$Gdv+fjzba$r$G+KaRJG_lekT~A{RALGFwRCFux88iNJ=PM?z0LJY`SM-E(mCA9!`Ua&8Z@gckUmyvXzZCw^M zP*>{&Kg9{G(i(G{pHZV!zG|$HSF>!eQ(1`-3A`1bWA2Bn5&Sa>=1fe)PaPI*VC_is z0q->F;&h>r@P+b2FOfE5(n+^6&tG{Trcd9JNI_cul0laPOK{MaqwhZ|jL?YJN`?;U zp7D`ejMrx0_El~&yXw3#`)7<_;ao(q*W`aP0tNyU!$hFX*j-~U^&~!`bF{$mM z;*P&k3eu0HmJEQ~J5s_QK3*>aZ-gtm0XJj{fVQ%J33tLI4~OIQ^Q|)e8=|S2agFt= z|Gnf$;WBeTz<$%7*f-}JmInL0AVc)`;kXQMGu4m#M?ZC8pu0z`ocje@?>K>?!lU{~ z_vF@sn;kPVm^(cOKG#kX!YStVhM+v5%$WO@TKyKsdtyH?9?duWJLVs9d?N|(mr+Fc z5zczq9KdzxyLn&1uik*!D@9=Z!_UZvK7@_0Z7}f82BjTx1N3h%PiOzxKPMIHdisgF zW5I z(dsl`yl32qjiX@@?=8*>{^O!y8Dw@L;}>%U5nP`S)0Gy)jr^ASLeWRXAKIkWk}0QR zjx)Jb4||?kg=;d|X6jP|_YwHZR}1t|obHBgg|F>&bJ(htzA> z>Y{vLCei%9f^{50j2e<#p?K)kO4KXzTCMstY_ciLAaR{EZbMxr9;N^kKTCltsk1+q3KI6cpVcH2~wu{G=02(1iAC4bY zM9_S72TtdO(_QbX#tss({fFnUzlhit6Z^Evg1L9@kKWy?%Zg-`>fZ_NP>Lb`&hDB&G50_>=w#-uFlc_zUu{YNqCy~ngs4sl z_e%lJXl=V3XQ_Y_lw;rN7cZaK9R++Xx@p+N`z>0KQ~Uv!%9|^8E~mnindVJ1E?1D_ zy*So-`asIepP%nAdhKZWj@h%<96%rG%;x7mFg&7X5R(HgT>E9aIj(l?*$I!gLsG=7 z-Aw#J@AB0TXJRe}9~TwLaCwmk`C;>qmCOn~XvXQp31vzW(vp_Tn$N#LuI&>|=V(9k zthjmMt@D9y$F>+II#6aeaQbV_u1(ek;bSa2e~+e)q#dfu8FVvjY`M^Yl^_VIiPja_ zBV8*U?x)>^3%R5yo-Q+taRaWM+MOBTk%R4)2NQEPsq9QZrX=xjnu4q!WY)Dgf+XhS z)!4jI=Tf_FqS_bMFV=2 z#M3YYQHzb1Ny;Gr}*|_+Mvt&Vq{^5S;^If+NCu&RnKdl3cTp7jjcg;Kd_$zUM1Yv}d>a-+MHm zQRi+rv^{@HT%%RMj<6hiAphY}N_TE3q*$B88+|3L%+qphRu^}Wbf$mF4am*gpLM8r z^*;R@NEhnt*vHW3JUzZg zzcpMH@hzdp-R4;hVWyJr0WIC_p!Y9`<(_YyO1-DTcCdFx<9$Uh6FlRhLc`G>cfjBa z1B&C5(C1gHMkR>A7nNeU&4Q>g>Us|FwQm<-fvHi5HRq_mlPvt;DrBL}sta4YzGhT*sxcuq1>#qfnhcHm1IGUlf+ zDZ_dxX{^2jcU?hKAV^){m_Wu-_GQWTqtN?HMK*}z!xXXTCWRf}CiLzG3K74=x*1HO zykGUM;%7bJ3XvwxU3j%0$#qYVb*Uc+5khcHeoAzdh%A8q@Nzr*)HQw@*?3bXM*iqi z4Mv>0Z2EY4?j-uLuYMA@G+m_$ifpi+P1^bTZhP>*hW>*x;4XklHSiM90G&X`92pp* zO(f)^2@_a>#PrDb3W@8Z%Htd64Q(*z%j=@P62QUTi=%>Zfxz|Hjft%8^r95-;y?DJ z>VwWafA@J{cOFHMcNs6bN@HjB-+wN?)^*2(tt*2t3v zK1NgZJ^T{iNuGM1DwFF=C-|)K=XkhII;`Zxn8aYkV9HuzQQZC-yTuNMT=tnnY%7 z#IVRF`cKE0w?3AYcQMwVkJvobbU0>a*yrIvyk!-FOk8;{8Q#qPXlSOU7c)70OpsbNi4+k-fKB>6sLAFa zQk#!k#h$9e5w=!VJ2Z984irXG0;i^5IA+vC!%h*+zy;v5SJ3W*w&zK&Ho=T$+H zZd%-Jc@mE^N{7|B^ja3cRwHM1;b3{rPpVdknQqpOyRs?xZsK7AObe<40!m8zYwQnxtHrOcrrT1Y7 zCckK>o}Hl&goE#ZDBl6W=U-(}+TJl5Sfh$7*&~wHnU;evq3h#gyIO(65lvg;>2JKUgl`L(e}U0i zOyI|?JlKzMfwW1*v)De{EcgqcoRGs6K&6xM0Q$_o%-h?yWYe?><5q`@P6GfLSExyD z-~g}3E~c1`wBv!B+0%As2?U{9e2 zDl{BUGhgSOhO`0Riu@PxFGr!GbR9GXnX2OZB`el>*v<=OZ8}*O=XU|YufTha`Nj*Rk-y=006l&@2l9TzAL8O zWoXzg=mF`TA9O;&uQluOI@DwhtOR-|-#!Nk3yC)@5ZB)EXIbpPFG|RDaVG!3PSIc< zPQ8R*Q9QqUPV-65AH%HbG_FZ(CWlR&L%Wc=c{L(>>>3Hyp(=|xk-(3b@}p;y)Uk?< zvVk@r{IJW8-CE5D(he|ZOJGAgag&!-TDOq1wRo-OMw^WE2R+ts&nL&t*7!XyW_S1T zh%T<|IL7=lO~rI9;jYs&3&+RyUDouZ=$aD~H7$b<^yw%6?Ywd73fuQ&?)K|!`MA8f zyl`vSD$hxa1FCiU`~5gk2IBW9O7y51^I4n@P&xK0)G`hO(ET2XNz60S1|fa00Dl3n zX59qIUK61E=P_`LX=d6O+cxrKu%E?oKL@Iv_~ zbO&Rb-?6`l001Gt_|k9nF$fcivFViM=ABf1W)#9Bhz<> z$EO?J2s(Z-C6D=F3xJ^Y{Dl5`_(`UA=*D zAq{BlT4mcIO4l-^|F6tH6%WAIVnfZ8Z`Mtr6198J>^^t4-_S0Gy40WLRh8n6Os+@g zs6{*5No=GWAsrhv0kA(VdJ)*(UB*uv7+rY7>6;UF%i=>W1Wm*L<;ShBZl&AidKT)s z`71Vl5j*sc%9lK^u-*=1QWI{f-eugL-}JomHv==eX@ z=YN#{3Nr;Qss-67FCk^k6}qXc_xGkbEcaR0PXjzCqy1;UEF53fUDPDd9wXzvKP$)+I14)#sqO7Hgf zuidUTr+13K*!TbU_?ET?kEOne-+4~F8e}z9;GclNaZ)35py&N8)D*!@rPl8JGliI( z^$>30`FnOi7MrOkD~BVaniM|g`d8S@}yBA_gKXyAUA+4N#k*f<3BpRe8r~w2| z@)dyxPKW|UfYB@;%=>p(z5&92KhxwWLSi6c5O{zXeKs=RlqHAFNj$hqMx*1v*C|3+ zz6YOqFsj$&7I}2f|2c7u;A_Q8zSJ81j08De!}QF-Ft?Q~$Cz9%}Hb%}q47N~=wPA98*z5+fId=l;SxdzL^6 z;iFpuuM|XMB%@pUV{7FR&G(~7>`w#1;5SiZ$Oo%4gXisfFE?rt)fqv)Z8|X^> zzQUVRRQTfI5`3tRx1w;MpV(z5Zx)Cs%98ia0e|3AU83m7i9G*K$%kVzCVAwre9^CX zVh<&EWaqPZfJ~l0a`j6(-=&Oac}+03(RTRtEs{d{;+`vyI1lXV)JYy(-fh-_h-bsw z3Hc9l&^l=9^Mxlin52UM@I4gAu?jWw^q>H*9{yIP;Z64QBHh_MYl!0-cm}+5qllT8 zk$5R}?Ce0Bt19@b%p;DAA`DdMrS%5S)76x952bmvr)^2^{YPa z!JiL3VIOFw40CGL7N~PPw2W2Ie_eZR;A$BTg*f#O^eQpSY=g;tZ^V=b?p%(jI{)(c z_Q|oDbgkj;KwPO%FCNI@W>CX>6gS2U9rx z!3Wdm)cnCZeRXRGD;Z4zfV>rlMGgG(a`YlKE=d$iKtXTUFdqC2hi$Gshx8A4liHRE zas=qn{iqzrBY|OY-T3I_^+P#@6P&`%(Aa_Fj4_i|WeRoC-+y50h{TbIqY+ru1UByC zy9(T>9$6xalQzVExkIc4)EVzokz8pquSJUy^VTR!sEP`7mARYcS1E2300*6_Z%?KOe28PdB^^0w6Lb5 z%ds9pKHpODqtVChgQbX?8#=&nsNAk>Sg=JW^F8x48YgA19uW{bE_6~MA<7Q;-o*JY zkl6CVPb@-CT^o=JH84s2DfCV3<1<0N#;W*mHGh^>z9=P>rII0cd|lh5;fOPAzeoczZjFI+*Gv|cb=%UYL5yf*NQi` zTn#R=VF(4T21f&Sy2Mzf2^pBw}0sW zSkb6B#(3eg3?f>22B7|D%&v&Qc?b4_+%MI9*R*sPPtl$es{)D;^T@X%GcxC0{rreK z0Do&30|smnLo^T}RErl-Tm?7hTriEJ*3thq&kNK>D2-*sDOc`(xG(+TcB=ASX-uX) z?$(;hQ}*xrp%hZ(;NlUHaUINXM$2p{mbLq#sHn;~&uAWN(OnjkM@!p1`f4Gq-aPlb zKMPvBsVgy?lzpGfFjsvvFG>j#I~gc?@3IDW@#62f9=0`r-y6atr|m<+ne#|o~7>d>%CVLTO!i=s1-8A(VZa%5~Y%c3wPlv3ysMr z7Hdwn?M&LQU=OTY{T3NilU3|+C0of&v@R{#(_{Lx)IMrK^>gzU=L=i>vhK?VFOaEi zdp3B3EaqYLf*c0}-!QoHevZ38*j*~UC1#<`AXxn~L5OLa45sO7725cjVG>^4P{y$o z2|ZUS!9Ed71SPBYe)SC+ybIaMHsoMgwr-7`QT2ERJh{9c-w)?U_lFjVq(fyJ zO|?GO&col;2X)2#x)Z&)s5`*t3TDH*O%Pg;=R2($40p(TUcXq>rY4syZ+>2vFRf#~ZX_SDi-5|lyy7c)&!+6DKA-^xK|bfz=KmPtr`rB73E%Djk7+7jJ7At)dtj?G@Q6wDP;$S z=YNw?TuauXtU8A;+SCxac4u@S-)ef6?b9P=A!$}011e|mKQ4@{8(kR(hIP-A>eo|g z3Jy|}Nb{NZr~qR5Vf?;Om3ZH8<(o4{GBVA_~MOt>YaJlZs1=9iIla_#pz?_1(eXh#vSqR^%u-iGv+0C z*3pJYxFyf4hxbyD^XcD33eIWOMd7IVj{=+}t8@l-EmH9a9V5B~QV`606k1haFJjgM3}>FIC_SPhemBf<#}5Kp987*@ni zExH&UEw__kA2sjtc)7A4#JMZ_g3&1!V5tt50ROBabeA2}!!nOcg-V#cLEw+dPn8XbfsLxos8UgFF~Yq z`9EkG_h?I4|IM@wN#=DtM#~T;9hsc*nC5*oL-xRu`1^NYpvyqrFN|;6dYsCLOAw+} zxVjds-b6JZvXt6#ZBz-U6?R&i%(9IYkw|>Pm2duPHKDLk#J05-hQni2 zpQhH04hWrf{gySQWMa;vp)>xpB7Cv3QAZSCo0klDWdYqsg`Sy>J?YX<_ceE*MytKN zK5ko#sTsLY6LoI<{*h7mz-{%1pQTLCtA=w%wk$h{=?F&`$0PblVUS0`O0=-8!bt7I z-{ZF6bE+~**tuc%Zj@h$jlSWSfS*cwlG5E5S>3jwG_>4V{zVaGlBn$A=MUO^%xAD- zaZEP_(;xJH$T3i?NBo+z^W1DO+7u@-DAiiMWIx`H&c0(;{mS4#MP{54V5_#N={yq( zxjTE~t~ep^!tF}@5ddx}wbV}PrbEO?UXz+^3YsDTd>VIc)rpu% z0M&!tLT)GsJ`G+vI}o~7-3mYcYW8~u+!_eo=tQ+5l8EWSzgS+a$V0|BUp;KkDJ{h@ zBaCIH>YtT&0oDM$mO;K7mknW!6fm(RH&Pe|kn)}P4VFs+*a77q13Ak780*1nogjP2 zfMsz=*E)gkNBdrC@}d9_U`MPQuqEfO)_lqbihN`i3K4!ks`b@RbM^|K?GIgt_LRT^G6^BOYi)KbmV+(x?#S?O~7j z@jPjO5eGG~f#Lxr)zvU5&}jDGlU;#%*>k`c{Z-F!ayJ83%Q1B{mNTaNwV18DtiNe zet8LgxcXcrKPu@U267xD>4Ug?N%1^sbThm&F)(kfsJ=#;_528DAJ_(NUYz>BYEy^o}W zSIE+EFYOSe6XH#+b-bmgUF1{#a3YjrDmlTJ9DS?fth1|2?tzrg{2A{T#h!Gx?GR{lG;jt{7}I<(9WTdoIBjlvnzzk-{pQ%YfBNYJc+5{>ti#Yn*CtDm43x0{DcqxAo0c z&h1ayjW+AZQevhH5H*n60cB^dlxB#iEL~g?lg%ib1Xq09sB;b``9emHuJ}^Y1;08S zBA+5(Wl08TjF_&(GohLnIyWlkqOzcTpH@_*Tg1ql$4uj`;}p1^8=w38#le-lwO?*A z!1Nd>uM4oIJ=B+%E}0KZWLD)0hwDKZCfSejyUvR-;)J@nBO{&y9?U;xYK%BVMx2~t zmm=gf1Si55aUbF`#`0Du2bvDVU09A&Y5${w| z`fl*Yh9p^cN%oDG|tva?YYIi?!#G*c)YzG##nl`?Dv%`dTa$q$5VocdbL7FzAc^>ZW7o~O;V<= z8;7oT)l%D>&Y_ZzExn`IWF>aTE?_uvk8{j$P_yViACHD?dVrxm%W{A6iEJCZ=jx{` zijY_yV^KjJq7ay3l?7AO}XNA^H)vI2>Quc8E9=B z6@3Daf9LQnV|C%d(y~qxLVoGqjR5mgFK29_7AL%Ck|R#-WbShN;jPGYB!Xn?$YQ=kR3I_xS>qM;JL}g~kZAtlBcG}{% z!t5OJpAB5!77fvZPW*kCck@wF*GnGM3vIFyd)S2TFr~fr^NjT%O)J!%`nFJNJ@S2Z zZ_$m!pas9)kI2z?7umw?gGM?M`ZOIye&(=B{qx0_#zdz-8*>Go$#%|j#tm0~K7HQv z_gNBfiCl`WUfA$(&eYs$Mp~>Qs(DS`HB$zXRE1*Fi%(?F4oAowtj*EG5OK$C4i8kAf4 z7`qAg;7q9kx_rtvp2?mm@Psg5 z;agdFWhJly3}K_$+Of3$Ve^CZcVP(tN_~i|m$QR37~2Upd;~a1ZAeH1@MoQuV(!Qb zE1{LF)KWcEyxvI?oZOy&jbu@w-Zo(=s%E`l7bsRW;@lm-cR7efJlVJxqR%TkR%@N4 zscWl&SQPk3k^g}BI8^uzyD@{e`8)kT~OP8BGwM6g8n82d}-n;$2}L!*XVIH$rYOE;Lj(@x9vqKbwLXeq7OdG z!3(xS>@S?`F-f`!J}gg9$8`IkrzP_2}K#<*icEeH;^qqdk+b z=#*naJIVugXMTfTQ72Q}UG9$-r92>q612LvR*xS2gG;~s{uq$_F895(^dF%Zybt!q z!N1kwV`9ODD&%SG{|G(pQls zvpVMOE@gC9+iGKb>A4Qdvlj!iIFrnr87i?C0x?#=8D9H5^=Y^iamrZ@#~!7bU7q^n zUR+iN`23bLWrUoT_g#3wK6ZDHyQkslL~f;75tH#6M3Ou0*d|V}g2;6I{k?B_ECcYk z>%wfZB?a2t07#}JK{V)3OJ$pF4JRMWg6Iz#Y%~y&_=>=#ciV;s-eoo}mM^B9L=PK? zb*rFE9rrQJ_)uUh|9|_+CuT?CsmX7W#@-a>m(~kR9q;b8XKLxarK*YzZ$-U!9GHkW zF;Slup$%FW&G(QNYRH%1nfMZRh{h1oA~L^1rNl1uaF4cZk6D6S_^oY8-z?jdd-U&)q$+#A-T8M@VXT{icFCWx(U%N z96>Vdj?$osi)ki^n(L!*VwAZTFoqw>OHljU?9ofm0@R;f-9nMyHL&i$Z_OTQ*NU3R0OIkNhDl zV&0|c0G_l?nMk*&ecd^mCbx~Rm@Ln+ipp`P(S)x#9-?`-;=Hel2MAAJ+pg@wn03_- zo^9PhZiS^*^yTQ^2b?)G>i;;~O7=`BG9=U(z3zTBwe;6J^NWz)kc-ncR#A|#OT5nN z-gCcn@(e9>$KTFd;ol6?3p0X$oo^LAWO%d{PO(ua(#E$6q96j&@ye~jA_CtzQ@PyT zNoH6kzv-!@{tf+r??EFPNmC13J^~<-7#H%^R!v1J$J9-#N;tn~W!_k&i{(fgo2aNK zMGjV+|1a;s_vh`<-S<+xn=x@j$s1n#NkIC|_|iW&9Wu}ok(-x4tAMY!|LFxdndC`N zs~r+~Xc`Zen24~HrLA4TW=PUZi{@iRF%=Q#G}n3*}*$2`Y8 zI7X6W?;YY;CC+io4mz0;QBnG&Qpw(1WH#(kDzc@J_4WM+?(6>HzOMWAe!ZX1$Kyt# zrr;Wk#3_QJOm4yW&@CM-sw3ClM7@UfkbdT9V6IPUxN6Wx<6usEQ{>nNg{l1u0Y@GG z(VllMe0qQJgW-*$@HV`csEY}>ZFQ^WQ{}}J+qwZN@J&k}q$6Q0_j5R;K1n?*mn@!p z<-Ew)N#BR_jVWvSkt3(0dZNIJGdF;VFg4{IC7mF4#|{8%UnzLs4bspel?HPQgNmkHY>P9J{a+& z+2OPp$S9)`P@Ji1E+ADK8{q0scr<9zCa2E}K{I70UkyV^U*{O{%2}*n)y4+J0)tAX zXP(Uj$=q7MBP~q62{tTcnEf}Oqo%uOD`t!{1ct5}fq9=~JAtX-Mh5geWlDuE<8up> zMO~U)nm-|Ra^k1b@ic;T!dqw&zhR(T`xl1ToDQ}k!X~W+_xY&Jf$-WR-RFHnXz zbqme;&j81=7R_sf6!bLyQLyf}1<TLVTqu(?WW8hiA$WCxzl5Kq)7v*iu#FUn2|hI8{M`pjO}gzu&Q^U zuhN1vRy}HrOOJ!F%Mk)=mX%u-meR8zlMXupk4TK`N4Yz5i1HCWm5Sj+U=vzV@!k7Z z!?+Y~A-?)MIVHnCV+?dt)#j$>U9Oyk(Zfo-LUhks`UC2vhPM5EecySWNf=?3Y-09? z;vwrp(Lo6+o2c?9qz+nZ7U+Rwr^JY4@_yG`&!X_DhAuqw!9kR8n`^tbd3)z2LVhO9S?l*eWY|^Y<_^pZ zR{20GCmY=}A=AxVot%kn`2sho!9t+Pg7#XRfMpDk##Lf7)2^b0 z$3Fiv{$v;)JIWW}QX|au6G@b)$_l+N(oxWsNJZbCcmzu-QmZ~;T=+4wwZU_9p&hHl z@r?E&K5g-?(`=O?xHA7rtj>T@p$gvZ^b`PiDB6AqexKX9Lg+e;c<$Ym2N%CkTuHXr zRD5@13U3`7O$p(DY!4i$^f+SJlJRFW7rqrk_UmySLqQ@(CC%2ZBlQXy8M4C_~ zFZ_L`v{75WW_t6s+kBH%+L#C`y2RQ|;~8Ks`?Fcox|7R;57v(dO7(gM!eUBpOKB70 zk~?8aO8g<3VKG|MnqP=lGJkic$C{rkQU~&vo(J^=E)M$9tr@$&TiaFG*-(*$E1mj zBe`Ryb4oO8-uC<~`(?VEfizF}f_JdvWh<8pC&B6T)1gp2CJjV2XH@wug6&utzZ*z8-m46Am%+GCrD*hV4>zVBxA{O+M{)oohIE#0> zJN-~=NdEDPp6O-;g9SDeMbZ_!0lH@n041D6(oB33z;Fg6{Oi59^BrB1V8dnFxEKqW zLrw0zAjubWC5)2lA;?I5f5XCbfe)UppL{v9}xC5g|rXxDH>_L)ki~WcS zkk{UCt}3!Cp~Pfus`l5W&g{XHiILX&`PH|t9)||Y*<9ORX;I*NA;;AkAERlNl*`%Q zVts>2D!IN5ms4Yvn{M7-K=3p*bb|v6w-VZK8=EI)DPTH6`DZq*ZAAk@-<#G>NqpPw5D9m+E@`4dJe*$`P#eXsVo21k9@-p!#*w zX(K$od8^R4we!ZNUbJ)w=pLIkn#7oD)X+W3^3nWxL>ne~)u4ny;Jouz7B&5kP5kP1 zhRLZ;bd*5TUxW9+Q+DbPg8mD~yC;7;{|neOTV(MkdGyh4@_xP{_fX-PcK7OQd)(h6 zF!pZ`I->0Uhlmzj>MZ~$XbU-3!5X2VT!DP4zE+>mL(t?w0w}k~1Ngx15qZ@mysqU* zElWLA%ak06zsrXp@t@FOU{-`SUx=A>VAzhZ=?ma~=4zclsoJQgIU;T2`Xmw?k+=^=JdHKOA^ZV=O|yY4-;B zxc3bRw?Aoj%@^>4yFB(64Wn#Kdr8?uFk7x2F$wm?dU77@H+ivzPAfIoJkIVgJ`~YS zkcuh190AKpuQx(Q!ZKFV9|p4b>RK#5^*OH_Pb;Yq!g<4EVEz0|dl3Jg)A1uf)#LZ6 zZC6R`YY|`64Ak&j=$)GIH0D?thw|4T9Ebun)Dez6orHe#RUMG|95tbURK4I4&|2dK z-#Wj;{WZsFa1W+Kb{u$xS+BfMB(_i@I;?~$+b_KI(}_*{%>}1p3%-ct(@s3;=HFtz`kQ#JNp%E~|tE7+PcA?K@lFaeV zQ;LgM8g^iT8%>4?C_UK}(<%eADX3W;7dh!fZ}G6ty~chHdy&SI!tS{5S05k1%d!lw zZFeg`+%m1H3k<;xzn2F9H<4v2CrEHy6g-W)2MoM9v(wb`(X6$Fk6R^%`(JAb>wLiJ z&w*IZAD=Ch$K3nUx}y9&?xim7vaSkPhG>c>YmH}*ko2$DyT2>d&~u#;I-#=+_JlR0 zfv@z05iA8uvb`5w+57RrJ|2lJd~-2c`K9_Lf+&sbrpG#WI8lD|O)~zu-9BCbzC4I2 zKPqXB79fe}=)3xU_9<_7w{oXnbhlY?Hd}9cBk^<|z=VaJc=Z|Ra(WoRW?bCeor|ro zd(BNy@g%i^WX4)ijYJAXxnHP2`2FCszQ(xpEuV-dju3`!rt*EsQ(Hsm zKg%uKaIhOOS}+VR)2E~1+${b41?A|$P!sR^ z(OuI9v^Vs28Vo{jm)T%kNF~5+KoGCrbo`Trv`~$=%;2hcRxije54~O-8mNdK*9{w^ z;xIs&W_Z}me(4I2P9TWSYl4!h2V>&%qJ#YyVUhh+V8V*Mvj0yU10Mq;$M%JcPt;Wu zF3ldE=oDHObP5#gtD1Jd3)N$IkL*KJAyA?J){XgH!9BRI(Y&WfE+N(OMIec>kQWZ& znVd47))55qqejUiTgF;-ditzNFe$hVc?e>o*-r#JUb!qzLB>dD=0?W0&P-nj9(+3pGlSnA%nLsp7qCSBA=0~FV5gP z^WAT)w?3bPHb{oWqKzVO=-lb``)JwZT{rWFxuQ{tWEVrK1P zl?eUB)tofo4>p&!!Ur>6dbL+~+M18#vmMF26m;QKZCloKnubTx)sV*zALkCyL%~1D zN@(#*TPa2wrvJ(E^mB58OVmWwi?$phb|)0iK3qXKu+4R+zn}G7g@bqfBx=%6k_T1b z=Fo}MhZqnxe}l1Vq8L|jF%w?`Z#**qeJT&%_VY2U!B7-*rPXUZ!6O>DeV4xP2*oOv*11=(zL|IrayK{tT{kC_7Oe^X$6wsla z4DiOkUe9p`^?5S-Vg2ZQ3O>l#@Fhaz>6K!(Y=4%U=aW{6YxU~v1Kwve;Mtu0TT zw&AMK=9SaO=7OqhB$T8pwX`Y0yypr4{Z90vVHqd7=F@kMC+#O*Q`whz9$ird%4GBz zDe|dBUm2EI!ev^xDS`?7KuIhJ*mm69HV9D>ryMRtFFaMf_phJ*J8Mq+3oAZ=c0$vv z{UyJ_p!f#)yiW}Um#A5f!lWi6!%U_q4|z+nHFhSvu)t+F1koWU%PW zPsUYiMrw@NMs|09E=9nV6iG4sb|Iz%f6%~{f9Rn7u)cTMmvJ)Rfcp|u;*dOI^rN_F z(m7Zz)~qQ#v7DXo_h;Qo8woaEVeOX=QCh#7l4gC4MuSq}N*;JWe32MjNg@0X=A+NUPoCU2mw}#X3|yXj2`Payvk|vCF{NDq27zQYpcQ$RjmyA2cq`%Zqeee z7ZIl16PLWad@RA<(5EJln3opiqW94^FaxPCUR)gG!$$T6L#{FCe+pY;R-XnHqhGmL zI$M$KbKGt6r(UcwUZS`#tM}Zk6!dyXl(LGfjGMjC(y*&D6cj?`SbaXbBM*Re|JTfW zfINU2+Ete8wHU#K_{zuri+8ceX=z$JD!~A+DeSU0%NHw1a`&8HM69I^6I$5k%4~h3 z>(~b*jvoI?7v3K~2xc4@;Tjc(>maL-uWc<_#KQhFuZMz_p-aoKHh)=peneeEx5K^} zl!+VC*%3X8*)OfEQYPfgy!*4UXqvc_krg`K^-@0OW8U0|cvY~2j8;7T9^%M%wMPVH zFKqXeIn!QCR;%uT6?ch6-Mfk6H_)W*_H!Uu;(M9OTAg0OBFN0&=(o%2GYH@@A@49~CvHo($S8RR_s*@#E6&wYjbyMq*0&_E60h$%Gni zy4feE;NJi*H@&XUJv3EZKzl^KNfXF_RDP`F%{x z8{v3$3DA*l7O@K#74lbL%^PX|=Lh{8&mk;0ghqzT#3eh1tERn1 zw>R5y)GuO;{I6a^o7Q-ftXb=BdzL1i$}{TZ{6KwgnS8O7&{zf4-t4)p@Gdmw0|%>A zFS>iw_>op+YSTboXl0Y8kE~D=S?--R1eD#>B=|(`9T_T(1I*tZ>0EdwHq0IXvabJ{ z+Rp3-6(fM7qN@%kBnWo_^3hXl~*i_|wn!mfVcn31e}<1f%0O4|s1F zE$1AY%B(khpLEEm;XH0)hkAZag2uUQkdsBCNa|h2>c8pi`U#a`;fKL|7^S0FJ~|LmbcBSt{mEor z!~e*};W86`65D#ovqja1-5^&p8s}Ogj}8AOSyLe#u0p;6FlotoX z6;{noFWpcZLdb9W$~3$m~i^^R@pj|(<*ElCkY)of-P z=?OJ^!!ov2J=ckDOR3e(X5|pxxxH(yML_YHxwCC~X_+sYXM~>9pTCCSq*+@dEuUJ1 zs=`1Ke7H&y2e--Gz(CO3h_~BKk>xZEeE^DWj2#3xG(HJNw4d&(=> zFG}^Omi;V~sK7TQY13dLcHQr1#M%dDdGgOZ=1jYgjNFG8&06Y@M7jl#pH~N8RjkO1 zC_Fg#`%YDTgnVe+BaJsN6*cGs-q%6Sk>R$V?CUeOvP3n9BWn$ErU^%qv=Mb?mVGT< z|6O94V6n3k^WwFrt#V1GfL|p|frZ)YIENy5A8v7!gI|SXk;a-# zio0_#Dxb7o0Yj2mwfH%bVPub%3d(LUvvpOetbo*^!fTeo_d<%NoLRJwRDo||Lyipx zA4fvGFOZ(TR2sY@T#O23t41F&Zbg&FnQjReLI*_~CVd3-uBPjS8@N1)JOrg12zhGs zu>`P?^bVR7`yZ=`nHVE#hT~>LqXJaxak_n%8;kOtnDoeP!?n8TZj(971p&O!dawA0|FZQ47DfQnS_yei>Q#nzv6tq-LkN@zz z?*IO;AE8S3{_p=!l$!I={dd&0FF{$UF%2 ztWJXbZ|@y7SA43$q(!33D4;Z(ITs5Zq?{R#526;usaZXku#}x}9$dZ}m8f_%5US zOK8#(;7-TutjU4(@4CgI5wA0hdjq7lS8GciJw&(AgrD5{(&3?_a8a%W)g!zBX$JFg zJ2fogMBk|Fwx_!>t<1jEj~H+WCWFmU7`*6++PUgCXow%Ix*p^bF{gl17s`_!sY0U+%Qax(S%h4tJPYhyS222;TDd{A zlornWsUp)aoP9)ddsaa8gmaCT?>zGel+bHEq1)NVuad5qT}LY<|46&CEAy^Ns-xZQ zHcza0`8k%YW!(r={EYk#x7(!himy@Z-60Ld0@`ZX-OJBI*#9ZOQLw2SOt+;JF z3()2m^+bAllBe?~KQt|L@(T)Pgvd;}jY)G|FvT<_8~L4zgzA)D z4$D=-locr4zt;ATFZzAB*y$is@n%xlUdJQOYvwL1&t;sYtqew>-zisa3C7Hz-%lJ1 zQ3Ao65@uYyI(=4POB^u6Ji70@7sIwWjfzeY45L!1duL}ADy_!=4&qBO(+(gST|i-vmN>s;1==scePWO30kQhr?Ods6;wxu?So4vO}djF2rzHo@4n>1(=p&Zq^`TF-Kg9=9R$wk4r0yX0@ zFeEAN<9lEhSngbA7WkbA;;rE|rO+q9HbVw&6Hl*b?+RKylY>PBoAbvQO80%oaVoP7 zTN|c{FGasqM+U9@t0hQP~7oV#K_`Tox*24uPus`bNP=+8J-B;Yijv8hH{fr7< z!wd#E<#?lStiakzq>PMFEqLW=ow5-tnsmJI@pV1$TRJ}G$r4|o{C`_TLi*90Mq?QD z6*}ZWEnYL-kfo8hb~VN*=4sxw#h(rnf#LYQ3Fv!)!71M<&(>$?Gs-BwSbRe;+?-G2 z>tZ6<5eo1Z6ZRqB~M>c{Z575 z(x{K@vt*$~4f{qR2eU7(?hD`jo|cfR#2>8YUvzg9bKMbk=qKg zrCLSjmgJo1FL84c^SGXslOy4*s)bD<&5t<=qjXlx-un%NnU4h}662(~clm@@nJ3Rs?nS_Ux z?K}$Fa%ivL{by&L;Pl-vS7h{g0z@`#T8!YPpM zCwU|sb4eRdX_BBIz9J0&K7(G^Q5=4~!(dl$&_`C0=Hhiwzpcn+(x4;8wAjQl9g0m> zdUCs{?W)tAgfZl7*OD}5akYi9@Sr~X5H6sTw~_QN?~{}+fhgOv(3$#Co@o44DB?0| zVC229?ey)8>k+=_pi{|#yYEvvZNAsv{8-EVmeN04f0`#hgBA$24l$UI+F>>mjX7lY z0nX(N=~ohyeBBpVqz%?yNRJQowOttNv=eh8Ymrr9B;&VY7t+8sFS{kH%}0z45d?qv z9R7KY>KoR6I3K9G!{bR#xqDS=BL#+s(pI{4!#t`AK@EVo%Fl-^n$h}qACb%IZVoHW zIo3RhRl%l2gbKX3&w+(7EwEG3=!9aUlqyjOB;ola^>e3om31yJgvF&;373F=Q z14G`u`EV}G z35o=4lj%v$6L}ZEMqV5Vejw8kDiP?@AYK4c{MC);QHBUW71=jRJCIAGwFM%d6Kd7I zVHc-lj0hR`UbTh_@;rM+Sp0U;!NcX{(U1UYj$iL~6hx|~S{gB|YpCBIC&2*=N+ybtpM-Kmj z%NTq@e(WuOXYk}SJ#nKec7&fJ{R2Y!z z_vS$T9Iw_p*Y!LT!&g#Czw{vP&xpNSV@u|7dW5tc&^g!(j&?Sa2Qo?X18Gmd=X!>v zIaY+;2nd>1C-Y2}uDeeF;|lsQWq4pL+V64F^Z)pyMVSQO(Um=YWf+bVx0i_UE!EFG2%T18(Q9qj+J&+19M1}vQG@QI%nZHA9S+eQRoN3U zLS!IE$w9#YW zNl(VQU{-=WM3oW*#^e`Mz%%!xL=&l${&hhr7YvrN%igE;TG+GO^~%ROK%R4(OthT5 zH3pRjOfTb;CIu0+I5KVQJl?eCjSF{NUz>R`l*I(!`kecyagh1*}3*9n3cg<*LarD48}ho^)(-wA^Web1j3sZAVq2H^Dw|;Onz9^=|8WJsx-@d5kA{97Z z`&Jf#G^$>``{&t|-|sUH>QNFWrybu*(RtkPS21^SeFez(|MYl3ieVV8Ea{hODys49 z(li@s$%iSgeC&v{dXNVwzyprA+_wmdB82%xUFF4b{^hR`u$04d3P+j$@Cr=}*a$ZB zPt4u`>%)0*?*6M$TI^9W;;sSHn*gk91V^K#-)*eaYRVsL6e(|1ewgK?`|48JLp*TI z@T{wptU_PvUad~wX*bHT$tk%g=MdQWsitH9%TOa?wDT&ZO?=yn&aLi>6Czm8PAoD? zhX?t|xnrhf6hd~4~`R0Tv-%*xlBlkKbi9(pg*&i1*I1}axpDCvlM zHZq6I6xBKWodorK7(sveQ4;ZhdVHgTHhvdA=ugWo^W_g8_-j)3G6hcmOlF-i3 z?#7&GJ_W=X16r7{^hu;eMzy4D?NF-w4ttXX>i7+ln;YVcJhz~`%M*>C5;ZYZ3`^Uz z$Z@^U!-4vX-%jgn`fA9dw=ZRil@MNFcE8>ib*Mv+KKD>#1~<~Z?ihb<)U>bY^3jJ9_#81?x0DAzJofcRuH6ZWk??sY~UR6#yDSFv160X6lTUzp)7n6*D? zJr&?XY||^Hw9x33hxz%K?KErQ%G=O|o05K}gP;zeBml^~|3JBvyF$bgmb#u2qxCjD zzeuIo`Uj^NDJQ*uL!s&}XBwXK0t_Uyk3`qgY~c2ISXFCi6I!MNY+GRLA0i1HVIE7} zy!JQ}{?|Qp<^g2kUxj5iCM3uaGFvPYUB-*a)))#+{$l%MLC=E6OuoGzq#qcdtTb^9 z>!5W0p?u@=zxrsr27VFm0u*?I?aaa!bSfV)^IK>nIBsyX}W5|Wos5;plkYLFxwES2M4l$&BBn(VkW&ekq$y*j%=D! ztzjo3VH>=h!T$+-AM_QAeNox#B*`>r3i@#ghjV9G{8kuOG;NqEk$D#9?J$S|#*1cH z^L!f(7hka*`IjaCyxhHwPZT<5vO>R7(anb?5-Os8To}hfp1d{ZVX^v^hU*p)?c!uu$(2WdUFC!d$Hs2WYA?L1JR zjFTn(-I}aaI#N+A@u@NYeQyd@$DQltOT%Mcm6mbW|KO()i3BYhF@e_?31GF88_;?I z(4~A4LcE5;b)dcUzg8>d1SL#_O{WrAiJ0W|;LfjZF2{$u>bK&pu%Gz*#`Uh&k<4F8 zD)NaikxkzvB!9QF(|r!otdjuB*E-jo;c5){_1NGnXEUVvzgmU08n<;jda;QZB$xm6 z^qxg?k0|o=RZj!PS298!sZVCf4iHSNt-jqJD82~fZf{EJH}-zoHeIuivbi8~7Y7hT z4M?!LC>mKcURvOTx8Fq8zSA!NnI238!eRy%T9awv_TaaQ1%ajF$M}^D&e408m{nP8 z+D**1uEd(e@LRjkXx%m289r9Xp}zJ6q>`!avP_qnB(S-l_6z=1vmX3ubxHVQ+p_@4 z3wrW5YzPn;wn;!!%1cw2+fE}E<|WDNeqT=*Ihz(vY2>}8+jaK=KiPVLpph-}w^V$Q z{^_msv$hdXR9^3)~}140En!7oUaDMLgV%|+$&VR= z7Etr{mQQ>g#5ShS*DDltuD7Bl$p$(N|AJr7=3zi{-F|LLeY%;}!@zeCw0vH>OseE%HQ;$BEx_x~+9s8N&=RqE7$9O<(XPBA|Bp^Q za^VD^N8H=Tx85N_Td4Pde}Yj;{r6+FtU2x7{!gp$3yqdK<5ZAS>Bt4SkL*R)sinXJ zJ9Vghi4K6qs`iFUbb4=BR&-GoDL94XUEY)ev>O5YeW>-aa~E3t1tI;wItzy&(C=># z-)}PWHUL2SFUz0KsMUb#L{LcHAVuFaZ`^Z#{f|V^4n(K+lTdz#Z`$@w>9>OgVsSPy z6>xVh;wmH-w_YeY#7l6hb>vgJn#;Y#yCnhiEwFDo)HlW_-GgXO1SToXePIPev7r&X zhkLNv|8id#klUb!e({dLfH1MYebhdP4|XoWXk$T&kTpf}%Yn&8rHrCPpj9vJQe>LX|-&dPHQxgR5I28dq+9NB-MEngrko}4U98ve)0|nL&C^?RdsTyh07knw% zHO26alr`R(Bve=1bpu&L=`B1NPJkjLuXfhn>Q-uqVx{KYepm^(VRSYQBQM7xpCTJ5 zgto02DaV8KzK^o=BA_!{Hz@40cVOEyB{Vw6Fq~c_QZgS|!sSD0Y(F{B;gXoya+D@F z-m7-bZ{zPjktf<%O%CBJ4*=puPSMcJXY1n~6z&*g$9KfTe2hx$q}m&uqGwKNf0lKC z+}J(tp_|n2ARBhgbAOqEDidD@VMRzGuIiwRgFhgh+`|$D9Wk5i<4=TpvxIF4z#d<; z*mUu2`x}ie@so&WP}peq6aDkALS<=~@nvl}bf@*Eneof3v#L%D#xK2=>__c7ScaMK zRIO$hqZR8Pi%5>MY7Cp?7IwsluZ>e<7}w>74a?aKRd;M(p~h1dZ^r7zy7t+9gtMA_ zH~4*liRLJBSTQ`2r1}+K#9-(;(J5Wef9E6XQ+PVrh(`l!4Jt~K);qfnY(M@6GF3q_Of2O7*kv+X(nhKiG1i*Z2Cq3{!6ppX zWIUGn8Q1WoGIKGS-Kb47 zvl&IdXe`Ja=Qg$dxbQibn-Py$Wtc7HEzKuX)bx4zg`Mt6c5U)SWoHEB`}pp*izHunVOpN0|>#1O(x=TzsK7<_p<^J>TeYt&=C zjqM~WQKTsN7Ysqeh}_RShhmO3?IV^lf8AX^&xoM;`?vZ==`$TNSs0FjJPq5WzK`mt z;UodS`|sQR(S{5Bxd0FBRmU>JD_fb?-GofK#>@xk1ELeR$UgDz2w8f5N>egZ9@8x* zyL!Q}&n(xCqPeoJyursmW_iZqm6cuefF+7WHSLl}x}WKsk4OYkci6nkkHGBL{7^zp zIEpO8yhIa!exC6CI^0#0ap}A0xk11pB?a(ku(iwrK9 zGUF{Y%d%w>myfTGgT*z~9HbcH&C2+AYR4`$C}l{Kf%}2@lS=>)3oL^ms}NT;$y@# zPJ&YZacbi&mJ1;0Jo*jMi_&d$SVx39=XnbfS()Lau(0BjWEuY&#n7d{-I;+LZL9Nw`6r=eK_xUVN@T;Jhev_yWY?<(t z7(L#z$!=Lph2H68Jt?xB%&?{M&$4@%ya6l)ebYdG5&o91;iCg^EAuJZNz^*Tc}~*q zoxO*=T%qo0z}7^5_YH|i|C{7dAtN4log z&Bqfy0y4lCn39vA=F^$=SG36perv-ir}IUT0wb=YU&E4RgQyy(8duBK27?0C$T{RJ z;PzY^YYw@fy{@!4JTO zBcdi!STA7HJz&ZiORBV@s!rA;O!Q;6hbX_w{=duC1q)^S>1eGo^kc#s>Szv-OE5XF z3n%f&J~UC`%~I4k1)!G@Q|5UFaJAk?ub;8xbG}zCPC%sbbnmils2^OyE>+x4F5rUg zl+l#qAjf=%X5D71&WoGjV*TkECqdi5XURGV^7`;4eQDf=%~!uB=b1jY`$p_pvU(MaU=)Pq9i#@bM` z*R1*-e|$b3q#NQAY>9ch)~LCJu*-0n_x!QDWc|tx%0Ka_+%Q{Jr*ZrZ7Uv;U8@`c+ zudbS(%RV~a=D{~3&Z*|<=o&j#><)=HS@Vl&6vmkw_tfX0G48;Qm+^!BefvogAO7#C zey&HSbrIZ~+0^Yj%$LuFD=O+soAt;EbqHmWmJTs;#6E^TQ2tMO+-;y7og+L%f^7*i z>)}$X6-*G@*`GIPX+Dz9W4tKijBioZny`O+o<-WoI#jE>1*{VcH{9||4#nXLfslhkNE{Hs*YCX>D2_tFAiD!3_8%)a$g5D?X8w)96i`Po*$f<9t zd6z~&_GnZg_m7u>oLi~j5c|a_@y?fgkuC(kS5`*&upP7Ii7TY7*CJZ|ZTC#Mg9R$D znI}Kfnb5pH4jLlO;7#XnJ{j?e&h&>eB4cDD6TxWlf=G1^-QhkfA2@+l-NNXD0sJ-H zPr$+M0TDD?yYpV!VDD%M&zT&h(-sQbu|1#2kkUKd*&yXNxYJu19F>l3T>xf;#S3?q=0l%WN~rfSiE0nDev1 zJM>c@H=iI$r=XA=$E3geNonP$Z)pmWM=ZIYD9n#u&l8QeUT`N6KWX?U8;n>1cfh@m zF5hz~S@vYDqnx^W_g|Y>VR(~vKhUdYk?}f%zJJGM8Q}Bj=PMsB2j{nCt(dnDB?x+% z{quIKi<%m%&KcQiZwRfdutDt~ojMbKjJ5ap*0qjBqi+UfB_@^wzuf;=m0S*Jay2c! zoccO2?u-8fBY_+nk;rCFgP+M09y?4iw YsmpmBU9=oTJ~XWC9+yt^*1B`frz;7* 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

J_B#TAO|8Qu21KqBP?)DtXsgP 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