C++ 从Qt外部运行Qt5应用程序时崩溃

C++ 从Qt外部运行Qt5应用程序时崩溃,c++,qt,qt5,C++,Qt,Qt5,我最近才发现一个奇怪的问题 当我从Qt应用程序内部访问外部二进制文件时,该应用程序会崩溃,并出现以下错误: Exception Type: EXC_CRASH (SIGABRT) 但是,当我从Qt Creator内部的“构建并运行”运行它时,当我在应用程序中遇到一个exetrnal二进制文件时,一切都正常运行 这是我在应用程序从Qt creator外部崩溃时使用的函数 QString Api::getVideoFrame(QString filename, QString position)

我最近才发现一个奇怪的问题

当我从Qt应用程序内部访问外部二进制文件时,该应用程序会崩溃,并出现以下错误:

Exception Type:  EXC_CRASH (SIGABRT)
但是,当我从Qt Creator内部的“构建并运行”运行它时,当我在应用程序中遇到一个exetrnal二进制文件时,一切都正常运行

这是我在应用程序从Qt creator外部崩溃时使用的函数

QString Api::getVideoFrame(QString filename, QString position)
{
    const QString ffmpeg = QDir::currentPath()+"/ffmpeg"; //mac version
    QProcess process;
    QStringList args;
    args    << "-ss" << position
            << "-i" << filename
            << "-f" << "image2"
            << "-vframes" << "1"
            //<< "-vcodec" << "bmp"
            << "pipe:1";
    process.start(ffmpeg, args);
    process.waitForFinished();

    return QString(process.readAllStandardOutput().toBase64());
}
QString Api::getVideoFrame(QString文件名,QString位置)
{
const QString ffmpeg=QDir::currentPath()+“/ffmpeg”;//mac版本
QProcess过程;
QStringList-args;

args事实上,我发现了这种情况发生的原因,注意到这一点非常令人困惑

QDir::currentPath()
在mac osX上必须小心使用

从Qt Creator内执行应用程序时,它返回:

/Volumes/LSPRO/Build/LSPRO.app/Contents/MacOS
包括.app包中te二进制文件的路径

但当你把它作为一个独立的应用程序运行时,它会返回

/Volumes/LSPRO/Build

至少在我的配置上…

我真的不知道如何调试这个..有什么线索可以解决这个问题吗?

是的,我有一些线索

您可以尝试在此场景中使用
QCoreApplication::applicationDirPath()
,以使其在MAC上正常工作,正如用户在注释中所断言的那样

如果你想进一步追踪这个问题,并将其作为一个bug,你可以找到文件系统引擎的源代码


此外,在将来,您可能需要考虑QT多媒体,而不是处理QPrand和外部执行。

首先,您可能想在调试器中调试它。就像从命令行运行调试器,看看是否能更好地定位崩溃位置,而不是使用“CururtPATH”。,使用QCoreApplication::applicationDirPath()然后试试。奇怪的是,它会使应用程序崩溃,而不是给出一个错误。我的意思是,无论您在另一个文件夹中有什么错误或混合的二进制文件,您运行的
ffmpeg
仍然应该崩溃,而不是您的实际应用程序,因为据我所知,您只是运行一个外部可执行文件,崩溃应该来自链接或动态加载@鲁道夫:这就是MacOS处理崩溃的子系统的方式:一个信号被传递到父系统,从而导致父系统也崩溃。