Redirect console output to Visual Studio debugger panel
- Or to logfile for the release build
This commit is contained in:
38
src/tools/debugout.win.cpp
Normal file
38
src/tools/debugout.win.cpp
Normal 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);
|
||||
}
|
@@ -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
|
||||
|
Reference in New Issue
Block a user