When I\'m running a unit test and want to debug something, I set a breakpoint and type for instance \"po myVariable\". The response I get from LLDB is:
error: Co
edit:
Since this answer gets some attention, please note that it describes just a quick fix.
If you encounter the problem frequently, check the other answers for a more permanent solution.
For me, cleaning the build folder did the trick.
Edit 2: Cleaning doesn't help in some cases, carthage update --platform iOS --no-use-binaries
always does for me.
original answer:
I have a quick and dirty solution that makes this work.
select the first accessible frame in your debug navigator, usually main
type something in the debugger, for example po self
select the original frame in the debug navigator and execute your command, it should work now
I don't know why it works, but it does for me. I just found out by chance.
I'd be interested to hear an explanation from somebody with more insights (I am using Carthage in my project).
If you are using CocoaPods, this may apply to you. There are two things to make sure of.
pod
dependencies to your Test target(s) in your Podfile
:target 'MyApp' do
project 'MyApp'
pod 'Alamofire'
# ... other pods ...
end
target 'MyAppTests' do
project 'MyApp'
inherit! :search_paths
# Do not add your main app pods here
# You can use pods for writing your test cases though (e.g. mocks)
end
In my case I had quite a few frameworks and at least one of them was using binaries and caused LLDB to freak out if I added it to my test target.
As a side note/tip, if you need to use any dependencies from within your app, you need to change the runtime behavior of your main app via launch arguments instead of doing things in your testing code. (This is where I strayed from the path and it caused me problems.) You can do this by adding this to your test file:
# When you launch your app (e.g. in `setUpWithError()`)
let app = XCUIApplication()
app.launchArguments = ["testing-enabled"]
app.launch()
and then in your main app code (e.g. in AppDelegate
or SceneDelegate
):
#if DEBUG
if CommandLine.arguments.contains("testing-enabled") {
configureAppForTesting()
}
#endif
The #if DEBUG
is not necessary but it's good practice to not ship code that will not be executed in the published app.
Debug
mode.For example, if we have created a build config called App Store
based on Release
and a test config based on Debug
, then we need to do the following in our Podfile
:
target 'MyApp' do # do it for MyAppTests also!
project 'MyApp', 'App Store' => :release, 'Test' => :debug
# ... pod dependencies, etc.
end
Without this setting, your dependencies will be built using the default iOS config which is a Release
type of configuration (with compiler optimizations for both Swift and GCC that the debugger won't like).
Finally, make sure that your scheme's Test mode is set to use the proper build configuration (in this case Test
) as in the screenshot below.
In my case, I just restarted Xcode, and it's good :)
CocoaPods Binary (https://github.com/leavez/cocoapods-binary) was causing this problem for me. Ended up removing it to fix the problem.
You are likely getting this error because you are setting a breakpoint in another project/framework/module.
Instead of po world
, the quickest solution is to use the following command:
fr v world
I had the exact same problem because of the Instabug
framework.
If you can't find a solution then you should export the LLDB logs by running the log enable lldb expr -f /some/path/to/save/logs
command in the debugger and check for failures in that file because that's what helped me.
Also, you should file a bug report on http://bugs.swift.org/ with the LLDB logs attached to it.