diff --git a/src/SeerDebugDialog.cpp b/src/SeerDebugDialog.cpp
index 85faf2f..5bc2cb2 100644
--- a/src/SeerDebugDialog.cpp
+++ b/src/SeerDebugDialog.cpp
@@ -37,7 +37,10 @@ SeerDebugDialog::SeerDebugDialog (QWidget* parent) : QDialog(parent) {
QObject::connect(loadCoreFilenameToolButton, &QToolButton::clicked, this, &SeerDebugDialog::handleLoadCoreFilenameToolButton);
QObject::connect(breakpointInFunctionLineEdit, &QLineEdit::textChanged, this, &SeerDebugDialog::handleBreakpointInFunctionLineEdit);
QObject::connect(attachProgramPidToolButton, &QToolButton::clicked, this, &SeerDebugDialog::handleProgramPidToolButton);
- QObject::connect(helpCoreToolButton, &QToolButton::clicked, this, &SeerDebugDialog::handleHelpCoreToolButtonClicked);
+ QObject::connect(helpRunToolButton, &QToolButton::clicked, this, &SeerDebugDialog::handleHelpRunToolButtonClicked);
+ QObject::connect(helpAttachToolButton, &QToolButton::clicked, this, &SeerDebugDialog::handleHelpAttachToolButtonClicked);
+ QObject::connect(helpConnectToolButton, &QToolButton::clicked, this, &SeerDebugDialog::handleHelpConnectToolButtonClicked);
+ QObject::connect(helpCorefileToolButton, &QToolButton::clicked, this, &SeerDebugDialog::handleHelpCorefileToolButtonClicked);
#if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))
QObject::connect(runModeTabWidget, &QTabWidget::currentChanged, this, &SeerDebugDialog::handleRunModeChanged);
@@ -343,34 +346,6 @@ void SeerDebugDialog::handleRunModeChanged (int id) {
executableWorkingDirectoryLineEdit->setEnabled(false);
executableWorkingDirectoryToolButton->setEnabled(false);
- // ID == 0 RUN/START
- runProgramArgumentsLabel->setEnabled(false);
- runProgramArgumentsLineEdit->setEnabled(false);
- loadBreakpointsFilenameLabel->setEnabled(false);
- loadBreakpointsFilenameLineEdit->setEnabled(false);
- loadBreakpointsFilenameToolButton->setEnabled(false);
- noBreakpointRadioButton->setEnabled(false);
- breakpointInMainRadioButton->setEnabled(false);
- breakpointInFunctionRadioButton->setEnabled(false);
- breakpointInFunctionLineEdit->setEnabled(false);
- showAsseblyTabCheckBox->setEnabled(false);
- randomizeStartAddressCheckBox->setEnabled(false);
- nonStopModeCheckBox->setEnabled(false);
-
- // ID == 1 ATTACH
- attachProgramPidLabel->setEnabled(false);
- attachProgramPidLineEdit->setEnabled(false);
- attachProgramPidToolButton->setEnabled(false);
-
- // ID == 2 CONNECT
- connectProgramHostPortLabel->setEnabled(false);
- connectProgramHostPortLineEdit->setEnabled(false);
-
- // ID == 3 CORE
- loadCoreFilenameLabel->setEnabled(false);
- loadCoreFilenameLineEdit->setEnabled(false);
- loadCoreFilenameToolButton->setEnabled(false);
-
//
// Enable the newly selected one.
//
@@ -383,18 +358,6 @@ void SeerDebugDialog::handleRunModeChanged (int id) {
executableSymbolNameToolButton->setEnabled(true);
executableWorkingDirectoryLineEdit->setEnabled(true);
executableWorkingDirectoryToolButton->setEnabled(true);
- runProgramArgumentsLabel->setEnabled(true);
- runProgramArgumentsLineEdit->setEnabled(true);
- loadBreakpointsFilenameLabel->setEnabled(true);
- loadBreakpointsFilenameLineEdit->setEnabled(true);
- loadBreakpointsFilenameToolButton->setEnabled(true);
- noBreakpointRadioButton->setEnabled(true);
- breakpointInMainRadioButton->setEnabled(true);
- breakpointInFunctionRadioButton->setEnabled(true);
- breakpointInFunctionLineEdit->setEnabled(true);
- showAsseblyTabCheckBox->setEnabled(true);
- randomizeStartAddressCheckBox->setEnabled(true);
- nonStopModeCheckBox->setEnabled(true);
}
// ID == 1 ATTACH
@@ -403,30 +366,46 @@ void SeerDebugDialog::handleRunModeChanged (int id) {
executableNameToolButton->setEnabled(true);
executableSymbolNameLineEdit->setEnabled(true);
executableSymbolNameToolButton->setEnabled(true);
- attachProgramPidLabel->setEnabled(true);
- attachProgramPidLineEdit->setEnabled(true);
- attachProgramPidToolButton->setEnabled(true);
}
// ID == 2 CONNECT
if (id == 2) {
executableSymbolNameLineEdit->setEnabled(true);
executableSymbolNameToolButton->setEnabled(true);
- connectProgramHostPortLabel->setEnabled(true);
- connectProgramHostPortLineEdit->setEnabled(true);
}
// ID == 3 CORE
if (id == 3) {
executableSymbolNameLineEdit->setEnabled(true);
executableSymbolNameToolButton->setEnabled(true);
- loadCoreFilenameLabel->setEnabled(true);
- loadCoreFilenameLineEdit->setEnabled(true);
- loadCoreFilenameToolButton->setEnabled(true);
}
}
-void SeerDebugDialog::handleHelpCoreToolButtonClicked () {
+void SeerDebugDialog::handleHelpRunToolButtonClicked () {
+
+ SeerHelpPageDialog* help = new SeerHelpPageDialog(this);
+ help->loadFile(":/seer/resources/help/RunDebugMode.md");
+ help->show();
+ help->raise();
+}
+
+void SeerDebugDialog::handleHelpAttachToolButtonClicked () {
+
+ SeerHelpPageDialog* help = new SeerHelpPageDialog(this);
+ help->loadFile(":/seer/resources/help/AttachDebugMode.md");
+ help->show();
+ help->raise();
+}
+
+void SeerDebugDialog::handleHelpConnectToolButtonClicked () {
+
+ SeerHelpPageDialog* help = new SeerHelpPageDialog(this);
+ help->loadFile(":/seer/resources/help/ConnectDebugMode.md");
+ help->show();
+ help->raise();
+}
+
+void SeerDebugDialog::handleHelpCorefileToolButtonClicked () {
SeerHelpPageDialog* help = new SeerHelpPageDialog(this);
help->loadFile(":/seer/resources/help/CorefileDebugMode.md");
diff --git a/src/SeerDebugDialog.h b/src/SeerDebugDialog.h
index b050204..9d7e0ac 100644
--- a/src/SeerDebugDialog.h
+++ b/src/SeerDebugDialog.h
@@ -67,7 +67,10 @@ class SeerDebugDialog : public QDialog, protected Ui::SeerDebugDialogForm {
void handleRunModeChanged (int id);
private slots:
- void handleHelpCoreToolButtonClicked ();
+ void handleHelpRunToolButtonClicked ();
+ void handleHelpAttachToolButtonClicked ();
+ void handleHelpConnectToolButtonClicked ();
+ void handleHelpCorefileToolButtonClicked ();
protected:
void writeSettings ();
diff --git a/src/SeerDebugDialog.ui b/src/SeerDebugDialog.ui
index eda219f..c6efed8 100644
--- a/src/SeerDebugDialog.ui
+++ b/src/SeerDebugDialog.ui
@@ -655,7 +655,7 @@
-
-
+
Help for Corefile launch method.
diff --git a/src/SeerHelpPageDialog.cpp b/src/SeerHelpPageDialog.cpp
index c7eb028..094a12d 100644
--- a/src/SeerHelpPageDialog.cpp
+++ b/src/SeerHelpPageDialog.cpp
@@ -18,12 +18,9 @@ SeerHelpPageDialog::SeerHelpPageDialog(QDialog* parent) : QDialog(parent) {
textBrowser->setOpenExternalLinks(true);
- QAbstractButton* printToolButton = new QToolButton;
- printToolButton->setIcon(QIcon(":/seer/resources/RelaxLightIcons/document-print.svg"));
-
- buttonBox->addButton(printToolButton, QDialogButtonBox::NoRole);
-
// Connect things.
+ QObject::connect(printToolButton, &QToolButton::clicked, this, &SeerHelpPageDialog::handlePrintToolButton);
+ QObject::connect(okPushButton, &QPushButton::clicked, this, &SeerHelpPageDialog::handleOkPushButton);
// Restore window settings.
readSettings();
@@ -57,6 +54,26 @@ void SeerHelpPageDialog::loadText (const QString& text) {
textBrowser->moveCursor(QTextCursor::Start);
}
+void SeerHelpPageDialog::handlePrintToolButton () {
+
+ QPrinter printer;
+
+ QPrintDialog* dlg = new QPrintDialog(&printer, this);
+
+ if (dlg->exec() != QDialog::Accepted) {
+ return;
+ }
+
+ QTextDocument* document = textBrowser->document();
+
+ document->print(&printer);
+}
+
+void SeerHelpPageDialog::handleOkPushButton () {
+
+ done(QDialog::Accepted);
+}
+
void SeerHelpPageDialog::writeSettings() {
QSettings settings;
diff --git a/src/SeerHelpPageDialog.h b/src/SeerHelpPageDialog.h
index 917441d..80c3b40 100644
--- a/src/SeerHelpPageDialog.h
+++ b/src/SeerHelpPageDialog.h
@@ -22,6 +22,9 @@ class SeerHelpPageDialog: public QDialog, protected Ui::SeerHelpPageDialogForm {
void resizeEvent (QResizeEvent* event);
protected slots:
+ void handlePrintToolButton ();
+ void handleOkPushButton ();
+
private:
};
diff --git a/src/SeerHelpPageDialog.ui b/src/SeerHelpPageDialog.ui
index 2df9df0..416f9dc 100644
--- a/src/SeerHelpPageDialog.ui
+++ b/src/SeerHelpPageDialog.ui
@@ -13,7 +13,7 @@
Dialog
-
+
-
-
@@ -27,52 +27,52 @@
-
-
-
- Qt::Horizontal
-
-
- QDialogButtonBox::Ok
-
-
+
+
-
+
+
+ Print Help page.
+
+
+
+
+
+
+ :/seer/resources/RelaxLightIcons/document-print.svg:/seer/resources/RelaxLightIcons/document-print.svg
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Dismiss Help page.
+
+
+ OK
+
+
+
+
-
-
-
- buttonBox
- accepted()
- SeerHelpPageDialogForm
- accept()
-
-
- 248
- 254
-
-
- 157
- 274
-
-
-
-
- buttonBox
- rejected()
- SeerHelpPageDialogForm
- reject()
-
-
- 316
- 260
-
-
- 286
- 274
-
-
-
-
+
+
+
+
diff --git a/src/resource.qrc b/src/resource.qrc
index f50f1a4..2dc6ef1 100644
--- a/src/resource.qrc
+++ b/src/resource.qrc
@@ -62,6 +62,9 @@
resources/help/CodeManager.md
resources/help/BreakpointGdbSeerManager.md
resources/help/MainWindow.md
+ resources/help/RunDebugMode.md
+ resources/help/AttachDebugMode.md
+ resources/help/ConnectDebugMode.md
resources/help/CorefileDebugMode.md
diff --git a/src/resources/help/AttachDebugMode.md b/src/resources/help/AttachDebugMode.md
new file mode 100644
index 0000000..1644c86
--- /dev/null
+++ b/src/resources/help/AttachDebugMode.md
@@ -0,0 +1,23 @@
+## Attach debug mode
+
+### Introduction
+
+This mode allows Seer to debug a locally running process by attaching to the PID.
+
+### Requirements
+In this mode, Seer needs:
+
+* The executable
+* Optional symbol file if the executable doesn't have debug information
+* The PID of the process.
+
+### What can you do?
+In this mode, Seer will attach to the process and immediately interrupt it with a SIGINT.
+Seer will show the source and line number where the program was interrupted. The program's stack and threads are shown.
+
+From this point, you can debug the process as normal (stepping and setting breakpoints, etc...)
+
+### References
+
+
+
diff --git a/src/resources/help/ConnectDebugMode.md b/src/resources/help/ConnectDebugMode.md
new file mode 100644
index 0000000..acac8bb
--- /dev/null
+++ b/src/resources/help/ConnectDebugMode.md
@@ -0,0 +1,31 @@
+## Connect debug mode
+
+### Introduction
+
+This mode allows Seer to a local or remote process that was started with gdbserver (or other gdb servers).
+
+Typically, the gdbserver starts the process and interrupts it before anything happens. It then waits for
+something to connect to it. When Seer connects with it, the process is ready to continue executing.
+
+
+### Requirements
+In this mode, Seer needs:
+
+* Optional symbol file if the executable doesn't have debug information
+* How to look for the gdbserver (machine and port)
+* Optional gdb commands to execute before and after Seer connects to the gdbserver.
+
+### What can you do?
+In this mode, Seer will connect to the process via the gdbserver. Typically you set breakpoints first then
+tell the process to continue. From this point, you can debug the process as normal (stepping and setting breakpoints, etc...)
+
+
+### References
+
+Check references for gdbserver and other gdb servers.
+
+* gdbserver
+* valgrind vgdb
+* servers for embedded development
+
+
diff --git a/src/resources/help/CorefileDebugMode.md b/src/resources/help/CorefileDebugMode.md
index 3339d9b..ea38f35 100644
--- a/src/resources/help/CorefileDebugMode.md
+++ b/src/resources/help/CorefileDebugMode.md
@@ -5,7 +5,7 @@
This mode allows Seer to debug corefiles. Corefiles are files that are the state of a process that exits unexepectedly
via a signal (SIGTERM, SIGSEGV, etc...)
-### Needed files
+### Requirements
In this mode, Seer needs:
* The executable
diff --git a/src/resources/help/RunDebugMode.md b/src/resources/help/RunDebugMode.md
new file mode 100644
index 0000000..5339fbf
--- /dev/null
+++ b/src/resources/help/RunDebugMode.md
@@ -0,0 +1,25 @@
+## Run debug mode
+
+### Introduction
+This mode allows Seer to debug a program by starting the program itself. This is the most typical
+way of using Seer.
+
+### Requirements
+In this mode, Seer needs:
+
+* The executable
+* Optional symbol file if the executable doesn't have debug information
+* Optional working directory to run the program from
+* Arguments to run the program with
+* Various Seer/gdb options to start the program by
+
+### What can you do?
+If 'start' is selected, the program is started and breaks in 'main'.
+
+If 'run' is selected, the program is started and executes without any breakpoints unless they are
+specified in the optional breakpoint file.
+
+From this point, you can debug the process as normal (stepping and setting breakpoints, etc...)
+
+### References
+