codelldb icon indicating copy to clipboard operation
codelldb copied to clipboard

Focus on a thread while debugging.

Open mehlian opened this issue 1 year ago • 0 comments

Discussed in https://github.com/vadimcn/codelldb/discussions/848

Originally posted by ldelossa January 24, 2023 Is it possible to make VSCode stop jumping to the first thread when debugging a multi-threaded program?

I'm trying to watch the sequence of calls in thread-2's frame but every time I step, VSCode jumps back to thread-1's frame.

This is despite using the "step into" button for the frame itself.

Here is a screenshare of what I mean. No matter what, it jumps back to thread-1's stack. This makes debugging pretty tough.

https://user-images.githubusercontent.com/5642902/214208182-4f571076-3f46-452f-8d11-eb14a6ae6f3a.mp4

I have a similar problem when debugging an Android app - when a breakpoint is hit or a "step" is performed, the main thread is focused in vscode and I need to manually switch threads to continue debugging (main thread stop reason = jit-debug-register, second thread stop reason = breakpoint 1.1).

~~There is no problem when using lldb without vscode.~~

Edit: After further investigation it looks like issue is with lldb (I'm not sure). Two threads are returning stop signal and first one is selected in vs code

Process 4330 stopped
* thread #1, name = 'company.testapp', stop reason = jit-debug-register
    frame #0: 0x00000077a199f03c libart.so`__jit_debug_register_code
libart.so`__jit_debug_register_code:
->  0x77a199f03c <+0>: ret

libart.so`__dex_debug_register_code:
    0x77a199f040 <+0>: ret

libart.so`std::__1::map<art::DexFile const*, art::JITCodeEntry*, std::__1::less<art::DexFile const*>, std::__1::allocator<std::__1::pair<art::DexFile const* const, art::JITCodeEntry*>>>::~map:
    0x77a199f044 <+0>: ldr    x0, [x0, #0x8]
    0x77a199f048 <+4>: b      0x77a17bbda0              ; std::__1::__tree<art::Histogram<unsigned long>*, art::CompareHistorgramByTimeSpentDeclining, std::__1::allocator<art::Histogram<unsigned long>*>>::destroy(std::__1::__tree_node<art::Histogram<unsigned long>*, void*>*)
  thread #17, name = 'main', stop reason = breakpoint 1.1
    frame #0: 0x00000077371109c8 libgameinuse.so`update(memory=0x0000007738264be0, platform=0x0000007738264b40, input=0x0000007738264b70, time=0x0000007738264b60) at game.cpp:366:9
   363          
   364          memory->inputValue = Math::clamp01(memory->inputValue + 0.1f);
   365      }
-> 366      if (input->arrowDown)
   367      {
   368          memory->inputValue = Math::clamp01(memory->inputValue - 0.1f);
   369      }
(lldb) c
Process 4330 resuming
Process 4330 stopped
* thread #17, name = 'main', stop reason = breakpoint 1.1
    frame #0: 0x00000077371109c8 libgameinuse.so`update(memory=0x0000007738264be0, platform=0x0000007738264b40, input=0x0000007738264b70, time=0x0000007738264b60) at game.cpp:366:9
   363          
   364          memory->inputValue = Math::clamp01(memory->inputValue + 0.1f);
   365      }
-> 366      if (input->arrowDown)
   367      {
   368          memory->inputValue = Math::clamp01(memory->inputValue - 0.1f);
   369      }
(lldb) c
Process 4330 resuming
Process 4330 stopped
* thread #1, name = 'company.testapp', stop reason = jit-debug-register
    frame #0: 0x00000077a199f03c libart.so`__jit_debug_register_code
libart.so`__jit_debug_register_code:
->  0x77a199f03c <+0>: ret

libart.so`__dex_debug_register_code:
    0x77a199f040 <+0>: ret

libart.so`std::__1::map<art::DexFile const*, art::JITCodeEntry*, std::__1::less<art::DexFile const*>, std::__1::allocator<std::__1::pair<art::DexFile const* const, art::JITCodeEntry*>>>::~map:
    0x77a199f044 <+0>: ldr    x0, [x0, #0x8]
    0x77a199f048 <+4>: b      0x77a17bbda0              ; std::__1::__tree<art::Histogram<unsigned long>*, art::CompareHistorgramByTimeSpentDeclining, std::__1::allocator<art::Histogram<unsigned long>*>>::destroy(std::__1::__tree_node<art::Histogram<unsigned long>*, void*>*)
  thread #17, name = 'main', stop reason = breakpoint 1.1
    frame #0: 0x00000077371109c8 libgameinuse.so`update(memory=0x0000007738264be0, platform=0x0000007738264b40, input=0x0000007738264b70, time=0x0000007738264b60) at game.cpp:366:9
   363          
   364          memory->inputValue = Math::clamp01(memory->inputValue + 0.1f);
   365      }
-> 366      if (input->arrowDown)
   367      {
   368          memory->inputValue = Math::clamp01(memory->inputValue - 0.1f);
   369      }
(lldb) c
Process 4330 resuming

mehlian avatar Jan 09 '24 20:01 mehlian