ilya-nozhkin added a comment.

In D119548#3321357 <https://reviews.llvm.org/D119548#3321357>, @jingham wrote:

> SBTarget.Launch calls Target::Launch.  That sets up a hijacker for the "stop 
> at the first instruction" event regardless of the Sync mode.

The problem that it sets up this hijacker too late. See this part of the log 
(lines starting with // are my comments):

  // The process has been launched successfully, its internal hijacker is 
removed.
   0x000002875FCB1AE0 Broadcaster("lldb.process")::RestoreBroadcaster (about to 
pop listener("LaunchEventHijack")=0x000002875FFCF890)
   Process::SetPublicState (state = stopped, restarted = 0)
   Process::SetPublicState (stopped) -- unlocking run lock
   Process::lldb_private::Process::StartPrivateStateThread() starting private 
state thread
  
  // Some internal magic happens inside the private state thread.
   Process::lldb_private::Process::ControlPrivateStateThread (signal = 4)
   Sending control event of type: 4.
   0000028760372F90 
Broadcaster("lldb.process.internal_state_control_broadcaster")::BroadcastEvent 
(event_sp = {0000028760571460 Event: broadcaster = 000002876047C4C0 
(lldb.process.internal_state_control_broadcaster), type = 0x00000004 
(control-resume), data = {Generic Event Data}}, unique =0) hijack = 
0000000000000000
   000002875FFD00D0 Listener('lldb.process.internal_state_listener')::AddEvent 
(event_sp = {0000028760571460})
   Process::lldb_private::Process::RunPrivateStateThread (arg = 
000002876047C350, pid = 9944) thread starting...
   timeout = <infinite>, event_sp)...
   this = 0x000002875FFD00D0, timeout = <infinite> for 
lldb.process.internal_state_listener
   000002875FFD00D0 'lldb.process.internal_state_listener' 
Listener::FindNextEventInternal(broadcaster=000002876047C4C0, 
broadcaster_names=0000000000000000[0], event_type_mask=0x00000000, remove=1) 
event 0000028760571460
   Process::lldb_private::Process::RunPrivateStateThread (arg = 
000002876047C350, pid = 9944) got a control event: 4
   000002875FFCF5D0 Listener::StartListeningForEvents (broadcaster = 
000002876047C9C8, mask = 0x00000020) acquired_mask = 0x00000020 for 
Communication::SyncronizeWithReadThread
   timeout = <infinite>, event_sp)...
   this = 0x000002875FFD00D0, timeout = <infinite> for 
lldb.process.internal_state_listener
   Process::ShouldBroadcastEvent (00000287604D4CB0) => new state: stopped, last 
broadcast state: stopped - YES
   Process::lldb_private::Process::HandlePrivateEvent (pid = 9944) broadcasting 
new state stopped (old state stopped) to public
  
  // Process broadcasts the stop event.
   000002875FCB1AE0 Broadcaster("lldb.process")::BroadcastEvent (event_sp = 
{00000287604D4CB0 Event: broadcaster = 000002876047C378 (lldb.process), type = 
0x00000001 (state-changed), data = { process = 000002876047C350 (pid = 9944), 
state = stopped}}, unique =0) hijack = 0000000000000000
  
  // It is catched by "lldb.Debugger"!
   000002875DB0BD40 Listener('lldb.Debugger')::AddEvent (event_sp = 
{00000287604D4CB0})
  
  // And only now the target adds its hijacking listener!
   0x000002875FCB1AE0 Broadcaster("lldb.process")::HijackBroadcaster 
(listener("lldb.Target.Launch.hijack")=0x000002875FFCFE10)


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D119548/new/

https://reviews.llvm.org/D119548

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to