void GdbCoreEngine::continueSetupEngine()
{
    bool isCore = true;
    if (m_coreUnpackProcess) {
        isCore = m_coreUnpackProcess->exitCode() == 0;
        m_coreUnpackProcess->deleteLater();
        m_coreUnpackProcess = 0;
        if (m_tempCoreFile.isOpen())
            m_tempCoreFile.close();
    }
    if (isCore && m_executable.isEmpty()) {
        GdbCoreEngine::CoreInfo cinfo = readExecutableNameFromCore(
                                            startParameters().debuggerCommand,
                                            coreFileName());

        if (cinfo.isCore) {
            m_executable = cinfo.foundExecutableName;
            if (m_executable.isEmpty()) {
                showMessageBox(QMessageBox::Warning,
                    tr("Error Loading Symbols"),
                    tr("No executable to load symbols from specified core."));
                notifyEngineSetupFailed();
                return;
            }
        }
    }
    if (isCore) {
        startGdb();
    } else {
        showMessageBox(QMessageBox::Warning,
            tr("Error Loading Core File"),
            tr("The specified file does not appear to be a core file."));
        notifyEngineSetupFailed();
    }
}
// fullFileName - имя файла с полным путем, который нужно скопировать в каталог записи
bool Attach::copyFileToBase(QString iFileName)
{
    qDebug() << "Before check file. iFileName: "+iFileName;
    qDebug() << "Inner file name: "+getFullInnerFileName();

    // Проверка наличия исходного файла
    QFile file(iFileName);

    qDebug() << "Check file finish";

    if(file.exists()==false) {
        showMessageBox(QObject::tr("Can't open file %1. File not exists.").arg(iFileName));
        return false;
    }

    qDebug() << "Before real copy file.";

    bool result=file.copy( getFullInnerFileName() );

    qDebug() << "After real copy file.";

    if(result==false)
        showMessageBox(QObject::tr("Can't copy file %1. May be directory %2 not writable, or target file %3 already exists.").arg(iFileName).arg(getFullInnerDirName()).arg(getFullInnerFileName()));

    return result;
}
void GdbCoreEngine::continueSetupEngine()
{
    if (m_executable.isEmpty()) {
        // Read executable from core.
        bool isCore = false;
        m_executable = readExecutableNameFromCore(&isCore);

        if (!isCore) {
            showMessageBox(QMessageBox::Warning,
                tr("Error Loading Core File"),
                tr("The specified file does not appear to be a core file."));
            notifyEngineSetupFailed();
            return;
        }

        // Strip off command line arguments. FIXME: make robust.
        int idx = m_executable.indexOf(QLatin1Char(' '));
        if (idx >= 0)
            m_executable.truncate(idx);
        if (m_executable.isEmpty()) {
            showMessageBox(QMessageBox::Warning,
                tr("Error Loading Symbols"),
                tr("No executable to load symbols from specified core."));
            notifyEngineSetupFailed();
            return;
        }
    }
    startGdb();
}
Beispiel #4
0
void ShortLocater::shortCalibration(){

    QMessageBox msgBox,msgBox2;
    bool ret =showMessageBox(true,false,"Short the probes and press OK.","OK","");
    if(ret==true){
        {
            Configure(99);
            sleep(1);
            showMessageBox(true,false,"200E Short Calibration Done\n Press OK for next range.","OK","");
            for(int i=0;i<5;i++)
            	 r200EShortValue=IDMMLib->displayResistance(SLR200E);
            r200EShortValue = static_cast<double>(static_cast<int>(r200EShortValue*10000000+0.5))/10000000.0;
            qDebug()<<"r200EShortValue in ohms"<<convertToUnits(r200EShortValue);
        }
        {
            Configure(66);
            sleep(1);
            showMessageBox(true,false,"2E Short Calibration Done\n Press OK for next range.","OK","");
            for(int i=0;i<5;i++)
            	r2EShortValue=IDMMLib->displayResistance(R2E);
            r2EShortValue = static_cast<double>(static_cast<int>(r2EShortValue*10000000+0.5))/10000000.0;
            qDebug()<<"r2EShortValue in ohms"<<convertToUnits(r2EShortValue);

        }
        {
            Configure(33);
            sleep(1);
            showMessageBox(true,false,"200mE Short Calibration Done\n Press OK to Exit.","OK","");
            for(int i=0;i<5;i++)
            	r200mEShortValue=IDMMLib->displayResistance(R200mE);
            r200mEShortValue = static_cast<double>(static_cast<int>(r200mEShortValue*10000000+0.5))/10000000.0;
            qDebug()<<"r200mEShortValue in ohms"<<convertToUnits(r200mEShortValue);
        }
        Configure(99);
    }

    QFile outFile;
    if(ui.External->isVisible())
    	outFile.setFileName("shortValuesE.txt");
    if(ui.Internal->isVisible())
    	outFile.setFileName("shortValuesI.txt");

    outFile.open(QIODevice::WriteOnly);
    QTextStream ts(&outFile);
    ts <<r200EShortValue<<endl<<r2EShortValue<<endl<<r200mEShortValue<<endl;


}
void RemoteGdbAdapter::uploadProcError(QProcess::ProcessError error)
{
    QString msg;
    switch (error) {
    case QProcess::FailedToStart:
        msg = tr("The upload process failed to start. Shell missing?");
        break;
    case QProcess::Crashed:
        msg = tr("The upload process crashed some time after starting "
                 "successfully.");
        break;
    case QProcess::Timedout:
        msg = tr("The last waitFor...() function timed out. "
                 "The state of QProcess is unchanged, and you can try calling "
                 "waitFor...() again.");
        break;
    case QProcess::WriteError:
        msg = tr("An error occurred when attempting to write "
                 "to the upload process. For example, the process may not be running, "
                 "or it may have closed its input channel.");
        break;
    case QProcess::ReadError:
        msg = tr("An error occurred when attempting to read from "
                 "the upload process. For example, the process may not be running.");
        break;
    default:
        msg = tr("An unknown error in the upload process occurred. "
                 "This is the default return value of error().");
    }

    m_engine->showStatusMessage(msg);
    showMessageBox(QMessageBox::Critical, tr("Error"), msg);
}
Beispiel #6
0
void MainWindow::deleteCurrentPlaylistItem()
{
   QString playlistPath = getCurrentPlaylistPath();
   QByteArray playlistArray;
   QHash<QString, QString> contentHash = getCurrentContentHash();
   playlist_t *playlist = NULL;
   const char *playlistData = NULL;
   unsigned index = 0;
   bool ok = false;

   if (playlistPath.isEmpty())
      return;

   if (contentHash.isEmpty())
      return;

   playlistArray = playlistPath.toUtf8();
   playlistData = playlistArray.constData();

   index = contentHash.value("index").toUInt(&ok);

   if (!ok)
      return;

   if (!showMessageBox(QString(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_CONFIRM_DELETE_PLAYLIST_ITEM)).arg(contentHash["label"]), MainWindow::MSGBOX_TYPE_QUESTION_YESNO, Qt::ApplicationModal, false))
      return;

   playlist = playlist_init(playlistData, COLLECTION_SIZE);

   playlist_delete_index(playlist, index);
   playlist_write_file(playlist);
   playlist_free(playlist);

   reloadPlaylists();
}
Beispiel #7
0
 void C2ETab::algorithmFinished(bool error)
 {
   if(error)
   {
     emit showMessageBox("Error running SofQWMoments. \nSee results log for details.");
   }
 }
Beispiel #8
0
void MainWindow::updateRetroArchNightly()
{
   QUrl url(QUrl(buildbot_server_url).resolved(QUrl(RETROARCH_NIGHTLY_UPDATE_PATH)));
   QNetworkRequest request(url);
   QNetworkReply *reply = NULL;
   QByteArray urlArray = url.toString().toUtf8();
   const char *urlData = urlArray.constData();

   if (m_updateFile.isOpen())
   {
      RARCH_ERR("[Qt]: File is already open.\n");
      return;
   }
   else
   {
      QString fileName = QFileInfo(url.toString()).fileName() + PARTIAL_EXTENSION;
      QByteArray fileNameArray = fileName.toUtf8();
      const char *fileNameData = fileNameArray.constData();

      m_updateFile.setFileName(fileName);

      if (!m_updateFile.open(QIODevice::WriteOnly))
      {
         showMessageBox(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_FILE_WRITE_OPEN_FAILED), MainWindow::MSGBOX_TYPE_ERROR, Qt::ApplicationModal, false);
         RARCH_ERR("[Qt]: Could not open file for writing: %s\n", fileNameData);
         return;
      }
   }

   RARCH_LOG("[Qt]: Starting update of RetroArch...\n");
   RARCH_LOG("[Qt]: Downloading URL %s\n", urlData);

   request.setHeader(QNetworkRequest::UserAgentHeader, USER_AGENT);

   m_updateProgressDialog->setWindowModality(Qt::NonModal);
   m_updateProgressDialog->setMinimumDuration(0);
   m_updateProgressDialog->setRange(0, 100);
   m_updateProgressDialog->setAutoClose(true);
   m_updateProgressDialog->setAutoReset(true);
   m_updateProgressDialog->setValue(0);
   m_updateProgressDialog->setLabelText(QString(msg_hash_to_str(MSG_DOWNLOADING)) + "...");
   m_updateProgressDialog->setCancelButtonText(tr("Cancel"));
   m_updateProgressDialog->show();

   m_updateReply = m_networkManager->get(request);
   reply = m_updateReply.data();

   /* make sure any previous connection is removed first */
   disconnect(m_updateProgressDialog, SIGNAL(canceled()), reply, SLOT(abort()));
   disconnect(m_updateProgressDialog, SIGNAL(canceled()), m_updateProgressDialog, SLOT(cancel()));
   connect(m_updateProgressDialog, SIGNAL(canceled()), reply, SLOT(abort()));
   connect(m_updateProgressDialog, SIGNAL(canceled()), m_updateProgressDialog, SLOT(cancel()));

   connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onUpdateNetworkError(QNetworkReply::NetworkError)));
   connect(reply, SIGNAL(sslErrors(const QList<QSslError>&)), this, SLOT(onUpdateNetworkSslErrors(const QList<QSslError>&)));
   connect(reply, SIGNAL(finished()), this, SLOT(onRetroArchUpdateDownloadFinished()));
   connect(reply, SIGNAL(readyRead()), this, SLOT(onUpdateDownloadReadyRead()));
   connect(reply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(onUpdateDownloadProgress(qint64, qint64)));

}
Beispiel #9
0
 MyWidget::MyWidget(QWidget *parent)
     : QWidget(parent)
 {
     //setFixedSize(150, 200);

     button_power = new QPower(this);
	 // aerobutton_test = new AeroButton("Test", this);
	 QPushButton *quit = new QPushButton(tr("Quit"));
	 
	 QVBoxLayout *layout = new QVBoxLayout;
	 // QHBoxLayout *layout = new QHBoxLayout;
	 
	 quit->setFont(QFont("Times", 25, QFont::Bold));
	 //aerobutton_test->setFont(QFont("Times", 12, QFont::Bold));
	 //aerobutton_quit->setGeometry(10, 20, 230, 40);
	 //aerobutton_test->setGeometry(10, 70, 230, 40);
	 
	 /*
	 QGridLayout *grid = new QGridLayout;
     for (int row = 0; row < 3; ++row)
     {
      for (int column = 0; column < 2; ++column) 
      {
       LCDRange *lcdRange = new LCDRange;
       grid->addWidget(lcdRange, row, column);
      }
     }
	*/	
	  
	QLCDNumber *lcd = new QLCDNumber(2);
    lcd->setSegmentStyle(QLCDNumber::Filled);
    
    QSlider *slider = new QSlider(Qt::Horizontal);
    slider->setRange(0, 99);
    slider->setValue(0);
    
    //QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(lcd);
    layout->addWidget(slider);
    //setLayout(layout);
	     
     // layout->addWidget(aerobutton_test);
     // layout->addLayout(grid);
     layout->addWidget(button_power);
     layout->addWidget(quit);
     //layout->addWidget(slider);
     setLayout(layout);
        
	 //QObject::connect(aerobutton_quit, SIGNAL(clicked()), &app, SLOT(quit()));
     // connect(aerobutton_quit, SIGNAL(clicked()), qApp, SLOT(quit()));
     // connect(aerobutton_quit, SIGNAL(clicked()), this, SLOT(closeApp() ));
     //connect(aerobutton_test, SIGNAL(clicked()), this, SLOT(showMessageBox() ));
     connect(quit, SIGNAL(clicked()), this, SLOT(closeApp() ));
     connect(button_power, SIGNAL(clicked()), this, SLOT(showMessageBox() ));
     connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));
     
     //connect(quit, SIGNAL(clicked()), this, SLOT(close() ));
     // connect(button_power, SIGNAL(mousePressEvent()), this, SLOT(close() ));
 }
Beispiel #10
0
void SimulateTrafficDialog::handlePrevButton()
{
    std::string result = nodesEditor->displayPrevMplsPacket();
    if(!result.empty())
    {
        showMessageBox(result);
    }
}
QMessageBox::StandardButton
MessageBox::warning(QWidget *parent,
                    QString const &title,
                    QString const &text,
                    QMessageBox::StandardButtons buttons,
                    QMessageBox::StandardButton defaultButton) {
  return showMessageBox(parent, QMessageBox::Warning, title, text, buttons, defaultButton);
}
Beispiel #12
0
void MindMapWindow::insertParent()
{
    try {
        _mindMapPresentationModel->insertParentNode("");
    } catch (exception exception) {
        showMessageBox("Exception", exception.what());
    }
}
QMessageBox::StandardButton
MessageBox::information(QWidget *parent,
                        QString const &title,
                        QString const &text,
                        QMessageBox::StandardButtons buttons,
                        QMessageBox::StandardButton defaultButton) {
  return showMessageBox(parent, QMessageBox::Information, title, text, buttons, defaultButton);
}
Beispiel #14
0
void MindMapWindow::deleteNode()
{
    try {
        _mindMapPresentationModel->deleteComponent();
    } catch (exception exception) {
        showMessageBox("Exception", exception.what());
    }
}
QMessageBox::StandardButton
MessageBox::critical(QWidget *parent,
                     QString const &title,
                     QString const &text,
                     QMessageBox::StandardButtons buttons,
                     QMessageBox::StandardButton defaultButton) {
  return showMessageBox(parent, QMessageBox::Critical, title, text, buttons, defaultButton);
}
Beispiel #16
0
void SimulateTrafficDialog::handleStartButton()
{
    if(fecComboBox->count() == 0)
    {
        showMessageBox(noAvailableFecError);
    }
    else
    {
        std::string result = nodesEditor->displayNextMplsPacket(id, fecComboBox->currentText().toStdString());
        if(!result.empty())
        {
            showMessageBox(result);
        }
        else
        {
            lockControl();
        }
    }
}
Beispiel #17
0
void MindMapWindow::saveMindMap()
{
    QString fileName = QFileDialog::getSaveFileName(this,
                       tr("Save mind map"), ".", tr("Image Files (*.mm)"));
    try {
        _mindMapPresentationModel->saveMindMap(fileName.toUtf8().constData());
    } catch (exception exception) {
        showMessageBox("Exception", exception.what());
    }
}
Beispiel #18
0
void MainWindow::menuStart_click(){

    webCam.open(0);

    if(!webCam.isOpened()){
        showMessageBox("camera is not available, application will close!");
        return;
    }

    timer->start(TIMER_INTERVAL);
}
void NinjamRoomWindowVST::ninjamHostSyncButtonClicked()
{
    int ninjamBpm = controller->getNinjamController()->getCurrentBpm();
    bool canSync = controller->getHostBpm() == ninjamBpm;
    QString hostName = controller->getHostName();
    if (canSync) {
        // stop ninjam streams and wait until user press play/start in host
        NinjamControllerVST* ninjamController = controller->getNinjamController();
        Q_ASSERT(ninjamController);
        ninjamController->waitForHostSync();
        if (ninjamPanel) {
            ninjamPanel->setCurrentBeat(0);
            showMessageBox("Synchronizing...",
                           "Press play/start in " + hostName + " to sync with Jamtaba!");
        }
    } else {
        showMessageBox("Trying to sync ...", "Change " + hostName + " BPM to " + QString::number(
                           ninjamBpm) + " and try sync again!");
    }
}
Beispiel #20
0
void SimulateTrafficDialog::handleNextButton()
{
    std::string result = nodesEditor->displayNextMplsPacket();
    if(!result.empty())
    {
        showMessageBox(result);
    }
    else
    {
        lockControl();
    }
}
void SectionTranspose::handleTransposeSong()
{
	pp_int32 fuckups = tracker.moduleEditor->noteTransposeSong(tp, true);
	if (!fuckups)
		tracker.moduleEditor->noteTransposeSong(tp);
	else
	{
		char buffer[100];
		sprintf(buffer, "%i notes will be erased, continue?", fuckups);
		showMessageBox(MESSAGEBOX_TRANSPOSEPROCEED, buffer);
	}
}
Beispiel #22
0
void MindMapWindow::openMindMap()
{
    QString fileName = QFileDialog::getOpenFileName(this,
                       tr("Open mind map"), ".", tr("Image Files (*.mm)"));
    try {
        _mindMapPresentationModel->loadMindMap(fileName.toUtf8().constData());
    } catch (exception exception) {
        showMessageBox("Exception", exception.what());
    }
    _mindMapView->refresh();
    updateUIState();
}
Beispiel #23
0
void PdbEngine::setupInferior()
{
    QTC_ASSERT(state() == InferiorSetupRequested, qDebug() << state());

    QString fileName = QFileInfo(startParameters().executable).absoluteFilePath();
    QFile scriptFile(fileName);
    if (!scriptFile.open(QIODevice::ReadOnly|QIODevice::Text)) {
        showMessageBox(QMessageBox::Critical, tr("Python Error"),
            _("Cannot open script file %1:\n%2").
               arg(fileName, scriptFile.errorString()));
        notifyInferiorSetupFailed();
        return;
    }
    notifyInferiorSetupOk();
}
Beispiel #24
0
reg_t GfxControls32::kernelMessageBox(const Common::String &message, const Common::String &title, const uint16 style) {
	if (g_engine) {
		g_engine->pauseEngine(true);
	}

	int16 result;

	switch (style & 0xF) {
	case kMessageBoxOK:
		result = showMessageBox(message, _("OK"), NULL, 1, 1);
	break;
	case kMessageBoxYesNo:
		result = showMessageBox(message, _("Yes"), _("No"), 6, 7);
	break;
	default:
		error("Unsupported MessageBox style 0x%x", style & 0xF);
	}

	if (g_engine) {
		g_engine->pauseEngine(false);
	}

	return make_reg(0, result);
}
// Удаление файла с диска
void Attach::removeFile()
{
    if(getField("type")!="file")
        return;

    // Проверка наличия файла
    QFile file( getFullInnerFileName() );

    if(file.exists()==false) {
        showMessageBox(QObject::tr("Can't delete file %1 on disk. File not exists.").arg( getFullInnerFileName() ));
        return;
    }

    file.setPermissions(QFile::ReadOther | QFile::WriteOther);
    file.remove();
}
Beispiel #26
0
/**
 * @brief Dialog::iconIsActived
 * @param reason
 * 托盘图标活动
 */
void Dialog::iconIsActived(QSystemTrayIcon::ActivationReason reason)
{
    switch(reason)
    {
    case QSystemTrayIcon::DoubleClick:
        showNormal();
        break;
    case QSystemTrayIcon::Trigger:
        showMessageBox();
        break;
    case QSystemTrayIcon::Unknown:
        QMessageBox::about(this, "unkown", "unkown activation");
        break;
    default:
        break;
    }
}
Beispiel #27
0
void CoreGdbAdapter::startAdapter()
{
    QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state());
    showMessage(_("TRYING TO START ADAPTER"));

    QStringList args;
    args.append(_("-ex"));
    args.append(_("set auto-solib-add off"));
    if (!m_engine->startGdb(args, QString()))
        return;

    //if (m_executable.isEmpty()) {
    //    showMessageBox(QMessageBox::Warning,
    //        tr("Error Loading Symbols"),
    //        tr("No executable to load symbols from specified."));
    //}

#ifdef Q_OS_LINUX
    const bool canUseExeFromCore = true;
#else
    const bool canUseExeFromCore = false;
#endif

    if (!m_executable.isEmpty()) {
        m_engine->notifyEngineSetupOk();
    } else if (canUseExeFromCore) {
        // Extra round trip to get executable name from core file.
        // This is sometimes not the full name, so it can't be used
        // as the generic solution.

        // Quoting core name below fails in gdb 6.8-debian.
        m_engine->postCommand("target core " + m_coreName,
            CB(handleTemporaryTargetCore));
    } else {
        QString msg = tr("The name of the binary file cannot be extracted "
            "from this core file.");
        msg += _(" ");
        msg += tr("Try to specify the binary using the "
            "<i>Debug->Start Debugging->Attach to Core</i> dialog.");
        showMessageBox(QMessageBox::Warning,
            tr("Loading core file failed"), msg);
        m_engine->notifyEngineSetupFailed();
    }
}
Beispiel #28
0
// Here we take a look at the game the user still does not
// have and decide if the "New Stuff" will become selectable.
// If he has all the games, the button won't be shown.
void CGameLauncher::verifyGameStore()
{
    int progress = 0;
    bool cancel = false;
    GameDownloader gameDownloader(progress, cancel);


    std::vector< std::string > missingList;
    gameDownloader.checkForMissingGames( missingList );

    if(!gameDownloader.hasCatalog())
    {
        std::stringstream ss;

        const auto cataFile   = gameDownloader.catalogFName();
        const auto searchPath = GetFirstSearchPath();

        ss << "You seem not to have a game catalog.\n";
        ss << "The file is called " << "\"" << cataFile  <<  "\" \n";
        ss << "You might want to download \n";
        ss << "and copy one into:\n";
        ss << "\"" << searchPath << "\".\n";
        ss << "\"+ More\" button is disabled...\n";

        std::string msg(ss.str());

        showMessageBox(msg);
    }


    if(!missingList.empty())
    {
        GsButton *downloadBtn = new GsButton( "+ More", new GMDownloadDlgOpen() );
        mLauncherDialog.addControl( downloadBtn, GsRect<float>(0.125f, 0.865f, 0.25f, 0.07f) );
    }
    /*else
    {
        GsButton *cataLogBtn = new GsButton( "Catalogue", new GMDownloadDlgOpen() );
        mLauncherDialog.addControl( cataLogBtn, GsRect<float>(0.125f, 0.865f, 0.25f, 0.07f) );

    }*/

    mGameCatalogue = gameDownloader.getGameCatalogue();
}
void ScriptEngine::setupInferior()
{
    QTC_ASSERT(state() == InferiorSetupRequested, qDebug() << state());
    m_scriptFileName = QFileInfo(startParameters().executable).absoluteFilePath();
    showMessage(_("SCRIPT FILE: ") + m_scriptFileName);
    QFile scriptFile(m_scriptFileName);
    if (!scriptFile.open(QIODevice::ReadOnly|QIODevice::Text)) {
        showMessageBox(QMessageBox::Critical, tr("Error:"),
            _("Cannot open script file %1:\n%2").
          arg(m_scriptFileName, scriptFile.errorString()));
        notifyInferiorSetupFailed();
        return;
    }
    QTextStream stream(&scriptFile);
    m_scriptContents = stream.readAll();
    scriptFile.close();
    attemptBreakpointSynchronization();
    notifyInferiorSetupOk();
}
void LocalPlainGdbAdapter::checkForReleaseBuild()
{
    QString objDump = _("objdump");
    // Windows: Locate objdump in the debuggee's (MinGW) environment
    if (ProjectExplorer::Abi::hostAbi().os() == ProjectExplorer::Abi::WindowsOS
        && startParameters().environment.size()) {
        objDump = startParameters().environment.searchInPath(objDump);
    } else {
        objDump = Utils::Environment::systemEnvironment().searchInPath(objDump);
    }
    if (objDump.isEmpty()) {
        showMessage(_("Could not locate objdump command for release build check"), LogWarning);
        return;
    }
    // Quick check for a "release" build
    QProcess proc;
    QStringList args;
    args.append(_("-h"));
    args.append(_("-j"));
    args.append(_(".debug_info"));
    args.append(startParameters().executable);
    proc.start(objDump, args);
    proc.closeWriteChannel();
    if (!proc.waitForStarted()) {
        showMessage(_("OBJDUMP PROCESS COULD NOT BE STARTED. "
            "RELEASE BUILD CHECK WILL FAIL"));
        return;
    }
    proc.waitForFinished();
    QByteArray ba = proc.readAllStandardOutput();
    // This should yield something like
    // "debuggertest:     file format elf32-i386\n\n"
    // "Sections:\nIdx Name          Size      VMA       LMA       File off  Algn\n"
    // "30 .debug_info   00087d36  00000000  00000000  0006bbd5  2**0\n"
    // " CONTENTS, READONLY, DEBUGGING"
    if (ba.contains("Sections:") && !ba.contains(".debug_info")) {
        showMessageBox(QMessageBox::Information, "Warning",
           tr("This does not seem to be a \"Debug\" build.\n"
              "Setting breakpoints by file name and line number may fail."));
    }
}