-
Notifications
You must be signed in to change notification settings - Fork 81
Ruby attach to process #82
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
denofevil
merged 14 commits into
ruby-debug:master
from
equivalence1:ruby-attach-to-process
Sep 23, 2016
Merged
Changes from 1 commit
Commits
Show all changes
14 commits
Select commit
Hold shift + click to select a range
3681a05
attach mode added
72b1c4a
gdb_wrapper and debugger_loader added
768323f
closing interface
fa128e1
relative imports replaced with normal ones. `print_greeting_msg` now …
645aab6
bug fix: cli_debug should be part of options because pre_child sets D…
0c2a329
added interaction with gdb, added c-level attaching
equivalence1 9c96a76
added `attached` flag to indicate if we are currently under debug. Th…
equivalence1 32f61fe
lldb added
equivalence1 36d3686
some cosmetic changes + choosing with debugger to use
equivalence1 096cd72
printing backtrace of all threads in case of fail + some minor chages
equivalence1 c066895
little refactoring. deleted unused functions.
equivalence1 cede127
finding attach.so file in debase added
equivalence1 ea4af28
bug fix: no need to close already closed stream (it works well only s…
equivalence1 7a15fac
replaced global variables with local ones
equivalence1 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -13,15 +13,15 @@ options = OpenStruct.new( | |
| opts = OptionParser.new do |opts| | ||
| # TODO need some banner | ||
| opts.banner = <<EOB | ||
| Some usefull banner. | ||
| Some useful banner. | ||
| EOB | ||
|
|
||
| opts.on("--pid PID", "pid of process you want to attach to for debugging") do |pid| | ||
| options.pid = pid | ||
| end | ||
|
|
||
| opts.on("--sdk-path SDK_PATH", "path to ruby interpreter") do |sdk_path| | ||
| options.sdk_path = sdk_path | ||
| opts.on("--ruby-path SDK_PATH", "path to ruby interpreter") do |ruby_path| | ||
| options.ruby_path = ruby_path | ||
| end | ||
|
|
||
| opts.on("--uid UID", "uid which this process should set after executing gdb attach") do |uid| | ||
|
|
@@ -40,8 +40,8 @@ unless options.pid | |
| exit 1 | ||
| end | ||
|
|
||
| unless options.sdk_path | ||
| $stderr.puts "You must specify SDK_PATH of ruby interpreter" | ||
| unless options.ruby_path | ||
| $stderr.puts "You must specify RUBY_PATH of ruby interpreter" | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. How about "You should specify path to the ruby interpreter"? |
||
| exit 1 | ||
| end | ||
|
|
||
|
|
@@ -61,27 +61,34 @@ gems_to_include = '["' + options.gems_to_include * '", "' + '"]' | |
|
|
||
| commands_list = [] | ||
|
|
||
| def commands_list.add_command(command) | ||
| self << "-ex \"#{command}\"" | ||
| def commands_list.<<(command) | ||
| self.push "-ex \"#{command}\"" | ||
| end | ||
|
|
||
| path_to_debugger_loader = File.expand_path(File.dirname(__FILE__)) + "/../lib/ruby-debug-ide/attach/debugger_loader" | ||
| path_to_debugger_loader = File.expand_path(File.dirname(__FILE__)) + '/../lib/ruby-debug-ide/attach/debugger_loader' | ||
|
|
||
| # rb_finish: wait while execution comes to the next line (this is essential!) | ||
| commands_list.add_command("call rb_eval_string_protect(\\\"set_trace_func lambda{|event, file, line, id, binding, classname| if /line/ =~ event; sleep 0; set_trace_func(nil); end}\\\", (int *)0)") | ||
| commands_list.add_command("tbreak rb_f_sleep") | ||
| commands_list.add_command("cont") | ||
| # rb_finish: wait while execution comes to the next line. | ||
| # This is essential because we could interrupt process in a middle | ||
| # of some evaluations (e.g., system call) | ||
| commands_list << "call rb_eval_string_protect(\\\"set_trace_func lambda{|event, file, line, id, binding, classname| if /line/ =~ event; sleep 0; set_trace_func(nil); end}\\\", (int *)0)" | ||
| commands_list << "tbreak rb_f_sleep" | ||
| commands_list << "cont" | ||
|
|
||
| # evalr: loading debugger into the process | ||
| evalr = "call rb_eval_string_protect(%s, (int *)0)" | ||
| commands_list.add_command("#{evalr}" % ["(\\\"require '#{path_to_debugger_loader}'; load_debugger(#{gems_to_include.gsub("\"", "'")}, #{argv.gsub("\"", "'")})\\\")"]) | ||
| commands_list << ("#{evalr}" % ["(\\\"require '#{path_to_debugger_loader}'; load_debugger(#{gems_to_include.gsub("\"", "'")}, #{argv.gsub("\"", "'")})\\\")"]) | ||
|
|
||
| # q: exit gdb and continue process execution with debugger | ||
| commands_list.add_command("q") | ||
| commands_list << "q" | ||
|
|
||
| cmd = "gdb #{options.sdk_path} #{options.pid} -nh -nx -batch #{commands_list.join(" ")}" | ||
| cmd = "gdb #{options.ruby_path} #{options.pid} -nh -nx -batch #{commands_list.join(" ")}" | ||
|
|
||
| $stderr.puts "Fast Debugger " | ||
| options.gems_to_include.each do |gem_path| | ||
| $LOAD_PATH.unshift(gem_path) unless $LOAD_PATH.include?(gem_path) | ||
| end | ||
|
|
||
| require 'ruby-debug-ide/greeter' | ||
| Debugger::print_greeting_msg(nil, nil) | ||
| $stderr.puts "Running command #{cmd}" | ||
|
|
||
| `#{cmd}` or raise "GDB failed. Aborting." | ||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,40 @@ | ||
| if RUBY_VERSION < '2.0' || defined?(JRUBY_VERSION) | ||
| require 'ruby-debug-base' | ||
| else | ||
| require 'debase' | ||
| end | ||
|
|
||
| require 'ruby-debug-ide/version' | ||
| require 'ruby-debug-ide/ide_processor' | ||
|
|
||
| module Debugger | ||
|
|
||
| class << self | ||
| def print_greeting_msg(host, port) | ||
| base_gem_name = if defined?(JRUBY_VERSION) || RUBY_VERSION < '1.9.0' | ||
| 'ruby-debug-base' | ||
| elsif RUBY_VERSION < '2.0.0' | ||
| 'ruby-debug-base19x' | ||
| else | ||
| 'debase' | ||
| end | ||
|
|
||
| file_filtering_support = if Command.file_filter_supported? | ||
| 'supported' | ||
| else | ||
| 'not supported' | ||
| end | ||
|
|
||
| if host && port | ||
| listens_on = " listens on #{host}:#{port}\n" | ||
| else | ||
| listens_on = "\n" | ||
| end | ||
|
|
||
| msg = "Fast Debugger (ruby-debug-ide #{IDE_VERSION}, #{base_gem_name} #{VERSION}, file filtering is #{file_filtering_support})" + listens_on | ||
|
|
||
| $stderr.printf msg | ||
| end | ||
| end | ||
|
|
||
| end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SDK_PATH left in hint