1
0
Fork 0

DBG+GUI: trace log file improvements

This commit is contained in:
mrexodia 2017-03-20 08:51:01 +01:00
parent af6bc45b2e
commit 4c8b1e92dd
No known key found for this signature in database
GPG Key ID: FC89E0AAA0C1AAD8
3 changed files with 28 additions and 4 deletions

View File

@ -85,6 +85,9 @@ struct TraceState
if(hFile == INVALID_HANDLE_VALUE)
return false;
logWriter = new BufferedWriter(hFile);
duint setting;
if(BridgeSettingGetUint("Misc", "Utf16LogRedirect", &setting))
writeUtf16 = !!setting;
return true;
}
@ -92,8 +95,17 @@ struct TraceState
{
if(logWriter)
{
logWriter->Write(text.c_str(), text.size());
logWriter->Write("\n", 1);
if(writeUtf16)
{
auto textUtf16 = StringUtils::Utf8ToUtf16(text);
logWriter->Write(textUtf16.c_str(), textUtf16.size() * 2);
logWriter->Write(L"\r\n", 4);
}
else
{
logWriter->Write(text.c_str(), text.size());
logWriter->Write("\n", 1);
}
}
else
dprintf_untranslated("%s\n", text.c_str());
@ -192,6 +204,7 @@ struct TraceState
logFile.clear();
delete logWriter;
logWriter = nullptr;
writeUtf16 = false;
}
private:
@ -202,6 +215,7 @@ private:
String emptyString;
WString logFile;
BufferedWriter* logWriter = nullptr;
bool writeUtf16 = false;
};
static PROCESS_INFORMATION g_pi = {0, 0, 0, 0};

View File

@ -67,11 +67,11 @@ struct BufferedWriter
memset(mBuffer, 0, size);
}
bool Write(const char* buffer, size_t size)
bool Write(const void* buffer, size_t size)
{
for(size_t i = 0; i < size; i++)
{
mBuffer[mIndex++] = buffer[i];
mBuffer[mIndex++] = ((const char*)buffer)[i];
if(mIndex == mSize)
{
if(!flush())

View File

@ -41,6 +41,16 @@ static QString escapeText(QString str)
void SimpleTraceDialog::on_btnOk_clicked()
{
if(!mLogFile.isEmpty() && ui->editLogText->text().isEmpty())
{
QMessageBox msgyn(QMessageBox::Warning, tr("Trace log file"),
tr("It appears you have set the log file, but not the log text. <b>This will result in an empty log</b>. Do you really want to continue?"), QMessageBox::Yes | QMessageBox::No, this);
msgyn.setWindowIcon(DIcon("compile-warning.png"));
msgyn.setParent(this, Qt::Dialog);
msgyn.setWindowFlags(msgyn.windowFlags() & (~Qt::WindowContextHelpButtonHint));
if(msgyn.exec() == QMessageBox::No)
return;
}
auto logText = ui->editLogText->addHistoryClear();
auto logCondition = ui->editLogCondition->addHistoryClear();
if(!DbgCmdExecDirect(QString("TraceSetLog \"%1\", \"%2\"").arg(escapeText(logText), escapeText(logCondition)).toUtf8().constData()))