Redirect console output to Visual Studio debugger panel

- Or to logfile for the release build
This commit is contained in:
2015-01-08 22:57:15 -05:00
parent b5ce8e1169
commit c96dba2678
4 changed files with 57 additions and 0 deletions

View File

@@ -0,0 +1,38 @@
#include <sstream>
#include <iostream>
#include <Windows.h>
// Debugger streambuf adapted from here: <http://www.codeproject.com/Articles/1053/Using-an-output-stream-for-debugging>
template <class CharT, class TraitsT = std::char_traits<CharT>>
class basic_debugbuf : public std::basic_stringbuf<CharT, TraitsT> {
public:
virtual ~basic_debugbuf() {
sync();
}
protected:
int sync() {
output_debug_string(str().c_str());
str(std::basic_string<CharT>()); // Clear the string buffer
return 0;
}
void output_debug_string(const CharT *text);
};
template<> void basic_debugbuf<char>::output_debug_string(const char *text) {
OutputDebugStringA(text);
}
template<> void basic_debugbuf<wchar_t>::output_debug_string(const wchar_t *text) {
OutputDebugStringW(text);
}
static basic_debugbuf<char> dbg_buf;
static basic_debugbuf<char> dbg_err_buf;
void set_debug_buffers() {
std::cout.rdbuf(&dbg_buf);
std::cerr.rdbuf(&dbg_err_buf);
}

View File

@@ -53,9 +53,24 @@ cursor_type arrow_curs[3][3] = {
};
#include <stdexcept>
std::filebuf logfile;
void init_directories(const char* exec_path) {
progDir = fs::canonical(exec_path);
#ifdef _MSC_VER
#ifdef DEBUG
void set_debug_buffers();
set_debug_buffers();
#else
std::string logpath = (progDir.parent_path()/"bladeslog.txt").string();
logfile.open(logpath.c_str(), std::ios::out);
std::cout.rdbuf(&logfile);
std::cerr.rdbuf(&logfile);
#endif
std::cout << "Testing cout" << std::endl;
std::cerr << "Testing cerr" << std::endl;
sf::err().rdbuf(std::cerr.rdbuf());
#endif
#ifdef __APPLE__
// Need to back up out of the application package
// We're pointing at .app/Contents/MacOS/exec_name, so back out three steps