如何解决“Xcode 找不到源文件”

Posted

技术标签:

【中文标题】如何解决“Xcode 找不到源文件”【英文标题】:How can I work around "Xcode could not locate source file" 【发布时间】:2010-03-12 09:11:41 【问题描述】:

我正在使用 Xcode 中的 ID3 框架(它已经从网络上消失了 - 包括谷歌缓存!)。

我正在测试一个导入 mp3 功能,该功能允许他们在导入标签时对其进行编辑。其中一个测试用例是没有正确 id3 标头的损坏或无效 mp3。我遇到的问题是,在更新无效 mp3(updateFile:)的标签时,ID3 框架会尝试使用id3V1Tag.m(如果找不到 v2 标签,我认为它会退回到这个位置)和这是我得到 Xcode 错误的地方(在运行程序时,而不是在构建):

Xcode could not locate source file: id3V1Tag.m (line: 299)

即使在发布版本中,这也会使程序崩溃,所以我不能真正忽略它。

我尝试在它周围放置一个 try/catch 块,但它不被视为异常,因此不会被捕获。为文件加载标签数据的函数返回一个 BOOL 但似乎只有在给定文件不存在时才会返回 false,所以这也无济于事。

当前代码:

[tagData release];
tagData = [[TagAPI alloc] initWithGenreList:nil];
tagsLoaded = [tagData examineFile:exportPath];
if(tagsLoaded) 
    [tagData setTitle:title];
    [tagData setArtist:artist];
    [tagData setComments:comments];
    @try 
        [tagData updateFile];
    
    @catch (id e)
        NSLog(@"h");
    

【问题讨论】:

【参考方案1】:

您遇到的错误是 Xcode 试图定位您的源文件 id3V1Tag.m 以便在调试期间显示它。您编写的任何代码都不会影响这一点。

如果您的框架发行版中没有 id3V1Tag.m 源文件,则对此您无能为力,除了忽略它之外几乎没有什么可做的(除了看看您是否可以避免导致它被请求,就像没有在其中设置断点,没有进入它,也没有在其中崩溃)。

如果您确实拥有它并且正在构建它,那么您可能没有使用正确的调试信息进行构建,因此您必须告诉我们更多有关您的构建设置的信息。

【讨论】:

澄清:应用程序已经崩溃。当 Xcode 尝试帮助您调试崩溃时,会出现该消息;它来自 Xcode,而不是 ID3 框架(它不是 Xcode 的一部分,也不随 Xcode 工具提供),也不是导致崩溃的原因。 我没有文件,所以我能做的不多。该方法似乎自行调用丢失的文件,并且是我在框架中看到的唯一可以保存标签的方法,所以我不能不调用它。我很想忽略它,但它会使程序崩溃,所以我不能。如果 try/catch 发生了崩溃,那会很好,显然不会,因为它不是异常,但是没有其他方法可以模拟 try/catch 行为(我不关心崩溃/错误详细信息) ? 调用丢失文件的不是 方法。代码正在崩溃。 Xcode 试图通过向您显示崩溃方法的源代码来提供帮助,但您没有它——这基本上就是警告的意思。这里的主要问题是您的代码导致框架崩溃。丢失文件的警告只是后遗症;您应该专注于消除崩溃本身。 好吧,我现在明白了。我去看看能不能正常调试框架。 设法让 gdb 在框架上工作,结果我只是错误地假设它会处理标记值的空字符串。感谢您的帮助。【参考方案2】:

所以您遇到的问题是,当您尝试编译 id3V1Tag.m 或运行程序时,您的程序崩溃了。我对此有点困惑。

如果它在运行时崩溃,这可能是库中缺少代码文件的问题?您如何准确读取 ID3 标签信息?是通过您自己的代码还是通过第三方库/类。

【讨论】:

在程序运行过程中崩溃,特别是在调用updateFile:时。 ID3 标签是通过第三方库读取的,我认为该库缺少此文件,因为自下载它们以来我没有接触过这些文件。 这是有道理的。奇怪的是,我在周末遇到了同样的错误。如果我没记错的话,问题就是你所说的。缺少实现文件。您的项目中有一个名为“id3V1Tag.m”的文件吗?如果它已包含在您的项目中,您可能需要尝试将其从项目中删除并重新添加。 对了,我做了一个spotlight搜索,发现原来下载的那个.m文件,所以加到框架里发现抛出了bad access异常(虽然这并没有触发catch in我的原始代码)。我在函数中添加了断点,但它没有命中它们。删除它并再次添加它没有任何区别。 不应该这样做,但另一种可能性是从您需要的文件中复制所有代码并将它们粘贴到您在项目中创建的新文件中。

以上是关于如何解决“Xcode 找不到源文件”的主要内容,如果未能解决你的问题,请参考以下文章

云原生景观:可观察性和分析解决了什么问题?如何解决的?

如何解决 Ajax 跨域请求不到的问题

如何解决包冲突问题

如何解决包冲突问题

如何解决ajax跨域问题

MySQL 的 10048问题,如何解决?