我正在尝试调试某种方法,但是当我在设备上调试时,我在该方法中的断点永远不会被击中,但是当我使用 iOS 模拟器调试时它们确实会被击中。该方法是我的应用程序调用的库的一部分,我觉得这可能是一个因素。我开发了应用程序和库,并且在调试时我在同一个工作区中打开了应用程序和库。
我在调用库方法的应用程序代码的行中放置了一个断点,然后在库的第一行放置了第二个断点。当我用模拟器测试时,两者都被击中。当我在设备上测试时,只有第一个被命中,第二个被跳过(库方法的代码似乎仍在运行)。
当我在设备上调试时,我需要做些什么特别的事情才能进入库调用,而在模拟器上调试时我不需要这样做?还是无法在库中调试?
如果这有点不清楚,我很抱歉 - 我正在尽我所能描述我正在做的事情,但这是我以前从未见过的非常奇怪的行为,所以有点难以描述。如果您需要更多信息或有任何不清楚的地方,请告诉我。
编辑 1:我注意到有些不同,不确定它是否已连接:我的库中没有包含方法的 .h 文件。实际上,其中只有 1 个方法(我将调用它myMethod
)将从库外部调用(然后该方法会根据需要调用库中的其他方法)。此外,我使用TARGET_IPHONE_SIMULATOR
预处理器触发器以稍微不同的方式进行调用,具体取决于它是在设备上运行还是在模拟器上运行。要调用库,在我的应用程序中的按钮单击方法上,我只有
#if TARGET_IPHONE_SIMULATOR
extern void myMethod();
myMethod();
#else
extern void myMethod(const char diretory[], int directoryLength);
const char *dir = [[documents path] UTF8String];
myMethod(dir, [[documents path] length]);
#endif
我的库中的方法中有匹配#if
的块,可以根据需要声明它,并在dir
传入时使用。这似乎执行得很好。我可以告诉我库中的代码正在被调用并正在做某事,它只是没有按照我的意愿去做。因此尝试设置断点,以及整个问题的原因。
编辑 2:我的库实际上包含纯 C 代码,而不是 Objective-C。我printf
在库代码中放了一些行,但它没有显示出来。我很好奇我的应用程序是否以某种方式调用了我的库的以前版本,而不是调用在我的工作区中打开的那个。这与我上次编辑的“它只是没有做我想做的事”部分一致。设备是否有可能试图运行它以某种方式保存的旧版本的库?我认为在安装我的应用程序的新版本之前从设备中完全删除应用程序可以防止这种情况发生,但也许我错了?