Class: Google::Cloud::Debugger::Agent

Inherits:
Object
  • Object
show all
Includes:
Stackdriver::Core::AsyncActor
Defined in:
lib/google/cloud/debugger/agent.rb

Overview

Agent

The Stackdriver Debugger Agent runs on the same system where a debuggee application is running. The agent is responsible for sending state data, such as the value of program variables and the call stack, to Stackdriver Debugger when the code at a breakpoint location is executed.

The Debugger Agent runs in its own child thread when started. It ensures the instrumented application is registered properly and constantly monitors for any active breakpoints. Once the agent gets updated with active breakpoints from Stackdriver Debugger service, it facilitates the breakpoints in application requests thread, then transport the result snapshot back to Stackdriver Debugger service asynchronously.

Examples:

require "google/cloud/debugger"

debugger = Google::Cloud::Debugger.new
agent = debugger.agent
agent.start

Constant Summary collapse

DEFAULT_LOG_NAME =

Name of the logpoints log file.

"debugger_logpoints"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(service, logger: nil, module_name:, module_version:) ⇒ Agent

Create a new Debugger Agent instance.

Parameters:

  • service (Google::Cloud::Debugger::Service)

    The gRPC Service object

  • logger (Google::Cloud::Logging::Logger)

    The logger used to write the results of Logpoints.

  • module_name (String)

    Name for the debuggee application. Optional.

  • module_version (String)

    Version identifier for the debuggee application. Optional.



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/google/cloud/debugger/agent.rb', line 109

def initialize service, logger: nil, module_name:, module_version:
  super()

  @service = service
  @debuggee = Debuggee.new service, module_name: module_name,
                                    module_version: module_version
  @tracer = Debugger::Tracer.new self
  @breakpoint_manager = BreakpointManager.new self, service
  @breakpoint_manager.on_breakpoints_change =
    method :breakpoints_change_callback

  @transmitter = Transmitter.new self, service

  @logger = logger || default_logger

  # Agent actor thread needs to force exit immediately.
  set_cleanup_options timeout: 0
end

Instance Attribute Details

#breakpoint_managerGoogle::Cloud::Debugger::BreakpointManager (readonly)

It manages syncing breakpoints between the Debugger Agent and Stackdriver Debugger service



75
76
77
# File 'lib/google/cloud/debugger/agent.rb', line 75

def breakpoint_manager
  @breakpoint_manager
end

#debuggeeGoogle::Cloud::Debugger::Debuggee (readonly)

The gRPC Debuggee representation of the debuggee application. It contains identification information to match running application to specific Cloud Source Repository code base, and correctly group same versions of the debuggee application together through a generated unique identifier.



69
70
71
# File 'lib/google/cloud/debugger/agent.rb', line 69

def debuggee
  @debuggee
end

#loggerObject

The logger used to write the results of Logpoints.



91
92
93
# File 'lib/google/cloud/debugger/agent.rb', line 91

def logger
  @logger
end

#tracerGoogle::Cloud::Debugger::Tracer (readonly)

It monitors the debuggee application and triggers breakpoint evaluation when breakpoints are set.



81
82
83
# File 'lib/google/cloud/debugger/agent.rb', line 81

def tracer
  @tracer
end

#transmitterGoogle::Cloud::Debugger::Transmiter (readonly)

It sends evaluated breakpoints snapshot back to Stackdriver Debugger Service.

Returns:

  • (Google::Cloud::Debugger::Transmiter)


87
88
89
# File 'lib/google/cloud/debugger/agent.rb', line 87

def transmitter
  @transmitter
end

Instance Method Details

#startObject

Starts the Debugger Agent in a child thread, where debuggee application registration and breakpoints querying will take place. It also starts the transmitter in another child thread.



133
134
135
136
# File 'lib/google/cloud/debugger/agent.rb', line 133

def start
  transmitter.start
  async_start
end

#stopObject

Stops and terminates the Debugger Agent. It also properly shuts down transmitter and tracer.

Once Debugger Agent is stopped, it cannot be started again.



144
145
146
147
# File 'lib/google/cloud/debugger/agent.rb', line 144

def stop
  transmitter.stop
  async_stop
end

#stop_tracerObject

Stops the tracer regardless of whether any active breakpoints are present. Once the tracer stops monitoring the debuggee application, the application can return to normal performance.



153
154
155
# File 'lib/google/cloud/debugger/agent.rb', line 153

def stop_tracer
  tracer.stop
end