Merge branch 'torusrxxx-patch0000008a' into development
This commit is contained in:
commit
94035a530a
|
@ -31,6 +31,7 @@ bool _dbg_animatecommand(const char* command)
|
||||||
{
|
{
|
||||||
if(command) // Animate command
|
if(command) // Animate command
|
||||||
{
|
{
|
||||||
|
GuiAddStatusBarMessage(GuiTranslateText(QT_TRANSLATE_NOOP("DBG", "Animation started. Use the \"pause\" command to stop animation.")));
|
||||||
strcpy_s(animate_command, command);
|
strcpy_s(animate_command, command);
|
||||||
if(hAnimateThread == nullptr)
|
if(hAnimateThread == nullptr)
|
||||||
{
|
{
|
||||||
|
|
|
@ -31,7 +31,10 @@ void BreakpointMenu::build(MenuBuilder* builder)
|
||||||
if(selection == 0)
|
if(selection == 0)
|
||||||
return false;
|
return false;
|
||||||
BPXTYPE bpType = DbgGetBpxTypeAt(selection);
|
BPXTYPE bpType = DbgGetBpxTypeAt(selection);
|
||||||
if((bpType & bp_normal) == bp_normal)
|
if((bpType & bp_normal) == bp_normal || (bpType & bp_hardware) == bp_hardware)
|
||||||
|
editSoftwareBreakpointAction->setText(tr("Edit"));
|
||||||
|
else
|
||||||
|
editSoftwareBreakpointAction->setText(tr("Set Conditional Breakpoint"));
|
||||||
menu->addAction(editSoftwareBreakpointAction);
|
menu->addAction(editSoftwareBreakpointAction);
|
||||||
|
|
||||||
menu->addAction(toggleBreakpointAction);
|
menu->addAction(toggleBreakpointAction);
|
||||||
|
@ -119,7 +122,20 @@ void BreakpointMenu::toggleInt3BPActionSlot()
|
||||||
|
|
||||||
void BreakpointMenu::editSoftBpActionSlot()
|
void BreakpointMenu::editSoftBpActionSlot()
|
||||||
{
|
{
|
||||||
Breakpoints::editBP(bp_normal, ToHexString(mGetSelection()), (QWidget*)parent());
|
auto selection = mGetSelection();
|
||||||
|
if(selection == 0)
|
||||||
|
return;
|
||||||
|
BPXTYPE bpType = DbgGetBpxTypeAt(selection);
|
||||||
|
if((bpType & bp_hardware) == bp_hardware)
|
||||||
|
Breakpoints::editBP(bp_hardware, ToHexString(selection), dynamic_cast<QWidget*>(parent()));
|
||||||
|
else if((bpType & bp_normal) == bp_normal)
|
||||||
|
Breakpoints::editBP(bp_normal, ToHexString(selection), dynamic_cast<QWidget*>(parent()));
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DbgCmdExecDirect(QString("bp %1").arg(ToHexString(selection)).toUtf8().constData()); //Blocking call
|
||||||
|
if(!Breakpoints::editBP(bp_normal, ToHexString(selection), dynamic_cast<QWidget*>(parent())))
|
||||||
|
Breakpoints::removeBP(bp_normal, selection);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BreakpointMenu::toggleHwBpActionSlot()
|
void BreakpointMenu::toggleHwBpActionSlot()
|
||||||
|
|
|
@ -1059,6 +1059,11 @@ void DisassemblerGraphView::renderFunction(Function & func)
|
||||||
|
|
||||||
//Create render nodes
|
//Create render nodes
|
||||||
this->blocks.clear();
|
this->blocks.clear();
|
||||||
|
if(func.entry == 0)
|
||||||
|
{
|
||||||
|
this->ready = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
for(Block & block : func.blocks)
|
for(Block & block : func.blocks)
|
||||||
{
|
{
|
||||||
this->blocks[block.entry] = DisassemblerBlock(block);
|
this->blocks[block.entry] = DisassemblerBlock(block);
|
||||||
|
|
|
@ -10,13 +10,26 @@ EditBreakpointDialog::EditBreakpointDialog(QWidget* parent, const BRIDGEBP & bp)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint | Qt::MSWindowsFixedSizeDialogHint);
|
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint | Qt::MSWindowsFixedSizeDialogHint);
|
||||||
if(bp.type == bp_dll)
|
switch(bp.type)
|
||||||
{
|
{
|
||||||
setWindowTitle(QString(tr("Edit Breakpoint %1")).arg(QString(bp.mod)));
|
case bp_dll:
|
||||||
}
|
setWindowTitle(tr("Edit DLL Breakpoint %1").arg(QString(bp.mod)));
|
||||||
else
|
break;
|
||||||
{
|
case bp_normal:
|
||||||
setWindowTitle(QString(tr("Edit Breakpoint %1")).arg(getSymbolicName(bp.addr)));
|
setWindowTitle(tr("Edit Breakpoint %1").arg(getSymbolicName(bp.addr)));
|
||||||
|
break;
|
||||||
|
case bp_hardware:
|
||||||
|
setWindowTitle(tr("Edit Hardware Breakpoint %1").arg(getSymbolicName(bp.addr)));
|
||||||
|
break;
|
||||||
|
case bp_memory:
|
||||||
|
setWindowTitle(tr("Edit Memory Breakpoint %1").arg(getSymbolicName(bp.addr)));
|
||||||
|
break;
|
||||||
|
case bp_exception:
|
||||||
|
setWindowTitle(tr("Edit Exception Breakpoint %1").arg(getSymbolicName(bp.addr)));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
setWindowTitle(tr("Edit Breakpoint %1").arg(getSymbolicName(bp.addr)));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
setWindowIcon(DIcon("breakpoint.png"));
|
setWindowIcon(DIcon("breakpoint.png"));
|
||||||
loadFromBp();
|
loadFromBp();
|
||||||
|
|
|
@ -415,32 +415,42 @@ void MainWindow::setupStatusBar()
|
||||||
|
|
||||||
void MainWindow::setupLanguagesMenu()
|
void MainWindow::setupLanguagesMenu()
|
||||||
{
|
{
|
||||||
QDir translationsDir(QString("%1/../translations/").arg(QCoreApplication::applicationDirPath()));
|
|
||||||
QMenu* languageMenu;
|
QMenu* languageMenu;
|
||||||
if(tr("Languages") == QString("Languages"))
|
if(tr("Languages") == QString("Languages"))
|
||||||
languageMenu = new QMenu(QString("Languages"));
|
languageMenu = new QMenu(QString("Languages"));
|
||||||
else
|
else
|
||||||
languageMenu = new QMenu(tr("Languages") + QString(" Languages"), this);
|
languageMenu = new QMenu(tr("Languages") + QString(" Languages"), this);
|
||||||
languageMenu->setIcon(DIcon("codepage.png"));
|
languageMenu->setIcon(DIcon("codepage.png"));
|
||||||
|
|
||||||
QLocale enUS(QLocale::English, QLocale::UnitedStates);
|
QLocale enUS(QLocale::English, QLocale::UnitedStates);
|
||||||
QString wCurrentLocale(currentLocale);
|
|
||||||
QAction* action_enUS = new QAction(QString("[%1] %2 - %3").arg(enUS.name()).arg(enUS.nativeLanguageName()).arg(enUS.nativeCountryName()), languageMenu);
|
QAction* action_enUS = new QAction(QString("[%1] %2 - %3").arg(enUS.name()).arg(enUS.nativeLanguageName()).arg(enUS.nativeCountryName()), languageMenu);
|
||||||
connect(action_enUS, SIGNAL(triggered()), this, SLOT(chooseLanguage()));
|
connect(action_enUS, SIGNAL(triggered()), this, SLOT(chooseLanguage()));
|
||||||
action_enUS->setCheckable(true);
|
action_enUS->setCheckable(true);
|
||||||
action_enUS->setChecked(false);
|
action_enUS->setChecked(false);
|
||||||
languageMenu->addAction(action_enUS);
|
languageMenu->addAction(action_enUS);
|
||||||
|
connect(languageMenu, SIGNAL(aboutToShow()), this, SLOT(setupLanguagesMenu2())); //Load this menu later, since it requires directory scanning.
|
||||||
|
ui->menuOptions->addMenu(languageMenu);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::setupLanguagesMenu2()
|
||||||
|
{
|
||||||
|
QMenu* languageMenu = dynamic_cast<QMenu*>(sender()); //The only sender is languageMenu
|
||||||
|
QAction* action_enUS = languageMenu->actions()[0]; //There is only one action "action_enUS" created by setupLanguagesMenu()
|
||||||
|
QDir translationsDir(QString("%1/../translations/").arg(QCoreApplication::applicationDirPath()));
|
||||||
|
QString wCurrentLocale(currentLocale);
|
||||||
|
|
||||||
if(!translationsDir.exists())
|
if(!translationsDir.exists())
|
||||||
{
|
{
|
||||||
// translations dir do not exist
|
// translations dir do not exist
|
||||||
action_enUS->setChecked(true);
|
action_enUS->setChecked(true);
|
||||||
ui->menuOptions->addMenu(languageMenu);
|
disconnect(languageMenu, SIGNAL(aboutToShow()), this, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(wCurrentLocale == QString("en_US"))
|
if(wCurrentLocale == QString("en_US"))
|
||||||
action_enUS->setChecked(true);
|
action_enUS->setChecked(true);
|
||||||
QStringList filter;
|
QStringList filter;
|
||||||
filter << "x64dbg_*.qm";
|
filter << "x64dbg_*.qm";
|
||||||
QFileInfoList fileList = translationsDir.entryInfoList(filter, QDir::Readable | QDir::Files, QDir::Size);
|
QFileInfoList fileList = translationsDir.entryInfoList(filter, QDir::Readable | QDir::Files, QDir::Size); //Search for all translations
|
||||||
auto allLocales = QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript, QLocale::AnyCountry);
|
auto allLocales = QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript, QLocale::AnyCountry);
|
||||||
for(auto i : fileList)
|
for(auto i : fileList)
|
||||||
{
|
{
|
||||||
|
@ -458,7 +468,7 @@ void MainWindow::setupLanguagesMenu()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ui->menuOptions->addMenu(languageMenu);
|
disconnect(languageMenu, SIGNAL(aboutToShow()), this, 0); //Done. Let's disconnect it to prevent it from initializing twice.
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::closeEvent(QCloseEvent* event)
|
void MainWindow::closeEvent(QCloseEvent* event)
|
||||||
|
|
|
@ -273,6 +273,8 @@ public:
|
||||||
static QString windowTitle;
|
static QString windowTitle;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
void setupLanguagesMenu2();
|
||||||
|
|
||||||
void on_actionFaq_triggered();
|
void on_actionFaq_triggered();
|
||||||
void on_actionReloadStylesheet_triggered();
|
void on_actionReloadStylesheet_triggered();
|
||||||
void on_actionImportSettings_triggered();
|
void on_actionImportSettings_triggered();
|
||||||
|
|
|
@ -19,7 +19,7 @@ SimpleTraceDialog::SimpleTraceDialog(QWidget* parent) :
|
||||||
ui->editLogCondition->setPlaceholderText(tr("Example: eax == 0 && ebx == 0"));
|
ui->editLogCondition->setPlaceholderText(tr("Example: eax == 0 && ebx == 0"));
|
||||||
ui->editCommandText->setPlaceholderText(tr("Example: eax=4;StepOut"));
|
ui->editCommandText->setPlaceholderText(tr("Example: eax=4;StepOut"));
|
||||||
ui->editCommandCondition->setPlaceholderText(tr("Example: eax == 0 && ebx == 0"));
|
ui->editCommandCondition->setPlaceholderText(tr("Example: eax == 0 && ebx == 0"));
|
||||||
ui->editSwitchCondition->setPlaceholderText(tr("Example: eax == 0 && ebx == 0"));
|
ui->editSwitchCondition->setPlaceholderText(tr("Example: mod.party(dis.branchdest(cip)) == 1"));
|
||||||
}
|
}
|
||||||
|
|
||||||
SimpleTraceDialog::~SimpleTraceDialog()
|
SimpleTraceDialog::~SimpleTraceDialog()
|
||||||
|
|
|
@ -485,20 +485,20 @@ void Breakpoints::toggleBPByRemoving(BPXTYPE type, duint va)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Breakpoints::editBP(BPXTYPE type, const QString & addrText, QWidget* widget)
|
bool Breakpoints::editBP(BPXTYPE type, const QString & addrText, QWidget* widget)
|
||||||
{
|
{
|
||||||
BRIDGEBP bridgebp;
|
BRIDGEBP bridgebp;
|
||||||
if(type != bp_dll)
|
if(type != bp_dll)
|
||||||
{
|
{
|
||||||
duint addr = addrText.toULongLong(nullptr, 16);
|
duint addr = addrText.toULongLong(nullptr, 16);
|
||||||
if(!DbgFunctions()->GetBridgeBp(type, addr, &bridgebp))
|
if(!DbgFunctions()->GetBridgeBp(type, addr, &bridgebp))
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
else if(!DbgFunctions()->GetBridgeBp(type, reinterpret_cast<duint>(addrText.toUtf8().constData()), &bridgebp))
|
else if(!DbgFunctions()->GetBridgeBp(type, reinterpret_cast<duint>(addrText.toUtf8().constData()), &bridgebp))
|
||||||
return;
|
return false;
|
||||||
EditBreakpointDialog dialog(widget, bridgebp);
|
EditBreakpointDialog dialog(widget, bridgebp);
|
||||||
if(dialog.exec() != QDialog::Accepted)
|
if(dialog.exec() != QDialog::Accepted)
|
||||||
return;
|
return false;
|
||||||
auto bp = dialog.getBp();
|
auto bp = dialog.getBp();
|
||||||
auto exec = [](const QString & command)
|
auto exec = [](const QString & command)
|
||||||
{
|
{
|
||||||
|
@ -567,7 +567,8 @@ void Breakpoints::editBP(BPXTYPE type, const QString & addrText, QWidget* widget
|
||||||
exec(QString("SetExceptionBreakpointSingleshoot %1, %2").arg(addrText).arg(bp.singleshoot));
|
exec(QString("SetExceptionBreakpointSingleshoot %1, %2").arg(addrText).arg(bp.singleshoot));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
GuiUpdateBreakpointsView();
|
GuiUpdateBreakpointsView();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@ public:
|
||||||
static void toggleBPByRemoving(BPXTYPE type, duint va);
|
static void toggleBPByRemoving(BPXTYPE type, duint va);
|
||||||
static BPXSTATE BPState(BPXTYPE type, duint va);
|
static BPXSTATE BPState(BPXTYPE type, duint va);
|
||||||
static bool BPTrival(BPXTYPE type, duint va);
|
static bool BPTrival(BPXTYPE type, duint va);
|
||||||
static void editBP(BPXTYPE type, const QString & addrText, QWidget* widget);
|
static bool editBP(BPXTYPE type, const QString & addrText, QWidget* widget);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // BREAKPOINTS_H
|
#endif // BREAKPOINTS_H
|
||||||
|
|
Loading…
Reference in New Issue