mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	logging: Add DebuggerBackend for logging to Visual Studio
This commit is contained in:
		
							parent
							
								
									9c904e475b
								
							
						
					
					
						commit
						3d083859c1
					
				
					 4 changed files with 29 additions and 2 deletions
				
			
		|  | @ -126,6 +126,9 @@ static void InitializeLogging() { | |||
|     const std::string& log_dir = FileUtil::GetUserPath(FileUtil::UserPath::LogDir); | ||||
|     FileUtil::CreateFullPath(log_dir); | ||||
|     Log::AddBackend(std::make_unique<Log::FileBackend>(log_dir + LOG_FILE)); | ||||
| #ifdef _WIN32 | ||||
|     Log::AddBackend(std::make_unique<Log::DebuggerBackend>()); | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| /// Application entry point
 | ||||
|  |  | |||
|  | @ -116,6 +116,9 @@ static void InitializeLogging() { | |||
|     const std::string& log_dir = FileUtil::GetUserPath(FileUtil::UserPath::LogDir); | ||||
|     FileUtil::CreateFullPath(log_dir); | ||||
|     Log::AddBackend(std::make_unique<Log::FileBackend>(log_dir + LOG_FILE)); | ||||
| #ifdef _WIN32 | ||||
|     Log::AddBackend(std::make_unique<Log::DebuggerBackend>()); | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| GMainWindow::GMainWindow() : config(new Config()), emu_thread(nullptr) { | ||||
|  |  | |||
|  | @ -11,7 +11,8 @@ | |||
| #include <thread> | ||||
| #include <vector> | ||||
| #ifdef _WIN32 | ||||
| #include <share.h> // For _SH_DENYWR
 | ||||
| #include <share.h>   // For _SH_DENYWR
 | ||||
| #include <windows.h> // For OutputDebugStringW
 | ||||
| #else | ||||
| #define _SH_DENYWR 0 | ||||
| #endif | ||||
|  | @ -133,12 +134,18 @@ void FileBackend::Write(const Entry& entry) { | |||
|     if (!file.IsOpen() || bytes_written > MAX_BYTES_WRITTEN) { | ||||
|         return; | ||||
|     } | ||||
|     bytes_written += file.WriteString(FormatLogMessage(entry) + '\n'); | ||||
|     bytes_written += file.WriteString(FormatLogMessage(entry).append(1, '\n')); | ||||
|     if (entry.log_level >= Level::Error) { | ||||
|         file.Flush(); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void DebuggerBackend::Write(const Entry& entry) { | ||||
| #ifdef _WIN32 | ||||
|     ::OutputDebugStringW(Common::UTF8ToUTF16W(FormatLogMessage(entry).append(1, '\n')).c_str()); | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| /// Macro listing all log classes. Code should define CLS and SUB as desired before invoking this.
 | ||||
| #define ALL_LOG_CLASSES()                                                                          \ | ||||
|     CLS(Log)                                                                                       \ | ||||
|  |  | |||
|  | @ -105,6 +105,20 @@ private: | |||
|     std::size_t bytes_written; | ||||
| }; | ||||
| 
 | ||||
| /**
 | ||||
|  * Backend that writes to Visual Studio's output window | ||||
|  */ | ||||
| class DebuggerBackend : public Backend { | ||||
| public: | ||||
|     static const char* Name() { | ||||
|         return "debugger"; | ||||
|     } | ||||
|     const char* GetName() const override { | ||||
|         return Name(); | ||||
|     } | ||||
|     void Write(const Entry& entry) override; | ||||
| }; | ||||
| 
 | ||||
| void AddBackend(std::unique_ptr<Backend> backend); | ||||
| 
 | ||||
| void RemoveBackend(std::string_view backend_name); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue