I’m pretty certain I’m missing something really obvious here but this seems quite bizarre.
I’m developing for Android using Eclipse – and I have a method similar to which I’m debugging and it’s doing something rather odd…
public boolean test() {
if (variable == value)
return true;
// more code appears here
return false;
}
Stepping through that, on the first line (the if statement) the debugger suggests that variable does indeed equal value (they’ve both byte variables with a value of 0) – the debugger then moves onto the 2nd line (the return true) but it then moves on to the last line (return false) – skipping everything inbetween!?
The value returned was ‘false’
WTF is going on there? I’d assumed that RETURN would exit the method entirely – but the debugger (and the return value being sent back – being false) suggests that it does nothing of the sort!?
What am I missing which is staring me in the face? Are return statements as the last line of methods always executed or something?
p.s. interesting update…
The variables I’m using are assigned in code which I didn’t write – I just dug-out the source and re-built/re-ran the debugger with access to that source and I found this line in it
byte variable = (byte)9;
Can you see anything wrong with that and would that perhaps explain the problem do you think!? I’ve emailed the author but meanwhile – erm….
Update2
OK, I’ve completely remade the project, cleaned and rebuilt it, uninstalled and reinstalled it into the phone and the debugger now behaves more sensibly…
The problem is clearly the use of ‘9’ (they use 0-9 as possible values in a byte!!) – what’s happened now is that although the debugger is suggesting ‘variable’ is “0” – it’s also failing comparison to (byte)0 and thus I get a ‘false’ return – which is actually correct.
I’m obviously stuck until they change their code to use a short – as for accepting an answer, it’s tricky as the ‘rebuild everything’ answers and the ‘compare using (byte) or bytevalue()’ answers were sort-of both right!?
I don’t think your code buffer in eclipse is matching what is being debugged. The only time you should see code execute past a return statement is of you are using a finally block, in which you will see the code execute in the finally block after the return statement in the debugger.