/**
* Run logging and then make core dump with not flushed log messages.
*/
#include <iostream>
#include <string>
#include <sstream>
#include <cstdlib>
using namespace std;
//! Пишем в буфер и флашим когда размер буфера > flushSize_
class PseudoLogger {
private:
string buffer_;
const string cookie_;
size_t flushSize_ = 50u;
PseudoLogger():cookie_("my cookie") {
resetBuffer();
}
void resetBuffer() {
buffer_ = cookie_;
}
void flush() {
cout << buffer_.substr(cookie_.size());
resetBuffer();
}
public:
~PseudoLogger() {
flush();
}
static PseudoLogger& getInstance() {
static PseudoLogger logger;
return logger;
}
void Log(string message) {
if (message.size() > flushSize_)
message.resize(flushSize_);
buffer_ += message;
buffer_ += string("\n");
if (buffer_.size() > flushSize_)
flush();
}
};
int main(int argc, char** argv) {
PseudoLogger& logger = PseudoLogger::getInstance();
for (int i=1; i<20; ++i) {
std::stringstream out;
out << i;
logger.Log(string("test message ") + out.str());
}
abort();
return 0;
}
LyoqCiAqIFJ1biBsb2dnaW5nIGFuZCB0aGVuIG1ha2UgY29yZSBkdW1wIHdpdGggbm90IGZsdXNoZWQgbG9nIG1lc3NhZ2VzLgoqLwojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxzc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGxpYj4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKLy8hINCf0LjRiNC10Lwg0LIg0LHRg9GE0LXRgCDQuCDRhNC70LDRiNC40Lwg0LrQvtCz0LTQsCDRgNCw0LfQvNC10YAg0LHRg9GE0LXRgNCwID4gZmx1c2hTaXplXwpjbGFzcyBQc2V1ZG9Mb2dnZXIgewogICAgcHJpdmF0ZToKICAgICAgICBzdHJpbmcgYnVmZmVyXzsKICAgICAgICBjb25zdCBzdHJpbmcgY29va2llXzsKICAgICAgICBzaXplX3QgZmx1c2hTaXplXyA9IDUwdTsKCiAgICAgICAgUHNldWRvTG9nZ2VyKCk6Y29va2llXygibXkgY29va2llIikgewogICAgICAgICAgICByZXNldEJ1ZmZlcigpOwogICAgICAgIH0KCiAgICAgICAgdm9pZCByZXNldEJ1ZmZlcigpIHsKICAgICAgICAgICAgYnVmZmVyXyA9IGNvb2tpZV87CiAgICAgICAgfQoKICAgICAgICB2b2lkIGZsdXNoKCkgewogICAgICAgICAgICBjb3V0IDw8IGJ1ZmZlcl8uc3Vic3RyKGNvb2tpZV8uc2l6ZSgpKTsKICAgICAgICAgICAgcmVzZXRCdWZmZXIoKTsKICAgICAgICB9CiAgICBwdWJsaWM6CiAgICAgICAgflBzZXVkb0xvZ2dlcigpIHsKICAgICAgICAgICAgZmx1c2goKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQc2V1ZG9Mb2dnZXImIGdldEluc3RhbmNlKCkgewogICAgICAgICAgICBzdGF0aWMgUHNldWRvTG9nZ2VyIGxvZ2dlcjsKICAgICAgICAgICAgcmV0dXJuIGxvZ2dlcjsKICAgICAgICB9CgogICAgICAgIHZvaWQgTG9nKHN0cmluZyBtZXNzYWdlKSB7CiAgICAgICAgICAgIGlmIChtZXNzYWdlLnNpemUoKSA+IGZsdXNoU2l6ZV8pCiAgICAgICAgICAgICAgICBtZXNzYWdlLnJlc2l6ZShmbHVzaFNpemVfKTsKCiAgICAgICAgICAgIGJ1ZmZlcl8gKz0gbWVzc2FnZTsKICAgICAgICAgICAgYnVmZmVyXyArPSBzdHJpbmcoIlxuIik7CgogICAgICAgICAgICBpZiAoYnVmZmVyXy5zaXplKCkgPiBmbHVzaFNpemVfKQogICAgICAgICAgICAgICAgZmx1c2goKTsKICAgICAgICB9Cn07CgoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CiAgICBQc2V1ZG9Mb2dnZXImIGxvZ2dlciA9IFBzZXVkb0xvZ2dlcjo6Z2V0SW5zdGFuY2UoKTsKCiAgICBmb3IgKGludCBpPTE7IGk8MjA7ICsraSkgewogICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIG91dDsKICAgICAgICBvdXQgPDwgaTsKICAgICAgICBsb2dnZXIuTG9nKHN0cmluZygidGVzdCBtZXNzYWdlICIpICsgb3V0LnN0cigpKTsKICAgIH0KCiAgICBhYm9ydCgpOwoKICAgIHJldHVybiAwOwp9Cg==