Eclipse conditional breakpoint, break at any string equals

百般思念 提交于 2019-12-13 14:09:15

问题


I have a large (legacy) application that I have to make a fix in, with terrible code structure and so much code smell that I'm choking. I can't really figure out where a string in the gui is populated. Therefore it would be nice if i somehow could have an expression/breakpoint once ANY string (I don't know the name of the variable, or where it is) is equal to "foobar" so I can backtrack from there.

So, what am I looking for? :)


回答1:


This trick works as long as the string that you want to find isn't hard-coded in any way. If the string was getting passed to the compiler, then this trick may not work.

  1. Ensure you have installed the source-code alongside the JDK.
  2. Open java.lang.String class file. Your IDE should be automatically show the source-code for this class.
  3. Put a breakpoint in the char[] field variable. The variable name may vary for each JDK. On my machine it is private final char value[];.
  4. Put a condition on this breakpoint, e.g.:

    value!=null && value.length==6 && value[0]=='f' && value[1]=='o' && value[2]=='o' ....
    

Please note that the performance will be slower due to this breakpoint.

I have tested this on a simple application that read the string from a file, and the breakpoint is being hit properly when the file is being read into a string.




回答2:


If you don´t know where the String gets populated, but you do know where the variable it is in is, you can place a watchpoint for the variable. A watchpoint is exactly placed as a breakpoint, but in the line where the variable is defined.

This watchpoint will pause the programm everytime the variable is changed or read.




回答3:


IF you have an IDE, such as Eclipse, you can set getters and setters for all your variables then, from every one of these setters, call a function called "checkValue" for example, in this "checkValue" make a conditional breakpoint for the specific value you are looking for.

This will require code to be changed, but as a by-product, would create a cleaner code.


Use jmap and cause memory dumps. Inspect every dump for the value you are looking for


Use Introspection and cycle through every variable, looking for the value.



来源:https://stackoverflow.com/questions/24135716/eclipse-conditional-breakpoint-break-at-any-string-equals

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!