@@ -204,3 +204,49 @@ Development
204204To run the all tests run::
205205
206206 tox
207+
208+
209+ FAQ
210+ ===
211+
212+ Why not Smiley?
213+ ---------------
214+
215+ There's some obvious overlap with `smiley <https://pypi.python.org/pypi/smiley >`_ but there are huge differences to how things
216+ work and from my perspective are problematic in Smiley:
217+
218+ * Complexity. Smiley is over-engineered:
219+
220+ * It's uses IPC and a SQL database.
221+ * It has a webserver.
222+ * It uses threads. Side-effects and subtle bugs are introduced in your code.
223+ * It records everything. Tries to dump any variable. Often fails and stops working.
224+
225+ Why do you need all that just to debug some stuff in a terminal? Simply put, it's a nice idea but the design choices work
226+ against you when you're already neck-deep into debugging your own code.
227+ * Tracing long running code. This will make Smiley record lots of data, making it unusable.
228+
229+ Now because Smiley records everything, you'd think it's better suited for short programs. But alas, if your program runs
230+ quickly then it's pointless to record the execution. You can just run it again.
231+
232+ It seems there's only one situation where it's reasonable to use Smiley: tracing io-bound apps remotely. Those apps don't
233+ execute lots of code, they just wait on network so Smiley's storage won't blow out of proportion and tracing overhead might
234+ be acceptable.
235+ * Use-cases. It seems to me Smiley's purpose is not really debugging code, but more of a "non interactive monitoring" tool.
236+
237+ Why (not) coverage?
238+ -------------------
239+
240+ For purposes off debugging `coverage <https://pypi.python.org/pypi/coverage >`_ is a great tool but only as far as "debugging
241+ by looking at what code is (not) run". Checking branch coverage is good but it will only get you as far.
242+
243+ From the other perspective, you'd be wondering if you could use Hunter to measure coverage-like things. You could do it but
244+ for that purpose Hunter is very "rough": it has no builtin storage. You'd have to implement your own storage. You can do it
245+ but it wouldn't give you any advantage over making your own tracer if you don't need to "pre-filter" whatever you're
246+ recording.
247+
248+ In other words, filtering events is the main selling point of Hunter - it's fast (cython implementation) and the query API is
249+ flexible enough.
250+
251+
252+
0 commit comments