- enhancement: If executable doesn't have symbol table, inform user and stop.

- enhancement: If breakpoint is setted but executable doesn't have debug info ,inform user and stop.
  - enhancement: If current compiler set has "strip addition infos(-s)" enabled, inform user and stop.
This commit is contained in:
Roy Qu 2023-02-18 12:08:03 +08:00
parent a91dc12519
commit 24734bfb28
16 changed files with 1065 additions and 885 deletions

View File

@ -38,6 +38,11 @@ Red Panda C++ Version 2.12
- enhancement: Correctly handle high-precision mouse wheel / touchpad in editors.
- enhancement: Greatly reduce time to open/edit big files.
- enhancement: Reduce flicker when editing big files.
- enhancement: If executable doesn't have symbol table, inform user and stop.
- enhancement: If breakpoint is setted but executable doesn't have debug info inform user and stop.
- enhancement: If current compiler set has "strip addition infos(-s)" enabled, inform user and stop.
Red Panda C++ Version 2.11

View File

@ -46,12 +46,6 @@
#define COMPILER_OPTION_ON "on"
#define COMPILER_OPTION_OFF ""
enum class CompilerSetType {
RELEASE,
DEBUG,
PROFILING
};
enum class CompilerType {
GCC,
GCC_UTF8,

View File

@ -194,6 +194,10 @@ bool Debugger::start(int compilerSetIndex, const QString& inferior, const QStrin
&MainWindow::removeActiveBreakpoints);
connect(mReader, &DebugReader::inferiorStopped,pMainWindow,
&MainWindow::setActiveBreakpoint);
connect(mReader, &DebugReader::errorNoSymbolTable,pMainWindow,
&MainWindow::stopDebugForNoSymbolTable);
connect(mReader, &DebugReader::errorNoSourceFile,pMainWindow,
&MainWindow::stopDebugForNoSourceFile);
connect(mReader, &DebugReader::inferiorStopped,this,
&Debugger::refreshAll);
@ -1167,7 +1171,18 @@ void DebugReader::processExecAsyncRecord(const QByteArray &line)
void DebugReader::processError(const QByteArray &errorLine)
{
mConsoleOutput.append(QString::fromLocal8Bit(errorLine));
QString s = QString::fromLocal8Bit(errorLine);
mConsoleOutput.append(s);
int idx=s.indexOf(",msg=\"No symbol table is loaded");
if (idx>0) {
emit errorNoSymbolTable();
return;
}
idx=s.indexOf(",msg=\"No source file named ");
if (idx>0) {
emit errorNoSourceFile();
return;
}
}
void DebugReader::processResultRecord(const QByteArray &line)

View File

@ -516,6 +516,8 @@ signals:
void cmdStarted();
void cmdFinished();
void errorNoSymbolTable();
void errorNoSourceFile();
void breakpointInfoGetted(const QString& filename, int line, int number);
void inferiorContinued();
void inferiorStopped(const QString& filename, int line, bool setFocus);

View File

@ -1981,6 +1981,7 @@ void Editor::onTooltipTimer()
void Editor::onEndParsing()
{
qDebug()<<"yes";
mIdentCache.clear();
invalidate();
}

View File

@ -2090,19 +2090,33 @@ void MainWindow::debug()
QStringList binDirs;
switch(getCompileTarget()) {
case CompileTarget::Project:
compilerSet=pSettings->compilerSets().getSet(mProject->options().compilerSet);
if (!compilerSet)
compilerSet = pSettings->compilerSets().defaultSet();
binDirs = mProject->binDirs();
// Check if we enabled proper options
debugEnabled = mProject->getCompileOption(CC_CMD_OPT_DEBUG_INFO) == COMPILER_OPTION_ON;
stripEnabled = mProject->getCompileOption(LINK_CMD_OPT_STRIP_EXE) == COMPILER_OPTION_ON;
if (stripEnabled) {
QMessageBox::critical(this,
tr("Can't Debug"),
tr("Your compiler set's \"Strip executable (-s)\" options is turnned on")
+"<BR /><BR />"
+tr("The generated executable doesn't have symbol table, and can't be debugged.")
+"<BR /><BR />"
+tr("Please correct it, recompile and retry debug.")
);
return;
}
// Ask the user if he wants to enable debugging...
if ((!debugEnabled) || stripEnabled) {
if (compilerSet->name().endsWith("Debug") && !debugEnabled) {
if (QMessageBox::question(this,
tr("Enable debugging"),
tr("You are not using a Debug compiler setting.")
tr("Correct compiler setting"),
tr("You are using a Debug compiler set with wrong compile/link settings: ")
+"<BR /><BR />"
+tr("Please use a Debug compiler set, or enable the \"generate debugging info (-g3)\" and disable the \"strip additional info (-s)\" options in the compiler settings.")
+tr(" - \"Generate debug info (-g3)\" should be turned on")
+"<BR /><BR />"
+tr("Do you want to set it now?")
+tr("Do you want to correct it now?")
) == QMessageBox::Yes) {
changeOptions(
SettingsDialog::tr("Compiler Set"),
@ -2183,15 +2197,28 @@ void MainWindow::debug()
// Check if we enabled proper options
debugEnabled = compilerSet->getCompileOptionValue(CC_CMD_OPT_DEBUG_INFO) == COMPILER_OPTION_ON;
stripEnabled = compilerSet->getCompileOptionValue(LINK_CMD_OPT_STRIP_EXE) == COMPILER_OPTION_ON;
if (stripEnabled) {
QMessageBox::critical(this,
tr("Can't Debug"),
tr("Your compiler set's \"Strip executable (-s)\" options is turnned on")
+"<BR /><BR />"
+tr("The generated executable doesn't have symbol table, and can't be debugged.")
+"<BR /><BR />"
+tr("Please correct it, recompile and retry debug.")
);
return;
}
// Ask the user if he wants to enable debugging...
if ((!debugEnabled) || stripEnabled) {
if (compilerSet->name().endsWith("Debug") && !debugEnabled) {
if (QMessageBox::question(this,
tr("Enable debugging"),
tr("You are not using a Debug compiler setting.")
tr("You are using a Debug compiler set with wrong compile/link settings: ")
+"<BR /><BR />"
+tr("Please choose a Debug compiler set in the toolbarin the compiler set settings's \"settings\" page.")
+tr(" - \"Generate debug info (-g3)\" should be turned on")
+"<BR /><BR />"
+tr("Do you want to set it now?")
+tr(" - \"Strip executable (-s)\" should be turned off")
+"<BR /><BR />"
+tr("Do you want to correct it now?")
) == QMessageBox::Yes) {
changeOptions(
SettingsDialog::tr("Compiler Set"),
@ -2285,7 +2312,7 @@ void MainWindow::debug()
mDebugger->sendCommand("-environment-cd", QString("\"%1\"").arg(extractFileDir(filePath))); // restore working directory
if (pSettings->debugger().useGDBServer()) {
mDebugger->sendCommand("-target-select",QString("remote localhost:%1").arg(pSettings->debugger().GDBServerPort()));
if (!debugInferiorhasBreakpoint()) {
if (!debugInferiorhasBreakpoint() || !debugEnabled) {
mDebugger->sendCommand("-break-insert","-t main");
}
if (pSettings->executor().useParams()) {
@ -2304,7 +2331,6 @@ void MainWindow::debug()
} else {
mDebugger->sendCommand("-exec-run","");
}
}
}
@ -4909,6 +4935,31 @@ void MainWindow::enableDebugActions()
}
}
void MainWindow::stopDebugForNoSymbolTable()
{
mDebugger->stop();
QMessageBox::critical(this,
tr("Debug Failed"),
tr("The executable doesn't have symbol table, and can't be debugged.")
+"<BR /><BR />"
+tr("Please turn off your compiler set's \"Strip executable (-s)\" option, recompile and retry debug.")
);
}
void MainWindow::stopDebugForNoSourceFile()
{
mDebugger->stop();
QMessageBox::critical(this,
tr("Debug Failed"),
tr("The executable doesn't have enough debug info to set breakpoint.")
+"<BR /><BR />"
+tr("Please choose a Debug compiler set in the toolbar, or turn on your compiler set's \"Generate debug info (-g3)\" option in the options dialog.")
+tr("Then recompile and retry debug.")
+"<BR /><BR/>"
+tr("Or you can remove all breakpoints, open cpu info dialog, and try debug machine codes.")
);
}
void MainWindow::onTodoParsingFile(const QString& filename)
{
mTodoModel.removeTodosForFile(filename);
@ -9433,7 +9484,6 @@ void MainWindow::on_actionNew_GAS_File_triggered()
newEditor("s");
}
void MainWindow::on_actionGNU_Assembler_Manual_triggered()
{
QDesktopServices::openUrl(QUrl("https://sourceware.org/binutils/docs/as/index.html"));

View File

@ -250,6 +250,8 @@ public slots:
void onEditorTabContextMenu(QTabWidget* tabWidget, const QPoint& pos);
void disableDebugActions();
void enableDebugActions();
void stopDebugForNoSymbolTable();
void stopDebugForNoSourceFile();
void onTodoParsingFile(const QString& filename);
void onTodoParseStarted();
void onTodoFound(const QString& filename, int lineNo, int ch, const QString& line);

View File

@ -907,7 +907,7 @@ void Project::setCompilerSet(int compilerSetIndex)
{
if (mOptions.compilerSet != compilerSetIndex) {
mOptions.compilerSet = compilerSetIndex;
updateCompilerSetType();
updateCompilerSetting();
setModified(true);
}
}
@ -923,7 +923,7 @@ bool Project::assignTemplate(const std::shared_ptr<ProjectTemplate> aTemplate, b
mOptions = aTemplate->options();
mOptions.compilerSet = pSettings->compilerSets().defaultIndex();
mOptions.isCpp = useCpp;
updateCompilerSetType();
updateCompilerSetting();
mOptions.icon = aTemplate->icon();
QTextCodec* codec=QTextCodec::codecForName(mOptions.encoding);
@ -1179,7 +1179,6 @@ void Project::saveOptions()
ini.SetLongValue("Project","IncludeVersionInfo", mOptions.includeVersionInfo);
ini.SetLongValue("Project","SupportXPThemes", mOptions.supportXPThemes);
ini.SetLongValue("Project","CompilerSet", mOptions.compilerSet);
ini.SetLongValue("Project","CompilerSetType", (int)mOptions.compilerSetType);
ini.Delete("Project","CompilerSettings"); // remove old compiler settings
ini.Delete("CompilerSettings",nullptr); // remove old compiler settings
foreach (const QString& key, mOptions.compilerOptions.keys()) {
@ -2111,12 +2110,6 @@ void Project::loadOptions(SimpleIni& ini)
mOptions.execEncoding = ini.GetValue("Project","ExecEncoding", ENCODING_SYSTEM_DEFAULT);
mOptions.addCharset = ini.GetBoolValue("Project", "AddCharset", true);
int val=ini.GetLongValue("Project","CompilerSetType",-1);
if (val<0) {
updateCompilerSetType();
} else {
mOptions.compilerSetType=(CompilerSetType)val;
}
bool useUTF8 = ini.GetBoolValue("Project", "UseUTF8", false);
if (useUTF8) {
mOptions.encoding = ini.GetValue("Project","Encoding", ENCODING_UTF8);
@ -2255,15 +2248,13 @@ void Project::updateFolderNode(PProjectModelNode node)
}
}
void Project::updateCompilerSetType()
void Project::updateCompilerSetting()
{
Settings::PCompilerSet defaultSet = pSettings->compilerSets().getSet(mOptions.compilerSet);
if (defaultSet) {
mOptions.compilerSetType=defaultSet->compilerSetType();
mOptions.staticLink = defaultSet->staticLink();
mOptions.compilerOptions = defaultSet->compileOptions();
} else {
mOptions.compilerSetType=CompilerSetType::DEBUG;
mOptions.staticLink = false;
}
}

View File

@ -340,7 +340,7 @@ private:
void open();
void removeFolderRecurse(PProjectModelNode node);
void updateFolderNode(PProjectModelNode node);
void updateCompilerSetType();
void updateCompilerSetting();
private:
QHash<QString,PProjectUnit> mUnits;

View File

@ -50,7 +50,6 @@ ProjectOptions::ProjectOptions()
includeVersionInfo = false;
supportXPThemes = false;
compilerSet = 0;
compilerSetType = CompilerSetType::DEBUG;
staticLink = true;
addCharset = true;
modelType = ProjectModelType::FileSystem;

View File

@ -90,7 +90,6 @@ struct ProjectOptions{
bool includeVersionInfo;
bool supportXPThemes;
int compilerSet;
CompilerSetType compilerSetType;
QMap<QString,QString> compilerOptions;
ProjectVersionInfo versionInfo;
QString cmdLineArgs;

View File

@ -1660,7 +1660,6 @@ void Settings::Editor::setTabToSpaces(bool tabToSpaces)
Settings::CompilerSet::CompilerSet():
mFullLoaded(false),
mCompilerType(CompilerType::Unknown),
mCompilerSetType(CompilerSetType::RELEASE),
mAutoAddCharsetParams(false),
mExecCharset(ENCODING_SYSTEM_DEFAULT),
mStaticLink(false),
@ -1726,7 +1725,6 @@ Settings::CompilerSet::CompilerSet(const Settings::CompilerSet &set):
mName(set.mName),
mTarget(set.mTarget),
mCompilerType(set.mCompilerType),
mCompilerSetType(set.mCompilerSetType),
mUseCustomCompileParams(set.mUseCustomCompileParams),
mUseCustomLinkParams(set.mUseCustomLinkParams),
@ -2680,16 +2678,6 @@ void Settings::CompilerSet::setDebugServer(const QString &newDebugServer)
mDebugServer = newDebugServer;
}
CompilerSetType Settings::CompilerSet::compilerSetType() const
{
return mCompilerSetType;
}
void Settings::CompilerSet::setCompilerSetType(CompilerSetType newCompilerSetType)
{
mCompilerSetType = newCompilerSetType;
}
void Settings::CompilerSet::setCompilerType(CompilerType newCompilerType)
{
mCompilerType = newCompilerType;
@ -2786,13 +2774,11 @@ bool Settings::CompilerSets::addSets(const QString &folder, const QString& c_pro
PCompilerSet set= addSet(baseSet);
platformName = "32-bit";
set->setName(baseName + " " + platformName + " Release");
set->setCompilerSetType(CompilerSetType::RELEASE);
set64_32Options(set);
setReleaseOptions(set);
set = addSet(baseSet);
set->setName(baseName + " " + platformName + " Debug");
set->setCompilerSetType(CompilerSetType::DEBUG);
set64_32Options(set);
setDebugOptions(set);
}
@ -2804,19 +2790,16 @@ bool Settings::CompilerSets::addSets(const QString &folder, const QString& c_pro
PCompilerSet debugSet = addSet(baseSet);
debugSet->setName(baseName + " " + platformName + " Debug");
debugSet->setCompilerSetType(CompilerSetType::DEBUG);
setDebugOptions(debugSet);
// Enable ASan compiler set if it is supported and gdb works with ASan.
#ifdef Q_OS_LINUX
PCompilerSet debugAsanSet = addSet(baseSet);
debugAsanSet->setName(baseName + " " + platformName + " Debug with ASan");
debugAsanSet->setCompilerSetType(CompilerSetType::DEBUG);
setDebugOptions(debugAsanSet, true);
#endif
baseSet->setName(baseName + " " + platformName + " Release");
baseSet->setCompilerSetType(CompilerSetType::RELEASE);
setReleaseOptions(baseSet);
// baseSet = addSet(folder);
@ -3129,7 +3112,6 @@ void Settings::CompilerSets::saveSet(int index)
mSettings->mSettings.setValue("Name", pSet->name());
mSettings->mSettings.setValue("Target", pSet->target());
mSettings->mSettings.setValue("CompilerType", (int)pSet->compilerType());
mSettings->mSettings.setValue("CompilerSetType", (int)pSet->compilerSetType());
// Paths
savePathList("Bins",pSet->binDirs());
@ -3193,8 +3175,6 @@ Settings::PCompilerSet Settings::CompilerSets::loadSet(int index)
pSet->setCompilerType((CompilerType)mSettings->mSettings.value("CompilerType").toInt());
}
pSet->setCompilerSetType((CompilerSetType)mSettings->mSettings.value("CompilerSetType").toInt());
// Load extra 'general' options
pSet->setUseCustomCompileParams(mSettings->mSettings.value("useCustomCompileParams", false).toBool());
pSet->setCustomCompileParams(mSettings->mSettings.value("customCompileParams").toString());

View File

@ -1381,9 +1381,6 @@ public:
void setCompilerType(CompilerType newCompilerType);
CompilerSetType compilerSetType() const;
void setCompilerSetType(CompilerSetType newCompilerSetType);
const QString &execCharset() const;
void setExecCharset(const QString &newExecCharset);
@ -1448,7 +1445,6 @@ public:
QString mName; // "TDM-GCC 4.7.1 Release"
QString mTarget; // 'X86_64' / 'i686'
CompilerType mCompilerType; // 'Clang' / 'GCC'
CompilerSetType mCompilerSetType; // RELEASE/ DEBUG/ Profile
// User settings
bool mUseCustomCompileParams;

View File

@ -605,7 +605,7 @@
</message>
<message>
<source>Choose Profiler</source>
<translation>Escolher levantador de perfil</translation>
<translation type="vanished">Escolher levantador de perfil</translation>
</message>
<message>
<source>C++ Compiler(g++)</source>
@ -617,7 +617,7 @@
</message>
<message>
<source>Profiler(gprof)</source>
<translation>Profiler (gprof)</translation>
<translation type="vanished">Profiler (gprof)</translation>
</message>
<message>
<source>make</source>
@ -751,10 +751,6 @@
<source>Locate windres</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Locate gprof</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Assembler</source>
<translation type="unfinished">Assembler</translation>
@ -3506,11 +3502,11 @@
</message>
<message>
<source>Compile &amp; Run</source>
<translation>Compilar e executar</translation>
<translation type="vanished">Compilar e executar</translation>
</message>
<message>
<source>F11</source>
<translation>F11</translation>
<translation type="vanished">F11</translation>
</message>
<message>
<source>Rebuild All</source>
@ -4118,11 +4114,11 @@
</message>
<message>
<source>Compile now?</source>
<translation>Compilar agora?</translation>
<translation type="vanished">Compilar agora?</translation>
</message>
<message>
<source>Source file is more recent than executable.</source>
<translation>Arquivo fonte é mais recente que o executável.</translation>
<translation type="vanished">Arquivo fonte é mais recente que o executável.</translation>
</message>
<message>
<source>Recompile now?</source>
@ -4186,7 +4182,7 @@
</message>
<message>
<source>Recompile?</source>
<translation>Recompilar?</translation>
<translation type="vanished">Recompilar?</translation>
</message>
<message>
<source>Auto Save Error</source>
@ -4920,22 +4916,6 @@
<source>FPS Problem Set Files (*.fps;*.xml)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Do you want to set it now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>You are not using a Debug compiler setting.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Please use a Debug compiler set, or enable the &quot;generate debugging info (-g3)&quot; and disable the &quot;strip additional info (-s)&quot; options in the compiler settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Please choose a Debug compiler set in the toolbar, or enable the &quot;generate debugging info (-g3)&quot; and disable the &quot;strip additional info (-s)&quot; options in the compiler set settings&apos;s &quot;settings&quot; page.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Trim trailing spaces</source>
<translation type="unfinished"></translation>
@ -5004,6 +4984,70 @@
<source>GNU Assembler Manual</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Correct compiler setting</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>You are using a Debug compiler set with wrong compile/link settings: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source> - &quot;Generate debug info (-g3)&quot; should be turned on</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> - &quot;Strip executable (-s)&quot; should be turned off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Do you want to correct it now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Can&apos;t Debug</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Your compiler set&apos;s &quot;Strip executable (-s)&quot; options is turnned on</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Please correct it, recompile and retry debug.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The generated executable doesn&apos;t have symbol table, and can&apos;t be debugged.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Debug Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The executable doesn&apos;t have symbol table, and can&apos;t be debugged.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Please turn off your compiler set&apos;s &quot;Strip executable (-s)&quot; option, recompile and retry debug.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The executable doesn&apos;t have enough debug info to set breakpoint.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Then recompile and retry debug.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Or you can remove all breakpoints, open cpu info dialog, and try debug machine codes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Please choose a Debug compiler set in the toolbar, or turn on your compiler set&apos;s &quot;Generate debug info (-g3)&quot; option in the options dialog.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NewClassDialog</name>

File diff suppressed because it is too large Load Diff

View File

@ -512,10 +512,6 @@
<source>C Compiler(gcc)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Choose Profiler</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>C++ Compiler(g++)</source>
<translation type="unfinished"></translation>
@ -524,10 +520,6 @@
<source>Choose C++ Compiler</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Profiler(gprof)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>make</source>
<translation type="unfinished"></translation>
@ -660,10 +652,6 @@
<source>Locate windres</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Locate gprof</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Assembler</source>
<translation type="unfinished"></translation>
@ -3353,14 +3341,6 @@
<source>Convert to UTF-8</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Compile &amp; Run</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>F11</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Rebuild All</source>
<translation type="unfinished"></translation>
@ -3949,14 +3929,6 @@
<source>Source file is not compiled.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Compile now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Source file is more recent than executable.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No compiler set</source>
<translation type="unfinished"></translation>
@ -3993,10 +3965,6 @@
<source>Host application file &apos;%1&apos; doesn&apos;t exist.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Recompile?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto Save Error</source>
<translation type="unfinished"></translation>
@ -4705,22 +4673,6 @@
<source>FPS Problem Set Files (*.fps;*.xml)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Do you want to set it now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>You are not using a Debug compiler setting.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Please use a Debug compiler set, or enable the &quot;generate debugging info (-g3)&quot; and disable the &quot;strip additional info (-s)&quot; options in the compiler settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Please choose a Debug compiler set in the toolbar, or enable the &quot;generate debugging info (-g3)&quot; and disable the &quot;strip additional info (-s)&quot; options in the compiler set settings&apos;s &quot;settings&quot; page.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Trim trailing spaces</source>
<translation type="unfinished"></translation>
@ -4793,6 +4745,70 @@
<source>GNU Assembler Manual</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Correct compiler setting</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>You are using a Debug compiler set with wrong compile/link settings: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source> - &quot;Generate debug info (-g3)&quot; should be turned on</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> - &quot;Strip executable (-s)&quot; should be turned off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Do you want to correct it now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Can&apos;t Debug</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Your compiler set&apos;s &quot;Strip executable (-s)&quot; options is turnned on</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Please correct it, recompile and retry debug.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The generated executable doesn&apos;t have symbol table, and can&apos;t be debugged.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Debug Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The executable doesn&apos;t have symbol table, and can&apos;t be debugged.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Please turn off your compiler set&apos;s &quot;Strip executable (-s)&quot; option, recompile and retry debug.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The executable doesn&apos;t have enough debug info to set breakpoint.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Then recompile and retry debug.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Or you can remove all breakpoints, open cpu info dialog, and try debug machine codes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Please choose a Debug compiler set in the toolbar, or turn on your compiler set&apos;s &quot;Generate debug info (-g3)&quot; option in the options dialog.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NewClassDialog</name>