{"id":27,"date":"2007-08-23T06:24:28","date_gmt":"2007-08-23T11:24:28","guid":{"rendered":"http:\/\/www.visophyte.org\/blog\/2007\/08\/23\/chroniquery-slightly-more-chronoriffic\/"},"modified":"2009-03-15T07:50:22","modified_gmt":"2009-03-15T12:50:22","slug":"chroniquery-slightly-more-chronoriffic","status":"publish","type":"post","link":"https:\/\/www.visophyte.org\/blog\/2007\/08\/23\/chroniquery-slightly-more-chronoriffic\/","title":{"rendered":"Chroniquery slightly more chronoriffic"},"content":{"rendered":"<p>So, I was playing with the fantastic Chronomancer (<a href=\"http:\/\/weblogs.mozillazine.org\/roc\/\">roc<\/a>&#8216;s <a href=\"http:\/\/weblogs.mozillazine.org\/roc\/archives\/2007\/08\/announcing_chro.html\">announcement<\/a>, <a href=\"http:\/\/code.google.com\/p\/chronomancer\/\">project link<\/a>), an Eclipse GUI for <a href=\"http:\/\/code.google.com\/p\/chronicle-recorder\">chronicle-recorder<\/a>, using a trace from my PyXPCOM troubles.  I discovered a lack of some symbols that seemed like they should be there and decided to then run chronicle against chronicle-query and view the problem in Chronomancer so that I might smite it.  Unfortunately, some stuff didn&#8217;t show up in that trace, so I went investigating by way of enhancing chroniquery so that I might better understand the problem while also making chroniquery more usable.  Sadly, there&#8217;s still more work to be done, but I have a picture to show and I understand a good deal of the chronomancer internals now and how to drive chronicle-query better.<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/www.visophyte.org\/blog\/wp-content\/uploads\/2007\/08\/chronisole-trace-fancy-main.png\" alt=\"chroniquery against fancy, tracing main, minor issues\" \/><\/p>\n<p>The above is pretty representative of what chroniquery&#8217;s chronisole can now do.  It&#8217;s an invocation of <em>chronisole.py trace fancy -f main<\/em>.  The &#8216;fancy&#8217; program builds a linked list using &#8216;cons&#8217;, uses the recursive &#8216;print_list&#8217; to print the list, and uses the iterative &#8216;nuke&#8217; to delete entries from the list.  &#8216;cons&#8217; returns the newly allocated list entry\/cons cell, and nuke returns 0 if the entry existed and was nuked or 1 if it didn&#8217;t exist.  We traced main because of the -f; we could start with any bunch of functions as the root, and can use -x to filter out noisy functions from the recursive function discovery.  Return values and parameters are shown.<\/p>\n<p>Of course, even in this example, the first\/newline booleans are wrong, presumably indicative of some wackiness\/off-by-one-error in my mechanism for determining the sub-called functions&#8217; function entry timestamps.  I&#8217;m confident I&#8217;m doing some foolish things, but it will have to wait until the weekend and a more well-rested brain.  I&#8217;ve pushed the changes to the bzr tree if anyone wants to do my work for me.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>So, I was playing with the fantastic Chronomancer (roc&#8216;s announcement, project link), an Eclipse GUI for chronicle-recorder, using a trace from my PyXPCOM troubles. I discovered a lack of some symbols that seemed like they should be there and decided &hellip; <a href=\"https:\/\/www.visophyte.org\/blog\/2007\/08\/23\/chroniquery-slightly-more-chronoriffic\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[7],"tags":[29,28],"class_list":["post-27","post","type-post","status-publish","format-standard","hentry","category-debugging","tag-chronicle","tag-chroniquery"],"_links":{"self":[{"href":"https:\/\/www.visophyte.org\/blog\/wp-json\/wp\/v2\/posts\/27","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.visophyte.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.visophyte.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.visophyte.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.visophyte.org\/blog\/wp-json\/wp\/v2\/comments?post=27"}],"version-history":[{"count":1,"href":"https:\/\/www.visophyte.org\/blog\/wp-json\/wp\/v2\/posts\/27\/revisions"}],"predecessor-version":[{"id":197,"href":"https:\/\/www.visophyte.org\/blog\/wp-json\/wp\/v2\/posts\/27\/revisions\/197"}],"wp:attachment":[{"href":"https:\/\/www.visophyte.org\/blog\/wp-json\/wp\/v2\/media?parent=27"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.visophyte.org\/blog\/wp-json\/wp\/v2\/categories?post=27"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.visophyte.org\/blog\/wp-json\/wp\/v2\/tags?post=27"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}