NoneType output from the z3 model - z3

I'm using the MaxSMT to find a solution to a set of soft constraints and hard constraints. With a timeout of 600 secs, the model output I get from the solver is Nonetype for all of the parameters. I was expecting the solver to provide me with a sub-optimal solution. Am I wrong to assume that. Can someone please explain that?
Edit: So I added the verbose option to print out the intermediate steps: I get the following message :
(optimize:check-sat)
(smt.searching)
(smt.simplifying-clause-set :num-deleted-clauses 2)
(smt.simplifying-clause-set :num-deleted-clauses 1)
(smt.restarting :propagations 417 :decisions 948 :conflicts 101 :restart 100 :restart-outer 110 :agility 0.000299947)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.restarting :propagations 3497 :decisions 11262 :conflicts 202 :restart 110 :restart-outer 110 :agility 0.00588127)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.restarting :propagations 10138 :decisions 18514 :conflicts 313 :restart 100 :restart-outer 121 :agility 0.001524)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.restarting :propagations 16862 :decisions 21147 :conflicts 426 :restart 110 :restart-outer 121 :agility 0.0337523)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.restarting :propagations 17827 :decisions 24053 :conflicts 537 :restart 121 :restart-outer 121 :agility 0.0268182)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.restarting :propagations 25141 :decisions 36272 :conflicts 660 :restart 100 :restart-outer 133 :agility 0.00362989)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.restarting :propagations 35575 :decisions 47933 :conflicts 765 :restart 110 :restart-outer 133 :agility 0.00289772)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.restarting :propagations 39641 :decisions 52637 :conflicts 876 :restart 121 :restart-outer 133 :agility 0.000965057)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.simplifying-clause-set :num-deleted-clauses 0)
(smt.restarting :propagations 40803 :decisions 57913 :conflicts 998 :restart 133 :restart-outer 133 :agility 0.0349118)
It seems like the solver is not ale to find a feasible solution. Does it mean that none of the soft constraints are satisfiable?

There's no reason to expect to get a "sub-optimal" solution after a time out. Unless the solver comes back with a definite answer, any internal information you can glean is just that: Some internal value that may or not may not be relevant. More importantly, there is no reason to expect that it'd even be a satisfying instance. See this answer for some further details: How to check progress for Z3 optimization problem
If you're in a time-crunch and can't afford to wait, your best bet maybe to iterate yourself: Instead of using the optimizing engine, just do a regular query, evalute your cost function and call the solver again, with the additional constraint that the cost should be smaller than what you got before. While this obviously doesn't necessarily converge to an optimal solution, it gives you the control on how many iterations you want to make, and can work sufficiently well in practice. See the discussion on this question for some further insight: Scalability of z3

Related

imagemagick - find coordinates of outline of transparent png (not border)

While it's easily done to visually outline, is it possible to have imagemagick output the coordinates of the outline of a transparent image?
Note, by outline, I don't mean just the bounding box border, but the actual contour around an arbitrarily shaped transparent image geometry.
Let's say you start with this image, which has a transparent background:
You can extract the transparency and find the edges like this:
convert penguin.png -alpha extract -edge 1 -threshold 50% edges.png
If, rather than an image, you want a list of the coordinates of the contour (i.e. the white pixels), you could do this instead:
convert penguin.png -alpha extract -edge 1 -threshold 50% -depth 8 txt: | awk -F: '/white/{print $1}'
256,0
253,1
254,1
255,1
257,1
258,1
259,1
253,2
259,2
252,3
253,3
...
...
Replace awk and everything after it with more to see what the awk is actually doing - it is just printing the coordinates of every pixel that is white.
The above pixels come out in row order, not like a contour where adjacent pixels come out together. If you want that, you might prefer to generate an SVG of the transparency with potrace like this:
convert penguin.png -alpha extract -threshold 50% pgm:- | potrace - --svg < alpha.pgm > result.svg
Output
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="500.000000pt" height="577.000000pt" viewBox="0 0 500.000000 577.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.13, written by Peter Selinger 2001-2015
</metadata>
<g transform="translate(0.000000,577.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M0 3294 l0 -2476 25 16 c31 20 104 21 152 1 20 -8 38 -14 40 -12 2 2
-8 35 -23 73 -49 129 -29 246 43 260 51 10 109 -12 159 -58 43 -40 44 -40 44
-15 0 41 60 120 99 130 28 7 32 11 26 30 -24 70 -15 385 16 637 44 346 171
715 351 1023 34 58 35 77 5 77 -43 0 -242 47 -277 65 -68 35 -196 130 -248
185 -83 86 -119 154 -153 286 -31 124 -38 237 -18 307 13 49 15 49 91 -15 177
-151 388 -309 477 -357 42 -23 108 -60 146 -81 76 -43 194 -83 228 -78 19 3
23 12 28 60 4 32 12 65 19 73 15 18 16 17 -35 34 -88 29 -255 122 -255 141 0
5 12 15 27 22 24 11 48 10 168 -9 77 -12 179 -22 226 -23 80 0 87 2 111 28 60
64 64 105 11 123 -21 6 -76 30 -122 51 l-84 39 -30 -21 c-21 -16 -32 -19 -40
-11 -19 19 8 54 63 84 46 25 59 27 109 22 31 -3 66 -8 79 -11 77 -16 -65 130
-178 182 -84 38 -150 45 -340 35 -225 -12 -242 -15 -322 -55 -57 -28 -68 -31
-68 -17 0 26 77 95 150 134 206 112 479 177 741 177 l97 0 -20 38 c-37 70 -10
186 68 294 54 75 56 88 23 119 -16 15 -29 36 -29 47 0 12 -4 24 -10 27 -19 12
-10 57 18 94 69 89 125 236 167 431 24 113 41 148 68 137 19 -7 43 -83 52
-162 l7 -60 33 90 c18 50 36 110 40 135 10 61 55 111 55 61 0 -11 9 -35 20
-54 29 -49 40 -235 17 -289 -9 -21 -12 -38 -8 -38 4 0 34 22 65 50 31 27 66
55 78 61 20 11 21 9 14 -22 -3 -18 -24 -72 -46 -119 -22 -48 -40 -90 -40 -94
0 -14 43 17 110 80 143 136 324 456 306 545 -4 21 -1 31 12 38 11 7 -402 10
-1260 11 l-1278 0 0 -2476z"/>
<path d="M2613 5669 c17 -82 18 -107 9 -133 -7 -18 -12 -47 -12 -64 0 -18 -14
-60 -31 -93 -17 -34 -28 -64 -25 -67 10 -10 49 17 129 88 43 39 84 70 92 70
23 0 17 -31 -15 -79 -17 -24 -30 -49 -30 -56 0 -6 -32 -58 -70 -115 -39 -56
-69 -104 -67 -106 4 -5 111 33 153 54 33 17 42 18 57 7 9 -7 17 -17 17 -23 0
-16 -104 -125 -134 -141 -14 -8 -26 -17 -26 -20 0 -4 23 -17 50 -30 53 -25
100 -63 100 -80 0 -19 -36 -30 -116 -36 -43 -3 -103 -8 -133 -11 l-54 -6 82
-80 c92 -90 185 -225 230 -331 34 -83 71 -217 71 -260 0 -15 5 -38 12 -50 18
-34 31 -169 29 -311 -1 -97 2 -133 12 -145 8 -9 29 -43 47 -76 19 -33 58 -96
87 -139 64 -93 107 -175 122 -233 10 -36 17 -44 49 -54 59 -18 220 -22 467 -9
127 6 316 15 420 20 184 9 267 15 311 25 46 10 364 35 451 35 64 0 93 -4 96
-12 3 -7 6 566 6 1275 l1 1287 -1204 0 -1203 0 20 -101z"/>
<path d="M4971 3138 c-20 -33 -89 -96 -165 -153 -23 -17 -103 -92 -179 -168
-77 -75 -145 -137 -153 -137 -8 0 -27 -21 -43 -47 -29 -47 -30 -47 -178 -99
-81 -29 -158 -53 -171 -53 -12 -1 -61 -15 -109 -31 -50 -18 -106 -30 -133 -30
-25 1 -101 -2 -170 -6 -100 -5 -136 -3 -179 10 -30 9 -70 16 -89 16 -33 0 -33
-1 -25 -32 4 -18 8 -92 8 -164 l0 -132 32 -20 c17 -12 70 -64 117 -117 68 -76
96 -119 140 -208 58 -118 106 -256 106 -302 0 -24 3 -26 23 -20 12 3 42 9 67
12 69 8 83 -18 98 -180 16 -176 45 -309 96 -446 24 -64 48 -129 54 -146 17
-50 52 -247 52 -295 0 -69 -42 -141 -129 -221 -99 -91 -141 -111 -239 -112
-91 -2 -129 14 -157 67 -23 42 -35 44 -76 14 -35 -26 -138 -36 -191 -19 -60
20 -78 45 -78 106 0 47 4 57 24 70 41 27 148 62 227 74 41 6 89 14 107 17 19
3 32 11 32 20 0 8 12 42 26 75 24 58 25 66 15 145 -7 57 -25 120 -57 204 -26
66 -50 120 -53 120 -16 -1 -49 -42 -73 -90 -56 -110 -125 -182 -277 -287 -66
-46 -158 -73 -248 -73 -82 0 -93 -4 -173 -65 -85 -65 -188 -116 -290 -143
-139 -38 -226 -46 -470 -45 -201 1 -250 4 -339 23 -57 12 -116 20 -130 17 -14
-3 -73 -22 -131 -42 -97 -34 -111 -37 -192 -33 l-87 4 -6 -40 c-4 -23 -9 -55
-12 -73 -7 -43 -51 -82 -104 -92 -25 -5 786 -9 1934 -10 l1977 -1 0 1585 c0
872 -2 1585 -4 1585 -2 0 -14 -15 -25 -32z"/>
<path d="M0 358 l0 -358 458 1 c393 1 450 2 407 14 -146 37 -255 105 -435 270
-30 28 -102 83 -160 122 -173 118 -218 166 -256 271 -11 32 -13 -14 -14 -320z"/>
</g>
</svg>
Assuming you have a transparent "input.png", first convert all nontransparent pixels to white, then use the "-edge" option to find the transitions between transparent and white:
convert input.png -negate -threshold 1 -edge 1 edge.png
Note that this will not only outline the image but will outline any "holes" in it as well. For example, try it with the built-in "logo:" image:
convert logo: -transparent white logotrans.png
convert logotrans.png -negate -threshold 1 -edge 1 t.png
which transforms this
to this

Postgres performance issue in my Rails app

I'm using derailed_benchmark gem to track my app performance:
$ PATH_TO_HIT="/api/v2/feed.json?per_page=30&page=1&category_name=Feed" USER_SERVER=webrick TEST_COUNT=20 bundle exec derailed exec perf:stackprof
==================================
Mode: cpu(1000)
Samples: 20708 (0.42% miss rate)
GC: 3219 (15.54%)
==================================
TOTAL (pct) SAMPLES (pct) FRAME
4720 (22.8%) 4694 (22.7%) block in ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#exec_cache
542 (2.6%) 502 (2.4%) ActiveSupport::Inflector#underscore
413 (2.0%) 413 (2.0%) ActiveSupport::PerThreadRegistry#instance
364 (1.8%) 364 (1.8%) ActiveRecord::QueryMethods#validate_order_args
309 (1.5%) 309 (1.5%) block in ActiveSupport::Inflector#apply_inflections
282 (1.4%) 282 (1.4%) ThreadSafe::NonConcurrentCacheBackend#[]
257 (1.2%) 257 (1.2%) ActiveRecord::Relation#initialize
410 (2.0%) 235 (1.1%) ActiveRecord::Relation#initialize_copy
229 (1.1%) 229 (1.1%) ActiveRecord::Delegation::DelegateCache#relation_delegate_class
212 (1.0%) 212 (1.0%) block in ActiveRecord::Relation::Merger#merge
562 (2.7%) 198 (1.0%) ActiveRecord::QueryMethods#preprocess_order_args
190 (0.9%) 189 (0.9%) ActiveRecord::Core::ClassMethods#arel_table
181 (0.9%) 181 (0.9%) JSON#parse
175 (0.8%) 175 (0.8%) ActiveRecord::Relation#reset
165 (0.8%) 165 (0.8%) ActiveRecord::Attribute#initialize
153 (0.7%) 153 (0.7%) ActiveRecord::Relation#values
151 (0.7%) 151 (0.7%) ActiveRecord::Inheritance::ClassMethods#base_class
333 (1.6%) 151 (0.7%) ActiveRecord::Scoping::Default::ClassMethods#build_default_scope
144 (0.7%) 144 (0.7%) Skylight::Normalizers::ActiveRecord::SQL#extract_rust
142 (0.7%) 142 (0.7%) ActiveRecord::QueryMethods#joins_values
138 (0.7%) 138 (0.7%) block (4 levels) in Class#class_attribute
195 (0.9%) 133 (0.6%) ActiveRecord::DynamicMatchers#respond_to?
158 (0.8%) 121 (0.6%) ActiveRecord::QueryMethods#where_values=
125 (0.6%) 115 (0.6%) ActiveRecord::Reflection::AssociationReflection#klass
113 (0.5%) 113 (0.5%) ActiveRecord::Result#initialize_copy
110 (0.5%) 110 (0.5%) Arel::Table#initialize
193 (0.9%) 109 (0.5%) ActiveRecord::ConnectionAdapters::PostgreSQL::Utils#extract_schema_qualified_name
114 (0.6%) 106 (0.5%) Arel::Nodes::Binary#hash
104 (0.5%) 104 (0.5%) ActiveRecord::QueryMethods#extending_values
99 (0.5%) 99 (0.5%) ActiveRecord::QueryMethods#order_values
How can I fix the "block in ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#exec_cache" performance issue?
UPDATE
After running same command with "config.middleware.delete "ActiveRecord::QueryCache" in my config/application.rb
the results are:
==================================
Mode: cpu(1000)
Samples: 21116 (0.42% miss rate)
GC: 2213 (10.48%)
==================================
TOTAL (pct) SAMPLES (pct) FRAME
5619 (26.6%) 5600 (26.5%) block in ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#exec_cache
2268 (10.7%) 2268 (10.7%) block in ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#exec_no_cache
421 (2.0%) 383 (1.8%) ActiveSupport::Inflector#underscore
304 (1.4%) 304 (1.4%) ActiveSupport::PerThreadRegistry#instance
294 (1.4%) 294 (1.4%) block in ActiveSupport::Inflector#apply_inflections
270 (1.3%) 270 (1.3%) ThreadSafe::NonConcurrentCacheBackend#[]
245 (1.2%) 245 (1.2%) ActiveRecord::Relation#initialize
229 (1.1%) 229 (1.1%) ActiveRecord::QueryMethods#validate_order_args
219 (1.0%) 219 (1.0%) ActiveRecord::Delegation::DelegateCache#relation_delegate_class
207 (1.0%) 207 (1.0%) ActiveRecord::Inheritance::ClassMethods#base_class
285 (1.3%) 188 (0.9%) ActiveRecord::Relation#initialize_copy
184 (0.9%) 184 (0.9%) ActiveRecord::Attribute#initialize
181 (0.9%) 179 (0.8%) ActiveRecord::Core::ClassMethods#arel_table
175 (0.8%) 175 (0.8%) Skylight::Normalizers::ActiveRecord::SQL#extract_rust
165 (0.8%) 165 (0.8%) block in ActiveRecord::Relation::Merger#merge
147 (0.7%) 147 (0.7%) block (4 levels) in Class#class_attribute
374 (1.8%) 145 (0.7%) ActiveRecord::QueryMethods#preprocess_order_args
113 (0.5%) 113 (0.5%) ActiveRecord::Relation#values
112 (0.5%) 112 (0.5%) ActiveRecord::QueryMethods#joins_values
171 (0.8%) 109 (0.5%) ActiveRecord::ConnectionAdapters::PostgreSQL::Utils#extract_schema_qualified_name
99 (0.5%) 99 (0.5%) Arel::Table#initialize
97 (0.5%) 97 (0.5%) ActiveRecord::Relation#reset
271 (1.3%) 96 (0.5%) ActiveRecord::Scoping::Default::ClassMethods#build_default_scope
107 (0.5%) 95 (0.4%) ActiveRecord::Reflection::AssociationReflection#klass
93 (0.4%) 93 (0.4%) ActiveRecord::QueryMethods#order_values
125 (0.6%) 93 (0.4%) ActiveRecord::QueryMethods#where_values=
88 (0.4%) 88 (0.4%) ActiveRecord::Reflection::ThroughReflection#active_record
106 (0.5%) 87 (0.4%) Skylight::Trace#start
81 (0.4%) 81 (0.4%) ActiveRecord::QueryMethods#check_cached_relation
80 (0.4%) 80 (0.4%) ActiveRecord::QueryMethods#where_values
UDPATE 2
After running the query with "wall time" mode and not "cpu time" mode, this is the results:
==================================
Mode: wall(1000)
Samples: 41424 (1.92% miss rate)
GC: 3648 (8.81%)
==================================
TOTAL (pct) SAMPLES (pct) FRAME
4780 (11.5%) 4718 (11.4%) block in ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#exec_cache
2783 (6.7%) 2783 (6.7%) block in ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#exec_no_cache
1088 (2.6%) 1088 (2.6%) ActiveSupport::PerThreadRegistry#instance
934 (2.3%) 934 (2.3%) ThreadSafe::NonConcurrentCacheBackend#[]
1031 (2.5%) 926 (2.2%) ActiveSupport::Inflector#underscore
739 (1.8%) 739 (1.8%) block in ActiveSupport::Inflector#apply_inflections
626 (1.5%) 626 (1.5%) ActiveRecord::Relation#initialize
589 (1.4%) 589 (1.4%) ActiveRecord::Delegation::DelegateCache#relation_delegate_class
577 (1.4%) 577 (1.4%) ThreadSafe::NonConcurrentCacheBackend#get_or_default
549 (1.3%) 549 (1.3%) ActiveRecord::Attribute#initialize
497 (1.2%) 497 (1.2%) block in ActiveRecord::Relation::Merger#merge
497 (1.2%) 497 (1.2%) ActiveRecord::QueryMethods#validate_order_args
702 (1.7%) 424 (1.0%) ActiveRecord::Relation#initialize_copy
419 (1.0%) 417 (1.0%) ActiveRecord::Core::ClassMethods#arel_table
384 (0.9%) 384 (0.9%) ActiveRecord::Inheritance::ClassMethods#base_class
383 (0.9%) 383 (0.9%) block (4 levels) in Class#class_attribute
358 (0.9%) 358 (0.9%) Skylight::Normalizers::ActiveRecord::SQL#extract_rust
329 (0.8%) 329 (0.8%) ActiveRecord::Base.logger
321 (0.8%) 321 (0.8%) rescue in Net::BufferedIO#rbuf_fill
315 (0.8%) 315 (0.8%) ActiveRecord::Core#update_attributes_from_transaction_state
314 (0.8%) 314 (0.8%) ActiveRecord::ConnectionAdapters::AbstractAdapter#type_map
795 (1.9%) 298 (0.7%) ActiveRecord::QueryMethods#preprocess_order_args
284 (0.7%) 284 (0.7%) Arel::Table#initialize
279 (0.7%) 279 (0.7%) ActiveRecord::Relation#values
278 (0.7%) 278 (0.7%) ActiveRecord::Relation#reset
734 (1.8%) 264 (0.6%) ActiveRecord::Scoping::Default::ClassMethods#build_default_scope
263 (0.6%) 263 (0.6%) ActiveRecord::QueryMethods#joins_values
394 (1.0%) 258 (0.6%) ActiveRecord::ConnectionAdapters::PostgreSQL::Utils#extract_schema_qualified_name
15323 (37.0%) 249 (0.6%) ActiveRecord::Querying#find_by_sql
257 (0.6%) 246 (0.6%) ActiveRecord::Reflection::AssociationReflection#klass
I'm building my feed.json using index.json.jbuilder, this is how it looks:
json.battles #battles do |battle|
if (battle.products.size == 2)
battle_results = battle.calculate_results
json.(battle, :id)
vote = battle.votes.find_by(user_id: current_user.id)
json.voted vote.present?
if vote
json.product_voted vote.product.id == battle.products[0].id ? "first" : "second"
end
json.mybattle battle.try(:user).try(:id) == current_user.id
json.user do
username = ""
if (battle.try(:user).try(:nickname).present?)
username = battle.try(:user).try(:nickname)
else
username = battle.try(:user).try(:name).try(:downcase).try(:delete,' ')
end
json.username username
json.user_id battle.try(:user_id)
json.profile_image battle.try(:user).try(:image) || ""
json.full_name battle.try(:user).try(:name) || ""
end
json.votes battle_results[:votes]
json.created_at time_ago_in_words(battle.created_at) + " ago"
json.title battle.title
json.first_product do
first_product = battle.products[0]
json.id first_product.id
json.voted first_product.votes.find_by(user_id: current_user.id).present?
json.percentage battle_results[:percentage_product_one]
# json.percentage_after_voting battle_results[:percentage_after_voting_product_one]
json.name first_product.name
json.price SearchFunctions.convert_currency(first_product.price.to_s, current_user.currency_code, 'USD')
# json.price first_product.price.to_s
json.url first_product.url
if first_product.images["sub"] && first_product.images["sub"].kind_of?(Array)
first_product.images["sub"] = first_product.images["sub"].first(10)
end
json.images first_product.images
json.manufacturer first_product.manufacturer
json.description first_product.description
json.is_user_saved first_product.saved_products.find_by(user_id: current_user.id).present?
json.saved_count first_product.saved_products.length
end
json.second_product do
second_product = battle.products[1]
json.id second_product.id
json.voted second_product.votes.find_by(user_id: current_user.id).present?
json.percentage battle_results[:percentage_product_two]
# json.percentage_after_voting battle_results[:percentage_after_voting_product_two]
json.name second_product.name
json.price SearchFunctions.convert_currency(second_product.price.to_s, current_user.currency_code, 'USD')
# json.price second_product.price.to_s
json.url second_product.url
if second_product.images["sub"] && second_product.images["sub"].kind_of?(Array)
second_product.images["sub"] = second_product.images["sub"].first(10)
end
json.images second_product.images
json.manufacturer second_product.manufacturer
json.description second_product.description
json.is_user_saved second_product.saved_products.find_by(user_id: current_user.id).present?
json.saved_count second_product.saved_products.length
end
end
end
Well, this may be silly answer, but you probably should decrease or optimise number of queries executed during building feed.json. Check for N+1 queries, for example maybe you are loading author for each feed item or something like that.
You can use bullet gem to help you find N+1 queries. And you can fix those by adding includes to your queries.
Update Based on json view.
It is pretty big json and it looks like you use a lot of models from your application. BY looking at this it is impossible to give you any clear guidelines on how to optimise this. You should probably paste your whole app here, but I think that's not appropriate for SO.
For sure there is a lot space for improvement on database side, but I think your best and easiest way is to just cache this view. By caching I mean using fragment caching for each separate battle.
json.battles #battles do |battle|
if (battle.products.size == 2)
json.cache! "#{battle.id}/#{battle.updated_at}" do
battle_results = battle.calculate_results
json.(battle, :id)
vote = battle.votes.find_by(user_id: current_user.id)
json.voted vote.present?
if vote
json.product_voted vote.product.id == battle.products[0].id ? "first" : "second"
end
json.mybattle battle.try(:user).try(:id) == current_user.id
json.user do
username = ""
if (battle.try(:user).try(:nickname).present?)
username = battle.try(:user).try(:nickname)
else
username = battle.try(:user).try(:name).try(:downcase).try(:delete,' ')
end
json.username username
json.user_id battle.try(:user_id)
json.profile_image battle.try(:user).try(:image) || ""
json.full_name battle.try(:user).try(:name) || ""
end
json.votes battle_results[:votes]
json.created_at time_ago_in_words(battle.created_at) + " ago"
json.title battle.title
json.first_product do
first_product = battle.products[0]
json.id first_product.id
json.voted first_product.votes.find_by(user_id: current_user.id).present?
json.percentage battle_results[:percentage_product_one]
# json.percentage_after_voting battle_results[:percentage_after_voting_product_one]
json.name first_product.name
json.price SearchFunctions.convert_currency(first_product.price.to_s, current_user.currency_code, 'USD')
# json.price first_product.price.to_s
json.url first_product.url
if first_product.images["sub"] && first_product.images["sub"].kind_of?(Array)
first_product.images["sub"] = first_product.images["sub"].first(10)
end
json.images first_product.images
json.manufacturer first_product.manufacturer
json.description first_product.description
json.is_user_saved first_product.saved_products.find_by(user_id: current_user.id).present?
json.saved_count first_product.saved_products.length
end
json.second_product do
second_product = battle.products[1]
json.id second_product.id
json.voted second_product.votes.find_by(user_id: current_user.id).present?
json.percentage battle_results[:percentage_product_two]
# json.percentage_after_voting battle_results[:percentage_after_voting_product_two]
json.name second_product.name
json.price SearchFunctions.convert_currency(second_product.price.to_s, current_user.currency_code, 'USD')
# json.price second_product.price.to_s
json.url second_product.url
if second_product.images["sub"] && second_product.images["sub"].kind_of?(Array)
second_product.images["sub"] = second_product.images["sub"].first(10)
end
json.images second_product.images
json.manufacturer second_product.manufacturer
json.description second_product.description
json.is_user_saved second_product.saved_products.find_by(user_id: current_user.id).present?
json.saved_count second_product.saved_products.length
end
end
end
end
I added some code at line 3. I just wrote this out of my head, I am not exactly sure if syntax is 100% correct, but it should give you a hint. Also remember that caching is not enabled in development environment. To enable it you need to set config.action_controller.perform_caching = true in config/environments/developement.rb

Drawing editable shapes on large image - performance issue

I'm creating a drawing app using Xamarin. Althought, my question is also addressed to iOS developers.
My app loads huge images (20k x 20k). I'm using CATiledLayer to load image tiles dynamically. Thanks to that, zoom and scrool run smoothly.
However, I need to implement effective drawing mechanism. My first attempt was to draw a shape as a separate UIView and add it to TiledView's Subviews. Unfortunately, when I add about 20/30 new shapes then app crashes (I guess it's a problem with memory).
I need to find a better solution. My shapes need to be editable, so I need to recognize selection on each shape which is already drawn on the TiledView.
What could be the best mechanism to avoid memory trouble in that case?
CRASH LOG:
ncident Identifier: C9C8CCA2-C696-47E2-AA9D-A8C31FFBAF31
CrashReporter Key: a67a03df60dd7720558ad435b234abe43d11b3f7
Hardware Model: iPad5,4
OS Version: iPhone OS 8.1.3 (12B466)
Kernel Version: Darwin Kernel Version 14.0.0: Mon Jan 12 21:30:33 PST 2015; root:xnu-2783.3.26~3/RELEASE_ARM64_T7001
Date: 2015-09-10 17:03:33 +0200
Time since snapshot: 90 ms
Free pages: 1933
Active pages: 121405
Inactive pages: 60751
Speculative pages: 80
Throttled pages: 0
Purgeable pages: 2
Wired pages: 315568
File-backed pages: 58380
Anonymous pages: 123856
Compressions: 1741284
Decompressions: 447152
Compressor Size: 8767
Uncompressed Pages in Compressor: 74266
Page Size: 16384
Largest process: MyAppMobileiOS
Processes
Name | | CPU Time| rpages| purgeable| recent_max| lifetime_max| fds | [reason] | (state)
lockbot <53895193cd6633249ce169c478502497> 0.055 202 0 - 725 50 (daemon) (idle)
pfd <8ce9eb62121b30789b79e1f436991382> 0.015 142 0 - 292 50 (daemon) (idle)
cloudd <c52c2112d0273e96b8590473a61e7620> 6.121 690 0 - 2504 50 (daemon) (idle)
WirelessRadioMan <c4181e6d863133e8aa0c95e77a7bb206> 0.026 289 0 - 835 50 (daemon) (idle)
adid <4311d58b77b73fd4bf2c9e9e0bbe7102> 0.028 138 0 - 567 50 (daemon) (idle)
com.apple.Mobile <a1ced7e68eda30b1937b477edc680e47> 0.020 185 0 - 716 50 (daemon) (idle)
com.apple.Mobile <865e9aa3dce0392393a2445e115bc26f> 0.022 185 0 - 518 50 (daemon) (idle)
softwareupdated <fbc339ae37193ef1b1bd2a9d5e9bcbe4> 0.031 212 0 - 601 50 (daemon) (idle)
mobileassetd <2a22e27544cc3061a22b02482e465e18> 0.336 581 0 - 2101 50 (daemon) (idle)
misd <33855e3c639237059e7c9d7dda6aca90> 0.033 206 0 - 823 50 (daemon) (idle)
CallHistorySyncH <bc9285858ef43d54840605171b184fa2> 0.060 431 0 - 1252 50 (daemon) (idle)
IMDPersistenceAg <5fa1bcbbda9430798334affdb70def14> 0.030 277 0 - 930 50 (daemon) (idle)
timed <6fa98ab7f5de312b9bfed47e04e3a43e> 0.032 277 0 - 1031 50 (daemon) (idle)
AppleIDAuthAgent <32f4603750953460b1a7cb4969fd7cf5> 0.045 318 0 - 1743 50 (daemon) (idle)
keybagd <04b17e6606dd367885be8033ee6f077a> 0.015 161 0 - 381 50 (daemon) (idle)
biometrickitd <6298f82913613677b4b7207a26c585ec> 0.421 261 0 - 786 50 (daemon) (idle)
mediaremoted <baa09addc0ae3b55a72cfe7b2699a962> 0.033 318 0 - 1294 50 (daemon) (idle)
recentsd <c21dbb35d7a232298410e388a1752a23> 0.063 420 0 - 1455 50 (daemon) (idle)
softwareupdatese <4709ed9e2ad1314c8967b0ccefdd61eb> 0.258 977 0 - 1713 50 (daemon) (idle)
geod <0f816c02eb453d968c7bd1e4c1ecb994> 0.149 642 0 - 1539 50 (daemon) (idle)
MobileGestaltHel <7c83454f8c06366ebf04aea3bb88684b> 0.040 180 0 - 559 50 (daemon) (idle)
calaccessd <0a7ad7bbfb523bfdbae43aa6f21279f6> 0.191 631 0 - 1786 50 (daemon) (idle)
awdd <58036e1703903ee798a8803de204c300> 0.059 443 0 - 1216 50 (daemon) (idle)
lsuseractivityd <a9a6b77429543057b3e8dcf41f843882> 0.065 425 0 - 1977 50 (daemon) (idle)
com.apple.uifoun <87486c98c2873ab7a0a1a044a5a0cfd3> 0.029 275 0 - 939 50 (daemon) (idle)
DuetHeuristic-BM <e333cee8cc9e3dc282446623596bab84> 0.117 300 0 - 1117 50 (daemon) (idle)
healthd <9c827f1747f83866b20dcf4e398cc04d> 0.034 306 0 - 1035 50 (daemon) (idle)
com.apple.Stream <203112144ccc3e84acf77312bcf37070> 2.857 187 0 - 753 50 (daemon) (idle)
bird <646b4254a19a34caa4840f8001fd4420> 0.058 427 0 - 1779 50 (daemon) (idle)
assetsd <4f3af4038d6a31e8877838accafce687> 0.096 671 0 - 2159 50 (daemon) (idle)
findmydeviced <36e2b8af21133fb7a5a6271ab4d4f8de> 0.139 638 0 - 2122 50 (daemon) (idle)
nehelper <8837f4419593305c9831c00d25a97eaf> 0.869 258 0 - 822 50 (daemon) (idle)
assistantd <dff049e87a5932fabdffe16c4714f9a7> 0.071 544 0 - 2332 50 (daemon) (idle)
profiled <7b81e857b6ef3a7587f5d82f33801dcb> 1.409 596 0 - 2416 50 (daemon) (idle)
pkd <caa0944ef38235e7ac99199add47d66d> 0.038 289 0 - 707 50 (daemon) (idle)
accountsd <75b3925e9bec337abda4f51e69fc8aa3> 8.768 712 0 - 1816 50 (daemon) (idle)
mobactivationd <73043288866c3d4ca5eac0125c844edf> 0.084 244 0 - 858 50 (daemon) (idle)
misagent <ddb04cb78e2537a088fbe6c299c0ed8e> 0.046 177 0 - 418 50 (daemon) (idle)
mobile_installat <edbce91b2e3c348f8f4ad95fb6b1ad46> 0.447 289 0 - 1015 50 (daemon) (idle)
streaming_zip_co <60920fc5a7c335beb44817afc5fe72c3> 3.391 281 0 - 1111 50 (daemon) (idle)
coreduetd <aef9d0f50b733e809cad3a94e579e421> 82.665 1127 0 - 2401 50 (daemon) (idle)
sandboxd <bd8f8b9f25243f9986b3ce97fee405cc> 0.374 196 0 - 732 50 (daemon) (idle)
installd <99b95276bb41375fa847581e6fbe6374> 0.707 359 0 - 1339 50 (daemon) (idle)
swcd <05434abfd6103a369f3321d5bd15c96e> 0.011 194 0 - 533 50 (daemon) (idle)
containermanager <7036996ffbed3c0e9b50d8868efe28e0> 0.214 248 0 - 702 50 (daemon) (idle)
securityd <90eafc65815f356fab632f1752d53b24> 22.648 661 0 - 1707 50 (daemon) (idle)
gamecontrollerd <f41fdd3b557336b6b146bb00a33eab9f> 0.028 287 0 - 1200 50 (daemon) (idle)
aosnotifyd <8928d77645f134aa9150588fe1c143cf> 0.131 581 0 - 2008 50 (daemon) (idle)
syncdefaultsd <6f6a68c431cc37238c9e618de999477c> 0.065 421 0 - 1260 50 (daemon) (idle)
nsurlstoraged <85de3fa57a65304a959e6c2956042080> 1.553 451 0 - 1471 50 (daemon) (idle)
coresymbolicatio <09a629143bfc3a7d9228b414bb958ae9> 0.015 132 0 - 727 50 (daemon) (idle)
diagnosticd <274578acfd6d358a95c961c0bab148a9> 0.012 148 0 - 269 50 (daemon) (idle)
seld <c955a19f0fbd33118c611afe19061379> 3.394 303 0 - 1156 50 (daemon)
nsurlsessiond <ab90763d8a453fc68012fabc4b4f55fb> 2952.876 624 0 - 2134 50 (daemon)
nfcd <edf2425212b632dbb5ef155ee1600bbb> 2.724 255 0 - 680 50 (daemon)
passd <56971afa88b53f05a37688cad47b4160> 157.996 810 0 - 2715 50 (daemon)
afcd <4c7ac1d53ab73eada82020285315196f> 0.038 177 0 - 402 50 (daemon)
notification_pro <b143453e80393938a7ba23a0181dc52c> 2.654 215 0 - 625 50 (daemon)
MobileMail <4b48abd990e93dbea47db1cbf328da9e> 0.317 1302 0 - 3650 50 (resume) (continuous)
lsd <f554bd07b90a3cfc9d9ef9f8e234833c> 36.562 474 0 - 1401 50 (daemon)
tccd <f2878273872231afa1a6e0af2dcb73a6> 2.322 310 0 - 1084 50 (daemon)
kbd <f66b6a1e58b93ad9a2c5bd2e1b278a89> 3.316 895 0 - 3607 50 (daemon)
MyAppMobileiOS <3f455836ca6a322eac86d527e1523ab1> 14.932 307041 0 - 139221 50 [per-process-limit] (frontmost) (resume)
ptpd <a06176d3eefe3e3c8549bb4f6d340658> 2.108 774 0 - 2011 50 (daemon)
BTServer <fb2cd87aeac73d17bf13c86301b5b484> 66.048 631 0 - 2001 50 (daemon)
wifid <dd76567ec94c37d9b1c94cd96424b2a9> 1099.027 1335 0 - 2267 50 (daemon)
lockdownd <6e013570f34d36daa8738867f8421001> 162.384 436 0 - 2710 50 (daemon)
discoveryd <68f73878299336d7872b0ae9ce3f7f08> 2956.940 935 0 - 2164 100 (daemon)
imagent <432c43382eeb3724894a973cd6f5a399> 50.719 711 0 - 1777 50 (daemon)
identityservices <9d4b00e3c6003685ac8697c59f4e4d38> 149.813 954 0 - 2601 50 (daemon)
mediaserverd <a0354e528bc431958df0d50830bead36> 33.273 1696 0 - 4212 50 (daemon)
cfprefsd <4325eab208063b998046460a4c2ee484> 98.702 537 0 - 2497 50 (daemon)
syslogd <05f6b5e5512938a892bac5af23ab1c08> 1605.858 320 0 - 2162 50 (daemon)
iaptransportd <c10fd2029e2e315d92873b74a92c6e9c> 181.800 354 0 - 983 50 (daemon)
powerd <2b4ae8758a5b3b709a97c452ec08923b> 286.535 406 0 - 727 50 (daemon)
apsd <bb925404cb1137b09b85671a8d2c7656> 312.283 1037 0 - 4497 50 (daemon)
networkd <ad1db85ed3c53c6fadbd858f9a88dd20> 237.182 778 0 - 5847 50 (daemon)
dataaccessd <33bcaea3bc473f128685f4df14a115eb> 13.681 960 0 - 2823 50 (daemon)
sharingd <233b174d5619396cb3af72c7d7e51985> 12.777 885 0 - 2694 50 (daemon)
searchd <eff930e81e4d38f796034db851dad1fe> 757.973 1193 0 - 5590 50 (daemon)
locationd <a57577b0423133a0b17579011ef1c65f> 2051.091 3549 0 - 5035 50 (daemon)
SpringBoard <d9487116f8c239d2b5fb32c12168cac1> 10.514 6275 0 - 25629 50
backboardd <45eb8ac74abd31b386cb3b7ba27618ea> 54.692 97037 0 - 131444 50 (daemon)
fseventsd <16c9b62bb28c388ca10d54dbff18c4f8> 143.831 979 0 - 2080 50 (daemon)
configd <ed40fcde35ae337ab3b70073199564b1> 117.409 1478 0 - 1865 50 (daemon)
fairplayd.A2 <6ca40f79d0ad34d5b4df0a80fce4bc5d> 3.232 176 0 - 1325 50 (daemon)
wirelessproxd <ab1fa7e43a7c3f9393533404c2cc80b8> 2.607 299 0 - 1082 50 (daemon)
assertiond <10ec04add18f3ecd8a8efbb1cc4e2bd6> 52.340 366 0 - 2071 50 (daemon)
distnoted <cb5e76091dc53ceeaf65290f8e197a89> 7.723 244 0 - 500 50 (daemon)
discoveryd_helpe <492c39ae2d643adca0ed971675c77406> 0.151 187 0 - 796 50 (daemon)
filecoordination <519743feb6cb36ff871945656d950d8b> 0.314 298 0 - 1027 50 (daemon)
aggregated <281958649a3130aab6ecb1aa47f0a6c1> 4.644 1092 0 - 2275 50 (daemon)
UserEventAgent <f5a211b9c88e3fa481f2bd1ee1f5a921> 2.033 886 0 - 2815 100 (daemon)
CommCenter <33412ab229c738c8860c70803fed173b> 1329.544 3270 0 - 6434 50 (daemon)
notifyd <5fa8fd5e44c83f64be1475b882b16c82> 1302.113 520 0 - 615 50 (daemon)
ReportCrash <698156bee7ff37c0ab9fd8fe15a6ee32> 0.080 395 0 - 829 50 (daemon)
End

Xcode 6.2 debugger detaches from device on app crash

Xcode 6.2's debugger doesn't seem to be catching a crash from my application. Whenever it crashes, I just get a popup that says:
Restore the connection to "Agile Lab's iPhone 6 Plus" and run "Tag
Beta" again, or if "Tag Beta" is still running, you can attach to it
by selecting Debug > Attach to Process > Tag Beta.
I have breakpoints on and a breakpoint for "All Exceptions." When I go to Window > Devices and hit "View Device Logs" it shows this:
Hardware Model: iPhone7,1
OS Version: iPhone OS 8.1.3 (12B466)
Kernel Version: Darwin Kernel Version 14.0.0: Mon Jan 12 21:30:05 PST 2015; root:xnu-2783.3.26~3/RELEASE_ARM64_T7000
Date: 2015-03-31 15:12:15 -0400
Time since snapshot: 1230 ms
Free pages: 2404
Active pages: 40050
Inactive pages: 18785
Speculative pages: 1206
Throttled pages: 0
Purgeable pages: 524
Wired pages: 147884
File-backed pages: 11282
Anonymous pages: 48760
Compressions: 487127
Decompressions: 189679
Compressor Size: 40449
Uncompressed Pages in Compressor: 103077
Page Size: 16384
Largest process: Tag Beta
Processes
Name | <UUID> | CPU Time| rpages| purgeable| recent_max| lifetime_max| fds | [reason] | (state)
WirelessRadioMan <REMOVED_FOR_PRIVACY> 0.036 295 0 - 889 50 [vm-pageshortage] (daemon) (idle)
nsurlstoraged <REMOVED_FOR_PRIVACY> 0.072 294 0 - 680 50 [vm-pageshortage] (daemon) (idle)
seld <REMOVED_FOR_PRIVACY> 0.052 218 0 - 995 50 [vm-pageshortage] (daemon)
nsurlsessiond <REMOVED_FOR_PRIVACY> 0.285 389 0 - 1326 50 [vm-pageshortage] (daemon)
passd <REMOVED_FOR_PRIVACY> 0.211 623 0 - 2400 50 [vm-pageshortage] (daemon)
nfcd <REMOVED_FOR_PRIVACY> 0.024 192 0 - 634 50 [vm-pageshortage] (daemon)
biometrickitd <REMOVED_FOR_PRIVACY> 0.084 232 0 - 720 50 [vm-pageshortage] (daemon)
debugserver <REMOVED_FOR_PRIVACY> 1.059 212 0 - 703 50 [vm-pageshortage] (daemon)
MobileMail <REMOVED_FOR_PRIVACY> 0.471 1277 0 - 3744 50 [vm-pageshortage] (resume) (continuous)
lsd <REMOVED_FOR_PRIVACY> 0.612 361 0 - 1136 50 [vm-pageshortage] (daemon)
tccd <REMOVED_FOR_PRIVACY> 0.146 281 0 - 968 50 (daemon)
Tag Beta <REMOVED_FOR_PRIVACY> 19.967 97247 524 - 55588 100 (frontmost) (resume)
ptpd <REMOVED_FOR_PRIVACY> 1.226 786 0 - 2356 50 (daemon)
BTServer <REMOVED_FOR_PRIVACY> 0.303 483 0 - 1811 50 (daemon)
wifid <REMOVED_FOR_PRIVACY> 2.303 544 0 - 1786 50 (daemon)
lockdownd <REMOVED_FOR_PRIVACY> 1.481 279 0 - 1007 50 (daemon)
locationd <REMOVED_FOR_PRIVACY> 35.207 2182 0 - 5074 50 (daemon)
discoveryd <REMOVED_FOR_PRIVACY> 4.462 580 0 - 1232 100 (daemon)
mediaserverd <REMOVED_FOR_PRIVACY> 28.952 36002 0 - 5968 50 (daemon)
imagent <REMOVED_FOR_PRIVACY> 0.418 522 0 - 1531 50 (daemon)
iaptransportd <REMOVED_FOR_PRIVACY> 0.333 308 0 - 906 50 (daemon)
identityservices <REMOVED_FOR_PRIVACY> 1.016 724 0 - 2027 50 (daemon)
cfprefsd <REMOVED_FOR_PRIVACY> 1.371 400 0 - 798 50 (daemon)
syslogd <REMOVED_FOR_PRIVACY> 1.376 233 0 - 449 50 (daemon)
powerd <REMOVED_FOR_PRIVACY> 0.608 215 0 - 514 50 (daemon)
apsd <REMOVED_FOR_PRIVACY> 1.141 733 0 - 2076 50 (daemon)
networkd <REMOVED_FOR_PRIVACY> 1.341 650 0 - 1747 50 (daemon)
vmd <REMOVED_FOR_PRIVACY> 0.086 550 0 - 2441 50 (daemon)
dataaccessd <REMOVED_FOR_PRIVACY> 0.571 853 0 - 2657 50 (daemon)
sharingd <REMOVED_FOR_PRIVACY> 0.360 719 0 - 2260 50 (daemon)
searchd <REMOVED_FOR_PRIVACY> 0.402 874 0 - 2886 50 (daemon)
syslog_relay <REMOVED_FOR_PRIVACY> 0.246 113 0 - 237 50 (daemon)
geod <REMOVED_FOR_PRIVACY> 1.152 868 0 - 1847 50 (daemon)
SpringBoard <REMOVED_FOR_PRIVACY> 14.007 6886 0 - 28595 50
backboardd <REMOVED_FOR_PRIVACY> 63.774 13669 524 - 3673 50 (daemon)
UserEventAgent <REMOVED_FOR_PRIVACY> 17.578 916 0 - 2959 100 (daemon)
fseventsd <REMOVED_FOR_PRIVACY> 0.689 387 0 - 629 50 (daemon)
configd <REMOVED_FOR_PRIVACY> 0.729 530 0 - 1544 50 (daemon)
fairplayd.H2 <REMOVED_FOR_PRIVACY> 0.530 149 0 - 1052 50 (daemon)
assertiond <REMOVED_FOR_PRIVACY> 0.319 296 0 - 1012 50 (daemon)
distnoted <REMOVED_FOR_PRIVACY> 0.078 186 0 - 321 50 (daemon)
wirelessproxd <REMOVED_FOR_PRIVACY> 0.068 248 0 - 1065 50 (daemon)
aggregated <REMOVED_FOR_PRIVACY> 23.356 1192 0 - 2375 50 (daemon)
discoveryd_helpe <REMOVED_FOR_PRIVACY> 0.020 153 0 - 752 50 (daemon)
filecoordination <REMOVED_FOR_PRIVACY> 0.030 224 0 - 898 50 (daemon)
DTMobileIS <REMOVED_FOR_PRIVACY> 3.415 642 0 +25 2345 50 (daemon)
gputoolsd <REMOVED_FOR_PRIVACY> 0.285 948 0 - 2340 50 (daemon)
CommCenter <REMOVED_FOR_PRIVACY> 30.132 1626 0 - 5021 50 (daemon)
notifyd <REMOVED_FOR_PRIVACY> 2.168 347 0 - 413 50 (daemon)
ReportCrash <REMOVED_FOR_PRIVACY> 0.043 162 0 - 579 50 (daemon)
**End**
Now if I run the app in production mode, and attach Fabric, it does catch the exception properly:
Fatal Exception: NSInvalidArgumentException
-[TAGFeedJourneyTableViewCell previewImageView]: unrecognized selector sent to instance 0x14271e9d0
Thread : Fatal Exception: NSInvalidArgumentException
0 CoreFoundation 0x000000018349a59c __exceptionPreprocess + 132
1 libobjc.A.dylib 0x0000000193bec0e4 objc_exception_throw + 60
2 CoreFoundation 0x00000001834a1664 __methodDescriptionForSelector
3 CoreFoundation 0x000000018349e418 ___forwarding___ + 928
4 CoreFoundation 0x00000001833a2b6c _CF_forwarding_prep_0 + 92
5 Tag Beta 0x000000010012ca3c -[TAGFeedViewController tableView:didSelectRowAtIndexPath:] (TAGFeedViewController.m:603)
6 UIKit 0x0000000187d71390 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1280
7 UIKit 0x0000000187e2ecdc -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 276
8 UIKit 0x0000000187ccb564 _applyBlockToCFArrayCopiedToStack + 356
9 UIKit 0x0000000187c3ce78 _afterCACommitHandler + 532
10 CoreFoundation 0x0000000183452a50 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32
11 CoreFoundation 0x000000018344f9dc __CFRunLoopDoObservers + 360
12 CoreFoundation 0x000000018344fdbc __CFRunLoopRun + 836
13 CoreFoundation 0x000000018337d0a4 CFRunLoopRunSpecific + 396
14 GraphicsServices 0x000000018c5175a4 GSEventRunModal + 168
15 UIKit 0x0000000187caeaa4 UIApplicationMain + 1488
16 Tag Beta 0x0000000100123f7c main (main.m:14)
17 libdyld.dylib 0x000000019425aa08 start + 4
While it's nice that Fabric is able to catch the issue, It'd be much more helpful if the debugger would catch the exception, so I could see values, stack traces, etc. Is there some setting that I just don't have on or is this an issue with Xcode?

How to analysis crash in Xcode6?

I found crash logs but I can't understand it. I tried from this:How to symbolicate crash log Xcode? but I got stuck in seme step because of I haven't use crash logs before.
Then I pull the log into a folder and then rename it because it contains chinese. And I tried follow this:http://www.juliusparishy.com/articles/symbolicating-ios-8-crash-logs. It didn't work also.
applematoMacBook-Air:crash apple$ DEVELOPER_DIR=`xcode-select -print-path` /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash -o ./myapp-resymbolicated.crash ./MoneyPower.crash ./MoneyPower.app.dSYM
No crash report version in ./MoneyPower.crash at /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash line 957.
Below is the log:
Incident Identifier: 13C0A1CB-2A40-496D-9DEF-DE85F72B84DE
CrashReporter Key: 52577145db78209ce4892c3e02465b6cfdc27b07
Hardware Model: iPhone5,4
OS Version: iPhone OS 8.1 (12B411)
Kernel Version: Darwin Kernel Version 14.0.0: Tue Oct 7 00:04:37 PDT 2014; root:xnu- 2783.3.13~4/RELEASE_ARM_S5L8950X
Date: 2014-11-26 16:57:11 +0800
Time since snapshot: 65 ms
Free pages: 2758
Active pages: 16544
Inactive pages: 7324
Speculative pages: 759
Throttled pages: 170016
Purgeable pages: 0
Wired pages: 33684
File-backed pages: 23985
Anonymous pages: 642
Compressions: 714623
Decompressions: 224424
Compressor Size: 29519
Uncompressed Pages in Compressor: 71670
Page Size: 4096
Largest process: kbd
Processes
Name | <UUID> | CPU Time| rpages| purgeable| recent_max| lifetime_max| fds | [reason] | (state)
AppleIDAuthAgent <e05ab3faa1243f3a900bac613820c3cd> 0.158 216 0 - 1257 50 (daemon) (idle)
cplogd <8e9ff218b5de30428df98e6d088cc6e7> 0.122 116 0 - 457 50 (daemon) (idle)
ind <35c1864a720232ea9b42aeb1df454ac6> 0.420 360 0 - 1221 50 (daemon) (idle)
MailCompositionS <fb46b62148b432bca350f4f0962e5baa> 2.197 4089 0 - 4928 50 (suspended)
QSInstaller <0ac1afc270963cba8e7ceacfbd88327b> 0.796 401 0 - 1983 50 (daemon) (idle)
Eudic_Pro_us <c767d73448bd38f381ef61e8059487f0> 59.839 5178 0 - 12422 50 (suspended)
CloudKeychainPro <bf2dc17596d9381bb02f0d3848253d29> 0.264 123 0 - 376 50 (daemon) (idle)
rocketd <379e73e3ec7b395296a9185cdb886153> 0.025 67 0 - 158 50 (daemon) (idle)
TingIPhone <fead8493c4d53af88370a65b90c8e13e> 2.015 2293 0 - 8027 50 (suspended)
MessagesNotifica <c21e17f099763f079a8909e53939cab6> 1.292 1609 0 - 3871 50 (suspended)
IMDPersistenceAg <8709c1b2c8ac37c38331026019487c4a> 1.948 444 0 - 4001 50 (daemon) (idle)
QZone <bad24b7fc2e33bc7ad0f9e35fe56fcdc> 53.227 8769 0 - 17340 100 (suspended)
adid <318b35f544ef30458c779f196840141b> 0.187 118 0 - 528 50 (daemon) (idle)
com.apple.facebo <0aa3451928ec326781922890b85b6376> 0.418 357 0 - 1324 50 (daemon) (idle)
MicroMessenger <5d0e48e5bb623e088cb372a1981d09cd> 31.297 6579 0 - 17535 100 (suspended)
coresymbolicatio <015dae53431f3f89a557a3f1ed748ba1> 0.103 82 0 - 187 50 (daemon) (idle)
diagnosticd <4593765ed9a833228e3f1515308b20fa> 0.443 121 0 - 254 50 (daemon) (idle)
AssetCacheLocato <6018ec37b6ad3dde8cb6d576b24b61e7> 0.473 235 0 - 849 50 (daemon) (idle)
com.apple.Stream <7b86d693c03f3149a1eba23d4d834eeb> 27.701 161 0 - 739 50 (daemon) (idle)
CallHistorySyncH <8ce6f70f70273829936775ea5cccdd12> 1.824 428 0 - 1225 50 (daemon) (idle)
fmfd <eb696bfb4c03371b83b1f4e89e446eeb> 1.826 422 0 - 1348 50 (daemon) (idle)
cloudphotod <2edd5622cf23381f8b22c92bc4b7a5c3> 6.342 617 0 - 1752 50 (daemon) (idle)
CacheDeleteGeoTi <bb953149b86a33cf8cc9226b9a74bd34> 0.196 146 0 - 562 50 (daemon) (idle)
mobileassetd <9a378084bd953954a1dd760d49fe7ede> 2.244 392 0 - 1792 50 (daemon) (idle)
geod <48710d774a42357ea97f9ad0a527ee5f> 4.365 635 0 - 1434 50 (daemon) (idle)
CacheDeleteAppCo <ee9139b8e1db3d3ba6d20a08a2cf08ac> 9.867 343 0 - 1226 50 (daemon) (idle)
CacheDeleteMobil <9cbeda33d15f3ee4af73660e85b8a738> 0.416 345 0 - 1489 50 (daemon) (idle)
CacheDeleteITune <9b54c0dcf93a3ddfa5f461436ea11664> 0.436 185 0 - 815 50 (daemon) (idle)
deleted <11e9a7b04fd335f5ac6e6f9e7922deff> 0.278 153 0 - 395 50 (daemon) (idle)
rtcreportingd <6a3478eeeec93f1797f432895851613a> 1.912 349 0 - 1129 50 (daemon) (idle)
SOHUVideo <8f2a763084bd33df91fb4d49bec096ce> 1039.212 5915 0 - 11547 100 (suspended)
vvebo <d76cf63bb0543b75b0f28e0ddc9bfe39> 439.540 13452 0 - 21578 200 (suspended)
pipelined <75d09f2b0b493a2d84a7043a5ce96360> 0.524 346 0 - 1858 50 (daemon) (idle)
librariand <72539244d3923f2d88cd15d9ce08c0bc> 0.601 243 0 - 859 50 (daemon) (idle)
com.apple.Stream <7b86d693c03f3149a1eba23d4d834eeb> 2.964 138 0 - 555 50 (daemon) (idle)
swcd <09d4cfa1662e3483b7da852d10cf45d5> 0.108 163 0 - 548 50 (daemon) (idle)
findmydeviced <2b7e318bab4e394ebd19a17ed0bf979d> 0.843 530 0 - 1786 50 (daemon) (idle)
aosnotifyd <16ece00586ec3ccab1fbdeb6d92aad1a> 1.598 495 0 - 1741 50 (daemon) (idle)
mobile_installat <9c9425ce271b3154b99d23e6e35240ef> 18.061 360 0 - 1213 50 (daemon) (idle)
streaming_zip_co <f8a43feeded33f30ae10bafafde0f052> 1.787 224 0 - 960 50 (daemon) (idle)
ContainerMetadat <24e851abc8b43f4093ea6d80c5a262ac> 29.550 488 0 - 1963 50 (daemon) (idle)
QSCenter <00f1d456fc583c9a8c2c57ecd3327f46> 238.360 1344 0 - 5462 200 (daemon) (idle)
familycircled <5fea61a5086f36348233dbf09e7adeee> 0.521 397 0 - 1481 50 (daemon) (idle)
AppStore <4443338ecbfe3b85afc4aba498d0cee8> 138.361 24407 0 - 25261 100 (suspended)
misd <8ea26d6e019d355795ff0cb117733f68> 0.258 159 0 - 747 50 (daemon) (idle)
Preferences <6bcd6b5ca2393131902eaee019857bd2> 27.053 5010 0 - 8509 50 (suspended)
MQQSecureJB <019bc764bc133db7baafa8a23c9445e7> 2.767 2271 0 - 7357 50 (suspended)
healthd <8495258d6e7b3ecfa21c18dc110b5402> 2.035 412 0 - 1099 50 (daemon) (idle)
BlueTool <79ec82b9ee3b31e7aee4ad348206fb07> 0.085 112 0 - 452 50 (daemon) (idle)
nehelper <d3804c7b0ccf3e1aa437061c7229cfb7> 1.580 217 0 - 843 50 (daemon) (idle)
BTLEServer <666685c2f90a3daa81bbe6520a811206> 0.326 273 0 - 1629 50 (daemon) (idle)
recentsd <04f80416cfc734cc8f3d6be6578467e0> 1.223 530 0 - 1583 50 (daemon) (idle)
medialibraryd <c80a6cacc2a334729705adb044e68c00> 9.229 563 0 - 1479 50 (daemon) (idle)
DTMobileIS <2a11eaaf903d38798629d3aecd137832> 302.687 502 0 - 1976 50 (daemon) (idle)
storebookkeeperd <046122091101309d968c43a2be97867c> 3.857 954 0 - 2460 50 (daemon) (idle)
itunesstored <651906971d0732e1942355da4bd91100> 110.578 2312 0 - 4746 100 (daemon) (idle)
itunescloudd <47bdc6fbccd6364480dbd1a2b3c7998d> 5.967 859 0 - 2625 50 (daemon) (idle)
CMFSyncAgent <268f03103f6032af8597e9fce57491b7> 0.152 143 0 - 498 50 (daemon) (idle)
WirelessRadioMan <40bc5fa762323e69a45d77854a53c4b2> 2.835 246 0 - 931 50 (daemon) (idle)
awdd <857efa30f8e23d2a9f25f53673af6ccb> 3.726 520 0 - 1124 50 (daemon) (idle)
passd <cea683659ba036a6a6f4b4f927160353> 30.283 679 0 - 2519 50 (daemon) (idle)
lsuseractivityd <9057065ea9cd37e2b905cfa169f62ef2> 3.083 384 0 - 1773 50 (daemon) (idle)
assetsd <55f3adbf8b1e3bf3b57471e01356417c> 38.141 1611 0 - 4256 50 (daemon) (idle)
webbookmarksd <3173c4f369ac382aa0e03975b1f6bc18> 26.917 564 0 - 1458 50 (daemon) (idle)
QSCharmer <b7f401ca48cd3c13a7e6a51328d183e8> 17.301 819 0 - 2277 100 (daemon) (idle)
profiled <4edd7c7d0a8631b58e739cfd13fc1865> 6.793 547 0 - 4488 50 (daemon) (idle)
GoodReader4 <dbe6961a764b347abbd609b6a223e6a7> 4.941 2008 0 - 5229 50 (suspended)
misagent <716ddd8b8fdf30a180872e0ac95b0c96> 1.161 129 0 - 526 50 (daemon) (idle)
nsurlstoraged <2216f383497435919d46cce44e2750dd> 23.292 1352 0 - 2999 200 (daemon) (idle)
networkd_privile <1c19249e1c9b3c1fae4bdb06671795d0> 0.986 92 0 - 261 50 (daemon) (idle)
routined <014344942eca323bb12d360e06c8d865> 13.554 511 0 - 2147 50 (daemon) (idle)
keybagd <30eb49ca086937f4a52413bee502a025> 4.062 110 0 - 328 50 (daemon) (idle)
assistantd <bbc6396ded9f32f89e4f3c3c62550786> 1.593 464 0 - 1793 50 (daemon) (idle)
pkd <d1ef96d5c84a3ec7bac8811f210d0d86> 8.705 335 0 - 886 50 (daemon) (idle)
revisiond <e89e877ac57239f59c0eed4ea5ecdff9> 1.206 267 0 - 569 50 (daemon) (idle)
com.baidu.ime.Ba <2518403a187230cc98feadecab0d1a63> 13.933 1975 0 - 7508 50 (suspended)
MobileGestaltHel <069f2f40d7ee3345adcc53637ae9ddf7> 3.302 173 0 - 597 50 (daemon) (idle)
sandboxd <a2a6b1bb1b3231af96cf6125c8f3e971> 0.722 144 0 - 620 50 (daemon) (idle)
DuetHeuristic-BM <003d26850d5e3dc7997d444a182c03ad> 5.482 327 0 - 1031 50 (daemon) (idle)
coreduetd <ac84ea2f95a43b9e911738284359db9b> 270.000 1370 0 - 2466 50 (daemon) (idle)
timed <3b91fa8cbe9131af958b430e85fa448d> 5.483 247 0 - 1002 50 (daemon) (idle)
accountsd <6185caa9f3793aef892ccf0ec3391ced> 80.564 1225 0 - 3233 50 (daemon) (idle)
calaccessd <9d8bb08b0f1d33a3878f213805bb7a14> 38.640 734 0 - 1799 50 (daemon) (idle)
mobactivationd <04a28566ff493e2b931706a59270fe8a> 3.647 207 0 - 814 50 (daemon) (idle)
securityd <d425cdb8afb13ccd836a8e0e706f33e0> 79.635 1033 0 - 2432 50 (daemon) (idle)
containermanager <7d4e114c087f3566bb0fe4be34f0d315> 18.437 336 0 - 880 50 (daemon) (idle)
lockbot <ba949fe90d403a95abc20b3780e5dfab> 1.286 176 0 - 676 50 (daemon) (idle)
nsurlsessiond <7676f54e86233a47b73b7a707f5903e1> 181.227 870 0 - 2165 50 (daemon)
gamed <424e1a60719830b5b4d799ed01954180> 13.246 979 0 - 3083 50 (daemon)
Music <8c00f2c612d631bca8c94cb80079f45e> 10.284 1793 0 - 4795 50 (background)
absd <84d31e794d8b345bbdc06c990e18922d> 0.218 97 0 - 386 50 (daemon)
bird <1c0b6b6474ab3b0686ca1fbcd547245d> 37.934 1711 0 - 3450 50 (daemon)
cloudd <309d7860b8db331a978c2c814f0c8332> 108.050 1442 0 - 3031 50 (daemon)
notification_pro <6ceb017d382139b19f49e20e461dbee2> 2.658 189 0 - 368 50 (daemon)
afcd <9725b438ad9d3e259a2e628f6fffb449> 0.265 139 0 - 294 50 (daemon)
mobile_assertion <de75b4d90658347b8873a4938aa02122> 0.117 119 0 - 340 50 (daemon)
MobileMail <7285623db1753882bca1a7983ba6a479> 10.635 1433 0 - 3853 50 (resume) (continuous)
MobileSMS <e36c461c698438948d233a751658dc8d> 12.979 2795 0 - 7633 50 (continuous)
lsd <b4acbcce51273ae699bcdaba19e8e6d2> 31.574 615 0 - 1453 50 (daemon)
tccd <046fa98e4bfd30789c10447b04d67a59> 11.467 307 0 - 904 50 (daemon)
kbd <91b2e4707a4233c598ba51ab8d765fc6> 89.667 31706 0 - 32409 50 [highwater] (daemon)
InCallService <d83952575cf631baac492f39dd5bd2c5> 6.497 1132 0 - 3379 50 (resume) (continuous)
FaceTime <d0e139af986b34d08c219f8057708b23> 6.179 1517 0 - 4518 50 (continuous)
MoneyPower <c72bab945b653b7cb101e44f88e4d1ff> 1.352 1726 0 - 4493 50 (frontmost) (resume)
ptpd <1b2175128a1e3880bc9f2c8835df0a84> 0.899 871 0 - 1789 50 (daemon)
BTServer <8138d14a265f3445a288e8a8fefc4f88> 4.663 590 0 - 2360 50 (daemon)
amfid <0162233147ee3429bd1e344fde40d8d7> 0.023 76 0 - 173 25 (daemon) (idle)
discoveryd <8aed6e4ba09f3761b12796bc1ef045d7> 104.080 900 0 - 1818 100 (daemon)
wifid <07a9fb4965473001880a56f4e06e18c8> 52.415 538 0 - 1545 50 (daemon)
lockdownd <0d55399f17293f74af1f04987c0c7f30> 67.031 401 0 - 1410 50 (daemon)
imagent <c0ef36357e8c3658b3876bfb5dd25996> 12.568 805 0 - 2623 50 (daemon)
identityservices <d4c29d99664e34bdb82e046c600271c1> 18.707 713 0 - 2183 50 (daemon)
syslogd <d9a9a4a03dea32d8b041d5ac197c8f98> 46.064 344 0 - 445 50 (daemon)
iaptransportd <4d6f8290631a33928f87ddf2cc87ac41> 8.753 318 0 - 821 50 (daemon)
mediaserverd <88151824720a3e649461c81e73cd4b5e> 2173.885 6721 0 - 32721 50 (daemon)
locationd <48b400c62e4c394299e6124935dedf08> 644.756 1671 0 - 4824 100 (daemon)
powerd <7d9c31f8a70431a884047612f65e1c02> 32.568 250 0 - 515 50 (daemon)
apsd <4b5d193860a43c96af1313e8128ede6d> 37.354 638 0 - 1869 50 (daemon)
networkd <33404341f70c3231a60f0b40bbe968d7> 141.706 771 0 - 1791 50 (daemon)
dataaccessd <189b8330160434f8b5b0ebee43290697> 10.081 862 0 - 2432 50 (daemon)
vmd <9d324b2ab0b03b93bdc165c1cc27e9d1> 0.442 266 0 - 859 50 (daemon)
sharingd <79def39dbceb3b9190742c7bbcd0ad7c> 12.374 726 0 - 2495 50 (daemon)
mediaremoted <4f8bff5ccf923657b17f72dd2b002f1c> 67.387 316 0 - 1282 50 (daemon)
SCHelper <196af7bc7205305082beae63d0143af9> 2.662 116 0 - 318 50 (daemon)
atc <a4bf959671773746b408f825460ac0aa> 22.413 1425 0 - 3760 50 (daemon)
syslog_relay <1ce514e7b1cb39218a1bb4afb37a2a47> 1.200 111 0 - 275 50 (daemon)
installd <acf9113478133a9d8ec90eb3233a0d4e> 57.496 488 0 - 2140 50 (daemon)
SpringBoard <a4cf2abe291e3c9082c58d38b9cf0356> 709.123 10136 0 - 27546 100
backboardd <d35acdc51c0e39da896d8760d30f72ff> 2534.389 7304 0 - 6100 50 (daemon)
fairplayd.H2 <30cc265b9aa13511a461149ecf326b4e> 22.379 236 0 - 1404 50 (daemon)
configd <287504687f22353fb98df72ce0445f85> 87.054 478 0 - 1256 50 (daemon)
fseventsd <533f5fbbb6683b86bbce8649a74eb688> 30.630 529 0 - 1031 50 (daemon)
UserEventAgent <f2ea7b62ae4e38ffa9c7b5a93c5dc6dc> 328.253 880 0 - 2494 200 (daemon)
assertiond <36cbbe6205723972844d2a3a61e5c31d> 26.361 356 0 - 1013 50 (daemon)
distnoted <11db066ae1fa32dfb4755accfe8d6f32> 14.823 237 0 - 472 50 (daemon)
wirelessproxd <b480891c9ec93154bbe2107ea7e96abf> 2.202 210 0 - 912 50 (daemon)
discoveryd_helpe <099460d32af7337d95d6362993ea1406> 0.285 140 0 - 588 50 (daemon)
filecoordination <6d9f3fb4ccf630eb8ccba96e51cb1bbe> 4.758 321 0 - 880 100 (daemon)
aggregated <04c00c9ea92a3b40a1221b7b622e9d1c> 1171.560 1131 0 - 2725 50 (daemon)
callservicesd <ae5546b18df13320a52bcf46c9dc1a65> 2.751 606 0 - 1597 50 (daemon)
ubd <89ad1cd20dbb32eab266903379256adb> 0.238 214 0 - 770 50 (daemon)
touchsetupd <a08d390378a433979da5ce42197b1189> 0.759 193 0 - 731 50 (daemon)
gputoolsd <956b542f7d263b38a6384d8aa8e5760a> 0.289 735 0 - 2089 50 (daemon)
MobileStorageMou <605984d05a1c30ada9bb32338673ea00> 0.072 129 0 - 375 50 (daemon)
cfprefsd <1a4938a6a60e3d7ba5e940f96033c6c8> 33.537 455 0 - 897 50 (daemon)
CommCenter <552a7fd4f67e32ceb6fa3f1664e754de> 622.642 1822 0 - 5535 50 (daemon)
notifyd <1454674148363528952383ed99eaee44> 86.372 369 0 - 424 50 (daemon)
ReportCrash <e365c04793583967bc173ce46616ab70> 0.120 131 0 - 532 50 (daemon)
**End**
I don't know why it crash. I even have no idea whether it is symbolized.
I will be grateful for your generous help, thanks!
This is not a crash report but LowMemory report. There's nothing to symbolicate in it, just the list of processes with how much memory / resources each was using and which ones were killed. There should be a line with your app name on it and the resources it was using. You should check that e.g. the memory in use is consistent with what you expect.
In your case, it seems that kbd got killed, not your app, so if your app crashed I think you are looking at the wrong file.
Steps to analyze crash report from apple:
Copy the release .app file which was pushed to the appstore, the .dSYM file that was created at the time of release and the crash report receive from APPLE into a FOLDER.
OPEN terminal application and go to the folder created above (using cd command)
Run atos -arch armv7 -o APPNAME.app/APPNAME MEMORY_LOCATION_OF_CRASH. The memory location should be the one at which the app crashed as per the report.
Ex: atos -arch armv7 -o 'APPNAME.app'/'APPNAME' 0x0003b508
This would show you the exact line, method name which resulted in crash.
Ex: [classname functionName:]; -510
Symbolicating IPA
if we use IPA for symbolicating - just rename the extention .ipa with .zip , extract it then we can get a Payload Folder which contain app. In this case we don't need .dSYM file.
Note
This can only work if the app binary does not have symbols stripped. By default release builds stripped the symbols. We can change it in project build settings "Strip Debug Symbols During Copy" to NO.

Resources