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

时间:2013-09-05 09:45:30

标签: c++ qt qt5

我有一个奇怪的问题,最近才出现。

当我从Qt应用程序内部访问外部二进制文件时,应用程序崩溃并显示错误:

Exception Type:  EXC_CRASH (SIGABRT)

但是当我从Qt Creator中的“build and run”运行它时,当我访问应用程序中我点击exetrnal二进制文件的点时,一切运行正常。

当应用程序从外部Qt创建者崩溃时,这是我点击的功能

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());
}

访问其他外部二进制文件时也会崩溃,在这种情况下不仅仅是ffmpeg。

我觉得它与QDir :: currentPath()有关,因为当我弄乱路径时,它也会从Qt Creator内部崩溃。

显然我在Contents / MacOS /文件夹

中的可执行文件旁边添加了相应的二进制文件

我真的不知道如何调试这个..任何线索如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

我实际上发现了为什么会发生这种情况,注意到这一点非常有趣。

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

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

/Volumes/LSPRO/Build/LSPRO.app/Contents/MacOS

包括.app包中的二进制路径

但是当您将其作为独立应用运行时,它会返回

/Volumes/LSPRO/Build

至少在我的配置上......

答案 1 :(得分:0)

I don't really know how to debug this.. any clue how to solve this?

是的,我有一些线索。

您可以尝试在此方案中使用QCoreApplication::applicationDirPath()来使其在MAC上正常工作,同样由用户在评论中声明。

Here您可以找到文件系统引擎源代码,但是如果您想进一步跟踪问题,请将您的嫌疑人视为错误。简而言之,那里没有太多的Mac特定代码而不是Unix。

此外,您将来可能会考虑使用QtMultimedia而不是处理QProcess和外部执行。