jingham created this revision. jingham added reviewers: mib, JDevlieghere. Herald added a project: All. jingham requested review of this revision. Herald added a project: LLDB. Herald added a subscriber: lldb-commits.
When the Debugger runs HandleProcessEvent it should allow selecting the "Most relevant" frame. If you don't do that, then the correct frame gets selected, but it happens AFTER the frame info gets printed in the stop message, so you don't see the selected frame. The test for this hid the issue because it ran `frame info` and checked the result of that. That happens after the recognizer selects the frame, and so it was right. But if the recognizer is working correctly it will have already done the same printing in the stop message, and this way we also verify that the stop message was right. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D150315 Files: lldb/source/Core/Debugger.cpp lldb/test/Shell/Recognizer/assert.test Index: lldb/test/Shell/Recognizer/assert.test =================================================================== --- lldb/test/Shell/Recognizer/assert.test +++ lldb/test/Shell/Recognizer/assert.test @@ -9,7 +9,6 @@ # RUN: %lldb -b -s %s %t.out | FileCheck %s run # CHECK: thread #{{.*}}stop reason = hit program assert -frame info # CHECK: frame #{{.*}}`main at assert.c frame recognizer info 0 # CHECK: frame 0 is recognized by Assert StackFrame Recognizer Index: lldb/source/Core/Debugger.cpp =================================================================== --- lldb/source/Core/Debugger.cpp +++ lldb/source/Core/Debugger.cpp @@ -1699,8 +1699,10 @@ // Display running state changes first before any STDIO if (got_state_changed && !state_is_stopped) { + // This is a public stop which we are going to announce to the user, so + // we should force the most relevant frame selection here. Process::HandleProcessStateChangedEvent(event_sp, output_stream_sp.get(), - DoNoSelectMostRelevantFrame, + SelectMostRelevantFrame, pop_process_io_handler); } @@ -1740,7 +1742,7 @@ // Now display any stopped state changes after any STDIO if (got_state_changed && state_is_stopped) { Process::HandleProcessStateChangedEvent(event_sp, output_stream_sp.get(), - DoNoSelectMostRelevantFrame, + SelectMostRelevantFrame, pop_process_io_handler); }
Index: lldb/test/Shell/Recognizer/assert.test =================================================================== --- lldb/test/Shell/Recognizer/assert.test +++ lldb/test/Shell/Recognizer/assert.test @@ -9,7 +9,6 @@ # RUN: %lldb -b -s %s %t.out | FileCheck %s run # CHECK: thread #{{.*}}stop reason = hit program assert -frame info # CHECK: frame #{{.*}}`main at assert.c frame recognizer info 0 # CHECK: frame 0 is recognized by Assert StackFrame Recognizer Index: lldb/source/Core/Debugger.cpp =================================================================== --- lldb/source/Core/Debugger.cpp +++ lldb/source/Core/Debugger.cpp @@ -1699,8 +1699,10 @@ // Display running state changes first before any STDIO if (got_state_changed && !state_is_stopped) { + // This is a public stop which we are going to announce to the user, so + // we should force the most relevant frame selection here. Process::HandleProcessStateChangedEvent(event_sp, output_stream_sp.get(), - DoNoSelectMostRelevantFrame, + SelectMostRelevantFrame, pop_process_io_handler); } @@ -1740,7 +1742,7 @@ // Now display any stopped state changes after any STDIO if (got_state_changed && state_is_stopped) { Process::HandleProcessStateChangedEvent(event_sp, output_stream_sp.get(), - DoNoSelectMostRelevantFrame, + SelectMostRelevantFrame, pop_process_io_handler); }
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits