Re: [Pharo-users] What is the craziest bug you ever face
This is not so much about debugging; it's a much more general issue. Given that Smalltalk is designed to allow one to interact with objects, it always frustrates me when our many browsers hide their implementation. We should be able to open inspectors on the model and the UI instance quickly and easily. These would greatly facilitate learning how the browsers works and to be able to script things that the browser developer did not include. e.g. How many methods am I looking at in this method browser? e.g. I want to open a new method browser on a subset of the methods I am looking at. (The rewrite tool helps when the criteria are syntax-based, but ...) and many more things. _ From: Pharo-users [mailto:pharo-users-boun...@lists.pharo.org] On Behalf Of Stephane Ducasse Sent: March 9, 2017 03:37 To: Any question about pharo is welcome; Pharo Development List Subject: [Pharo-users] What is the craziest bug you ever face Hi guys During the DSU workshop we were brainstorming about what are the most difficult bugs we faced and what are the conceptual tools that would have helped you. Stef
Re: [Pharo-users] What is the craziest bug you ever face
and occasionally memory leaks werner On 03/10/2017 04:02 PM, werner kassens wrote: Hi Stephane, bugs i found difficult to debug are eg (1) red cross of death bugs in morphs, (2) bugs that are not visible any more because they are caught and dealt with in the wrong place and then produce wrong results instead of errors, and (3) bugs in iterative algos that work eg with #while and that pop up eg in the 1000th iteration, where i first have to add a counter to know that it happens in the 1000th iteration and then have to add a #halt if counter=999 to see what happens then in the debugger. werner On 03/09/2017 12:36 PM, Stephane Ducasse wrote: Hi guys During the DSU workshop we were brainstorming about what are the most difficult bugs we faced and what are the conceptual tools that would have helped you. Stef
Re: [Pharo-users] What is the craziest bug you ever face
Hi Stephane, bugs i found difficult to debug are eg (1) red cross of death bugs in morphs, (2) bugs that are not visible any more because they are caught and dealt with in the wrong place and then produce wrong results instead of errors, and (3) bugs in iterative algos that work eg with #while and that pop up eg in the 1000th iteration, where i first have to add a counter to know that it happens in the 1000th iteration and then have to add a #halt if counter=999 to see what happens then in the debugger. werner On 03/09/2017 12:36 PM, Stephane Ducasse wrote: Hi guys During the DSU workshop we were brainstorming about what are the most difficult bugs we faced and what are the conceptual tools that would have helped you. Stef
Re: [Pharo-users] What is the craziest bug you ever face
Yeah, that sounds right. The debugger needed to be able to step through lines of code like normal (to debug the logic framework) as well as to step through search steps (to debug programs written in the framework) defined in terms of the system semantics (since bugs could be in either program or framework at this point). It also needed to recognize the semantics not only of the framework, but of the debugging interaction, because I needed it to step through the search space until it arrived at a particular leaf of the search frontier. The framework itself basically does a breadth-first-search, and it doesn't care when a particular frontier node will be visited again, but if I am tracing the search in one particular part of the space for the very specific purposes of debugging, only then do I need the debugger to recognize the semantics of when we are expanding a child of a given frontier node. I also played with the idea of actually changing the search order while debugging, which would change the semantics of the actual running program to make it turn out a certain way so that I could observe rare behavior. The analogy would be manually setting a random number in the debugger, except that it might take more than a single instance variable assignment to change the structure of a search tree. Evan -- View this message in context: http://forum.world.st/What-is-the-craziest-bug-you-ever-face-tp4937984p4938057.html Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
Re: [Pharo-users] What is the craziest bug you ever face
I understand well your point :) On Thu, 09 Mar 2017 21:30:21 +0100, Dale Henrichswrote: The attached screnshot illustrates why I like having text instead of pngs ... being able to highlight the association value (-5.00->5.00) is very useful when identifying the entries >in a btree associated with the association (the entries at 13, 16,19, and 22)... On 03/09/2017 11:34 AM, Dale Henrichs wrote: Stef, One of the things that I do all of the time when trying to debug particularly difficult problems is to keep a "bug notebook". My "bug notebook" is a text file where I >>record information gleaned from an inspector intermixed with comments, code and observations... I've attached an example from a couple of days ago (bug_notebook.txt). The particular problem I am working on involves btree nodes being improperly updated during index object updates. Each btree node is basically a 2000+ >>element Array ... so there is a lot of data to deal with . In the notebook, I extract the interesting entries from the btree node and record the original set of values and then record the updated set of values and in this >>particular case I was able to "see" that after the update I had 4 entries that were not properly deleted ... In addition to recording the interesting chunks of large data structures, I often end up with chunks of stacks from the debugger, copies of a inspector panes in my >>"bug notebooks" and chunks of code ... Over the last several weeks I have been tackling different sets of bugs in this same area and I have been keeping a time-stamped log of the work that I've done >>along the way (analysis_notebook.txt) ... in this notebook I've bee recording test results and branch/SHA information so that I can easily reference different >>versions of methods as I work through fixing bugs and managing regressions ... There's a section in the notebook where I've record performance information, so >>that when I have finished work on this set of bugs, I can evaluate how I've impacted performance ... Finally at the very bottom of the notebook, I've recorded a >>simple todo-list ... The notebooks are on a shared disk so that I can access and update the "bug notebook" when I am working from home on a mac or at work from a linux box ... I rely on the fact that I am working with text and not images ... since I like to copy and paste as well as search for particular strings in the data from the inspector ... >>in the bug_notebook I searched for the `victim` string in the text output from an inspector ... I have come to really depend upon bug notebooks when addressing difficult bugs and I think that support for creating and maintaining bug notebooks would be a >>valuable addition the the debugging arsenal... Dale On 03/09/2017 10:50 AM, stepharong wrote: Thanks you all. The idea is that we want to see how we cn improve our debugging arsenal.So it is important that your scenario give use some hints.It is difficult to convey what we are really looking for :) Hi guys During the DSU workshop we were brainstorming about what are the most difficult bugs we faced and what are the conceptual tools that would have helped you. Stef --Using Opera's mail client: http://www.opera.com/mail/ -- Using Opera's mail client: http://www.opera.com/mail/
Re: [Pharo-users] What is the craziest bug you ever face
The attached screnshot illustrates why I like having text instead of pngs ... being able to highlight the association value (-5.00->5.00) is very useful when identifying the entries in a btree associated with the association (the entries at 13, 16,19, and 22)... On 03/09/2017 11:34 AM, Dale Henrichs wrote: Stef, One of the things that I do all of the time when trying to debug particularly difficult problems is to keep a "bug notebook". My "bug notebook" is a text file where I record information gleaned from an inspector intermixed with comments, code and observations... I've attached an example from a couple of days ago (bug_notebook.txt). The particular problem I am working on involves btree nodes being improperly updated during index object updates. Each btree node is basically a 2000+ element Array ... so there is a lot of data to deal with . In the notebook, I extract the interesting entries from the btree node and record the original set of values and then record the updated set of values and in this particular case I was able to "see" that after the update I had 4 entries that were not properly deleted ... In addition to recording the interesting chunks of large data structures, I often end up with chunks of stacks from the debugger, copies of a inspector panes in my "bug notebooks" and chunks of code ... Over the last several weeks I have been tackling different sets of bugs in this same area and I have been keeping a time-stamped log of the work that I've done along the way (analysis_notebook.txt) ... in this notebook I've bee recording test results and branch/SHA information so that I can easily reference different versions of methods as I work through fixing bugs and managing regressions ... There's a section in the notebook where I've record performance information, so that when I have finished work on this set of bugs, I can evaluate how I've impacted performance ... Finally at the very bottom of the notebook, I've recorded a simple todo-list ... The notebooks are on a shared disk so that I can access and update the "bug notebook" when I am working from home on a mac or at work from a linux box ... I rely on the fact that I am working with text and not images ... since I like to copy and paste as well as search for particular strings in the data from the inspector ... in the bug_notebook I searched for the `victim` string in the text output from an inspector ... I have come to really depend upon bug notebooks when addressing difficult bugs and I think that support for creating and maintaining bug notebooks would be a valuable addition the the debugging arsenal... Dale On 03/09/2017 10:50 AM, stepharong wrote: Thanks you all. The idea is that we want to see how we cn improve our debugging arsenal. So it is important that your scenario give use some hints. It is difficult to convey what we are really looking for :) Hi guys During the DSU workshop we were brainstorming about what are the most difficult bugs we faced and what are the conceptual tools that would have helped you. Stef -- Using Opera's mail client: http://www.opera.com/mail/
Re: [Pharo-users] What is the craziest bug you ever face
we were talking during the workshop and on the simple things to help. - watch points with history of the value. - stop if the value of an instance variable is getting irregular i.e., = you get integer and suddenly inside you get a float! 1 1 1 1 2 3 4 2 2 1 1 12 2 3 32 1 1 1 1 22 1 1 1 1 1 1 1 2 33 1.2 2 3 3 4 4 - start to monitor (put alarm/breakpoints) newly created instances from a point I hope that soon we will have instance specific features of the Ressia debugger in Pharo debuger (stop the next time this object receive a message, stop the next tie this object changes any of its instance variables).
Re: [Pharo-users] What is the craziest bug you ever face
On Thu, 09 Mar 2017 20:53:48 +0100, Evan Donahuewrote: I actually have a whole class of bugs and elements of a very Pharo-y solution. I do a lot of work in a logic programming framework. Being a logic programming framework, it does not execute the code you write in a start-to-finish manner, but executes a few lines here, then jumps around and executes a few lines there. As a result, if you are trying to trace the evolution of a particular branch in the search tree, you can only follow one or two operations at a time in the debugger, then that branch gets put in the queue and you may have to step through tens or hundreds of other searches before you get back to it (if you can even recognize which branch you were following when it comes around again). This makes debugging basically impossible in every other language this framework has been ported to, and the standard strategy is just to stare at the code. Pharo's debugger was already a step up, but it still wasn't nearly up to the task. did you think about adapting the debugger to your execution semantics? ... I read that you did it Excellent! I had been trying to get a particularly complex program to work for several days with no success, at which point I decided to investigate the moldable debugger framework. It took me several more days of going through the debugger code in different versions and emailing with its developers to get something working, which just speaks to the state that framework and documentation happened to be in at the time, but when I did get it working I found the bug in a few minutes. I essentially set up a visual depiction of the search tree where I could click on a branch and have the framework run until that branch came up again to the front of the queue. This meant I could trace execution linearly by giving myself a way to get a handle on the control flow via a visual interface. I have since changed my framework and broken the debugger code, but I definitely intend to try to get that rigged up again when the logic system is in a more polished form. Admittedly, many programs probably do not have the problem that their control flow is so complex that a normal linear debugger is too difficult to understand, but on some level the ability to specify a debugging control flow outside the execution of the program itself seems like a pretty powerful idea, and something Pharo should be very well suited for with its interactivity/reflectivity. Maybe there would be more complex, logic-based programs if they weren't so hard to write! Evan -- View this message in context: http://forum.world.st/What-is-the-craziest-bug-you-ever-face-tp4937984p4938039.html Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com. -- Using Opera's mail client: http://www.opera.com/mail/
Re: [Pharo-users] What is the craziest bug you ever face
I should add that users of the logic framework from non-smalltalk languages were very impressed by the potential. Evan -- View this message in context: http://forum.world.st/What-is-the-craziest-bug-you-ever-face-tp4937984p4938040.html Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
Re: [Pharo-users] What is the craziest bug you ever face
nice ideas! Stef, One of the things that I do all of the time when trying to debug particularly difficult problems is to keep a "bug notebook". My "bug notebook" is a text file where I record >information gleaned from an inspector intermixed with comments, code and observations... I've attached an example from a couple of days ago (bug_notebook.txt). The particular problem I am working on involves btree nodes being improperly updated during index object updates. Each btree node is basically a 2000+ element Array ... so >there is a lot of data to deal with . In the notebook, I extract the interesting entries from the btree node and record the original set of values and then record the updated set of values and in this particular case I >was able to "see" that after the update I had 4 entries that were not properly deleted ... In addition to recording the interesting chunks of large data structures, I often end up with chunks of stacks from the debugger, copies of a inspector panes in my "bug >notebooks" and chunks of code ... Over the last several weeks I have been tackling different sets of bugs in this same area and I have been keeping a time-stamped log of the work that I've done along the way >(analysis_notebook.txt) ... in this notebook I've bee recording test results and branch/SHA information so that I can easily reference different versions of methods as I work >through fixing bugs and managing regressions ... There's a section in the notebook where I've record performance information, so that when I have finished work on this set of >bugs, I can evaluate how I've impacted performance ... Finally at the very bottom of the notebook, I've recorded a simple todo-list ... The notebooks are on a shared disk so that I can access and update the "bug notebook" when I am working from home on a mac or at work from a linux box ... I rely on the fact that I am working with text and not images ... since I like to copy and paste as well as search for particular strings in the data from the inspector ... in the >bug_notebook I searched for the `victim` string in the text output from an inspector ... I have come to really depend upon bug notebooks when addressing difficult bugs and I think that support for creating and maintaining bug notebooks would be a valuable >addition the the debugging arsenal... Dale On 03/09/2017 10:50 AM, stepharong wrote: Thanks you all. The idea is that we want to see how we cn improve our debugging arsenal. So it is important that your scenario give use some hints.It is difficult to convey what we are really looking for :) Hi guys During the DSU workshop we were brainstorming about what are the most difficult bugs we faced and what are the conceptual tools that would have helped >>>you. Stef --Using Opera's mail client: http://www.opera.com/mail/ -- Using Opera's mail client: http://www.opera.com/mail/
Re: [Pharo-users] What is the craziest bug you ever face
I actually have a whole class of bugs and elements of a very Pharo-y solution. I do a lot of work in a logic programming framework. Being a logic programming framework, it does not execute the code you write in a start-to-finish manner, but executes a few lines here, then jumps around and executes a few lines there. As a result, if you are trying to trace the evolution of a particular branch in the search tree, you can only follow one or two operations at a time in the debugger, then that branch gets put in the queue and you may have to step through tens or hundreds of other searches before you get back to it (if you can even recognize which branch you were following when it comes around again). This makes debugging basically impossible in every other language this framework has been ported to, and the standard strategy is just to stare at the code. Pharo's debugger was already a step up, but it still wasn't nearly up to the task. I had been trying to get a particularly complex program to work for several days with no success, at which point I decided to investigate the moldable debugger framework. It took me several more days of going through the debugger code in different versions and emailing with its developers to get something working, which just speaks to the state that framework and documentation happened to be in at the time, but when I did get it working I found the bug in a few minutes. I essentially set up a visual depiction of the search tree where I could click on a branch and have the framework run until that branch came up again to the front of the queue. This meant I could trace execution linearly by giving myself a way to get a handle on the control flow via a visual interface. I have since changed my framework and broken the debugger code, but I definitely intend to try to get that rigged up again when the logic system is in a more polished form. Admittedly, many programs probably do not have the problem that their control flow is so complex that a normal linear debugger is too difficult to understand, but on some level the ability to specify a debugging control flow outside the execution of the program itself seems like a pretty powerful idea, and something Pharo should be very well suited for with its interactivity/reflectivity. Maybe there would be more complex, logic-based programs if they weren't so hard to write! Evan -- View this message in context: http://forum.world.st/What-is-the-craziest-bug-you-ever-face-tp4937984p4938039.html Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
Re: [Pharo-users] What is the craziest bug you ever face
Stef, One of the things that I do all of the time when trying to debug particularly difficult problems is to keep a "bug notebook". My "bug notebook" is a text file where I record information gleaned from an inspector intermixed with comments, code and observations... I've attached an example from a couple of days ago (bug_notebook.txt). The particular problem I am working on involves btree nodes being improperly updated during index object updates. Each btree node is basically a 2000+ element Array ... so there is a lot of data to deal with . In the notebook, I extract the interesting entries from the btree node and record the original set of values and then record the updated set of values and in this particular case I was able to "see" that after the update I had 4 entries that were not properly deleted ... In addition to recording the interesting chunks of large data structures, I often end up with chunks of stacks from the debugger, copies of a inspector panes in my "bug notebooks" and chunks of code ... Over the last several weeks I have been tackling different sets of bugs in this same area and I have been keeping a time-stamped log of the work that I've done along the way (analysis_notebook.txt) ... in this notebook I've bee recording test results and branch/SHA information so that I can easily reference different versions of methods as I work through fixing bugs and managing regressions ... There's a section in the notebook where I've record performance information, so that when I have finished work on this set of bugs, I can evaluate how I've impacted performance ... Finally at the very bottom of the notebook, I've recorded a simple todo-list ... The notebooks are on a shared disk so that I can access and update the "bug notebook" when I am working from home on a mac or at work from a linux box ... I rely on the fact that I am working with text and not images ... since I like to copy and paste as well as search for particular strings in the data from the inspector ... in the bug_notebook I searched for the `victim` string in the text output from an inspector ... I have come to really depend upon bug notebooks when addressing difficult bugs and I think that support for creating and maintaining bug notebooks would be a valuable addition the the debugging arsenal... Dale On 03/09/2017 10:50 AM, stepharong wrote: Thanks you all. The idea is that we want to see how we cn improve our debugging arsenal. So it is important that your scenario give use some hints. It is difficult to convey what we are really looking for :) Hi guys During the DSU workshop we were brainstorming about what are the most difficult bugs we faced and what are the conceptual tools that would have helped you. Stef -- Using Opera's mail client: http://www.opera.com/mail/ tMultiEnumeratedIndexUpdateD_ModifyingInstVarAtOffset_to dkh 3/8/2017 16:14 -- Step one is to understand how things were removed incorrectly ... and then go from there - victim key value: commonAssoc. commonAssoc-> -63.00->63.00 commonBinding -> 63.00 victim -> -60.00->60.00->-63.00->63.00->-60.00->60.00->-63.00->63.00 - reachable: 1@ -> -60.00->60.00->-60.00->-60.00->-60.00->60.00->-60.00->-60.00 2@ -> -60.00->60.00->-60.00->-60.00->-60.00->60.00->-60.00->-60.00 3@ -> -60.00->60.00->-60.00->-60.00->-60.00->60.00->-60.00->-60.00 4@ -> -60.00->60.00->-60.00->-60.00->-60.00->60.00->-60.00->-60.00 - - dkh 3/8/2017 16:14 -- - before update: victim -> -60.00->60.00->-60.00->-60.00->-60.00->60.00->-60.00->-60.00 - 73@ -> -60.00->-60.00 74@ -> -60.00 75@ -> -60.00->60.00->-60.00->-60.00->-60.00->60.00->-60.00->-60.00 76@ -> -60.00->-60.00 77@ -> -60.00 78@ -> -60.00->60.00->-60.00->-60.00->-60.00->60.00->-60.00->-60.00 79@ -> -60.00->-60.00 80@ -> -60.00 81@ -> -60.00->60.00->-60.00->-60.00->-60.00->60.00->-60.00->-60.00 82@ -> -60.00->-60.00 83@ -> -60.00 84@ -> -60.00->60.00->-60.00->-60.00->-60.00->60.00->-60.00->-60.00 85@ -> -60.00->60.00 86@ -> -60.00 87@ -> -60.00->60.00->-60.00->-60.00->-60.00->60.00->-60.00->-60.00 88@ -> -60.00->60.00 89@ -> -60.00 90@ -> -60.00->60.00->-60.00->-60.00->-60.00->60.00->-60.00->-60.00 --- 1507@ -> -60.00->60.00 1508@ -> 60.00 1509@ -> -60.00->60.00->-60.00->-60.00->-60.00->60.00->-60.00->-60.00 1510@ -> -60.00->60.00 1511@
Re: [Pharo-users] What is the craziest bug you ever face
Thanks you all. The idea is that we want to see how we cn improve our debugging arsenal. So it is important that your scenario give use some hints. It is difficult to convey what we are really looking for :) Hi guys During the DSU workshop we were brainstorming about what are the most difficult bugs we faced and what are the conceptual tools that would have helped you. Stef -- Using Opera's mail client: http://www.opera.com/mail/
Re: [Pharo-users] What is the craziest bug you ever face
I don't think my reply will be anything useful, but as to me the most craziest bug is metabug, i.e. when system doesn't provides any means to debug things. :) As for regular bugs .. it is quite hard to remember anything i wasn't able to deal with, given enough time & effort, and then emphasize single case over the rest. And since human brains tend to forget unpleasant things, there's not much details to tell and remember. On 9 March 2017 at 13:36, Stephane Ducassewrote: > Hi guys > > During the DSU workshop we were brainstorming about what are the most > difficult bugs we faced and what are the conceptual tools that would have > helped you. > > Stef > -- Best regards, Igor Stasenko.
Re: [Pharo-users] What is the craziest bug you ever face
2017-03-09 12:36 GMT+01:00 Stephane Ducasse: > Hi guys > > During the DSU workshop we were brainstorming about what are the most > difficult bugs we faced and what are the conceptual tools that would have > helped you. > > Stef > https://pharo.fogbugz.com/f/cases/14332/use-ast-not-parseTree-so-we-benefit-from-the-ASTCache#BugEvent.113561 Running a RBLintRule modified the (cached) AST of this methods code. So, even if the compiled method did not changed, and the "real" source code did not changed, you actually see the source code from the modified AST. There are a couple of things which went wrong resp. make this bug difficult: 1. A LintRule that just should *check* the code, actually created a transformation somewhere behind the scene (Ok, it is a RBTransformationRule, and originally used for code refactoring as well) 2. As long as we *analyze* code, the real code (string/ast/source) should be considered immutable 3. the modified AST was cached 4. what-you-see-is-not-what-you-get. We are (or I am) used to consider the system browser a tool for view and edit methods source code. If the code we see isn't actually the methods source, but another representation of some kind of (cached) model (formatted AST-node-source code), it would be good to have some way to indicate this (switch between "raw"-code / model-code / ast-node-code).
Re: [Pharo-users] What is the craziest bug you ever face
For me it was when I was making the CPP library. CPP for those that do not know is a library I made that allows Pharo to control a C++ application. Its a very simple IPC bridge using shared memory mapped files. I was surprised how easy it was to make it from the C++ side Pharo side was a different story. UFFI is brilliantly simple to use BUT, as much as the Pharo rocks for debugging Pharo code it works under one caveat. The caveat being that your code makes no usage of UFFI or any FFI. Because the Pharo debugger has no means to debug UFFI. People may not realize it but practically UFFI is C coding. It make look like your usual Pharo code but make no mistake its C all the way. So the practice is to make sure the code works in C first. However if it works in C but for some strange reason it makes Pharo freak out you are all by yourself. Pharo code that can crash Pharo is the one that needs debugging the most. So to find these bug which fortunately there were not many I had to crash Pharo countless times and move extremely slow and step by step. None the less I success was the final result and I learned a ton in the process. On Thu, Mar 9, 2017 at 1:38 PM Stephane Ducassewrote: > Hi guys > > During the DSU workshop we were brainstorming about what are the most > difficult bugs we faced and what are the conceptual tools that would have > helped you. > > Stef >