1

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

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

Exception Type:  EXC_CRASH (SIGABRT)

但是,当我从 Qt Creator 中的“构建和运行”运行它时,当我访问我的应用程序中我点击外部二进制文件的点时,一切都运行良好。

这是我在应用程序从外部 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/ 文件夹中的可执行文件旁边添加了相应的二进制文件

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

4

2 回答 2

0

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

是的,我有一些线索。

您可以尝试使用QCoreApplication::applicationDirPath()这种情况来使其在 MAC 上正常工作,正如用户在评论中所断言的那样。

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

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

于 2013-09-07T07:45:16.190 回答
0

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

QDir::currentPath()

在 mac osX 上必须小心使用。

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

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

包括 .app 包内 te 二进制文件的路径

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

/Volumes/LSPRO/Build

至少在我的配置...

于 2013-09-05T10:30:42.307 回答