Project

gdb.rb

0.06
No commit activity in last 3 years
No release in over 3 years
A set of gdb7 extensions for the MRI/REE 1.8.x interpreter (and basic support for YARV 1.9.2)
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies
 Project Readme
gdb7 hooks for MRI
  (c) 2009 Aman Gupta (tmm1)

=== Requirements

  gdb.rb currently requires x86_64 linux, and MRI/REE 1.8.x or 1.9.2.

=== Usage

  $ ps aux | grep deploy.rb
  13074  0.0  0.7  90164 31720 ?        R    Sep23   2:21 /usr/bin/ruby /usr/bin/god -c deploy.rb

  $ sudo gdb.rb 13074
  GNU gdb (GDB) 7.0
  Reading symbols from /usr/bin/ruby...done.
  Attaching to program: /usr/bin/ruby, process 13074
  0x00007fa8b9cb3c93 in select () from /lib/libc.so.6

  (gdb) ruby eval 1+2
  2

  (gdb) ruby eval Thread.list.count
  17

  (gdb) ruby threads list
  0x1589000 main      thread  THREAD_STOPPED   WAIT_JOIN(0x19ef400)           4417 bytes
  0x19ef400           thread  THREAD_STOPPED   WAIT_TIME(57.10)               6267 bytes
  0x19e3400           thread  THREAD_STOPPED   WAIT_FD(5)                    10405 bytes
  0x19e0000           thread  THREAD_STOPPED   WAIT_NONE                     14237 bytes
  0x19e0400           thread  THREAD_STOPPED   WAIT_NONE                     14237 bytes
  0x19e0800           thread  THREAD_STOPPED   WAIT_NONE                     14237 bytes
  0x19e0c00           thread  THREAD_STOPPED   WAIT_NONE                     14237 bytes
  0x19de000           thread  THREAD_STOPPED   WAIT_NONE                     14237 bytes
  0x19de400           thread  THREAD_STOPPED   WAIT_NONE                     14237 bytes
  0x19de800           thread  THREAD_STOPPED   WAIT_NONE                     14237 bytes
  0x19dec00           thread  THREAD_STOPPED   WAIT_NONE                     14237 bytes
  0x19dc000           thread  THREAD_STOPPED   WAIT_NONE                     14237 bytes
  0x19dc400           thread  THREAD_STOPPED   WAIT_NONE                     14237 bytes
  0x19dc800           thread  THREAD_STOPPED   WAIT_NONE                     14237 bytes
  0x19dcc00           thread  THREAD_STOPPED   WAIT_NONE                     14237 bytes
  0x2266800           thread  THREAD_STOPPED   WAIT_NONE                     14237 bytes
  0x1d63000      curr thread  THREAD_RUNNABLE  WAIT_NONE

  (gdb) ruby threads
  0x1589000 main      thread  THREAD_STOPPED   WAIT_JOIN(0x19ef400)           4417 bytes
         node_call      join in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god.rb:626
         node_call      start in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god.rb:633
         node_call      at_exit in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god.rb:666
         node_fcall     (unknown) in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/cli/run.rb:87

  0x19ef400           thread  THREAD_STOPPED   WAIT_TIME(45.25)               6267 bytes
         node_fcall     sleep in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god.rb:622
         node_fcall     start in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god.rb:621
         node_fcall     loop in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god.rb:621
         node_call      start in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god.rb:620
         node_call      initialize in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god.rb:620
         node_call      new in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god.rb:620
         node_call      start in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god.rb:633
         node_call      at_exit in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god.rb:666
         node_fcall     (unknown) in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/cli/run.rb:87

  0x19e3400           thread  THREAD_STOPPED   WAIT_FD(5)                    10405 bytes
         node_call      accept in /usr/lib/ruby/1.8/drb/unix.rb:98
         node_call      accept in /usr/lib/ruby/1.8/drb/drb.rb:1581
         node_vcall     main_loop in /usr/lib/ruby/1.8/drb/drb.rb:1430
         node_call      run in /usr/lib/ruby/1.8/drb/drb.rb:1427
         node_call      start in /usr/lib/ruby/1.8/drb/drb.rb:1427
         node_vcall     run in /usr/lib/ruby/1.8/drb/drb.rb:1347
         node_call      initialize in /usr/lib/ruby/1.8/drb/drb.rb:1627

  (gdb) ruby threads trace
  -- Tracing thread context switches.
  0x19ef400           thread  THREAD_RUNNABLE  WAIT_NONE                      6267 bytes
  0x1d63000           thread  THREAD_RUNNABLE  WAIT_NONE                      8623 bytes
  0x19e3400           thread  THREAD_RUNNABLE  WAIT_NONE                     10405 bytes
  0x3001c00           thread  THREAD_RUNNABLE  WAIT_NONE                      9507 bytes
  0x19e3400           thread  THREAD_RUNNABLE  WAIT_NONE                      9507 bytes
  0x3001c00           thread  THREAD_RUNNABLE  WAIT_NONE                     15059 bytes
  0x1d63000           thread  THREAD_RUNNABLE  WAIT_NONE                      8623 bytes
  0x3001c00           thread  THREAD_RUNNABLE  WAIT_NONE                     15059 bytes

  (gdb) ruby trace 25
  -- Tracing the next 25 ruby method calls.
  handle_events in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:66
  watching_pid? in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:58
  [] in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:59
  default in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:59
  handle_events in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:66
  watching_pid? in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:58
  [] in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:59
  default in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:59
  handle_events in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:66
  watching_pid? in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:58
  [] in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:59
  default in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:59
  handle_events in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:66
  handle_events in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:66
  handle_events in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:66
  handle_events in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:66
  handle_events in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:66
  handle_events in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:66
  handle_events in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:66
  handle_events in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:66
  handle_events in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:66
  watching_pid? in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:58
  [] in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:59
  default in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:59
  handle_events in /usr/lib/ruby/gems/1.8/gems/god-0.7.13/bin/../lib/god/event_handler.rb:66

  (gdb) ruby objects

    HEAPS            8
    SLOTS      1686252
    LIVE        893327 (52.98%)
    FREE        792925 (47.02%)

    bignum           2 (0.00%)
    file            51 (0.01%)
    float           77 (0.01%)
    module         781 (0.09%)
    varmap        1354 (0.15%)
    scope         1641 (0.18%)
    match         1676 (0.19%)
    iclass        1744 (0.20%)
    regexp        2255 (0.25%)
    data          3539 (0.40%)
    class         3680 (0.41%)
    hash          6196 (0.69%)
    object        8785 (0.98%)
    array        13850 (1.55%)
    string      105350 (11.79%)
    node        742346 (83.10%)

  (gdb) ruby objects classes
         1 YAML::Syck::Resolver
         1 YAML::Syck::Resolver
         1 SystemStackError
         1 Object
         1 Object
         1 NoMemoryError
         1 fatal
         1 Object
         1 Gem::SourceIndex
         1 Gem::GemPathSearcher
         1 Gem::ConfigFile
         1 God::Logger
         1 God::SimpleLogger
         1 God::CLI::Run
         1 DRb::DRbServer::InvokeMethod
         1 DRb::DRbServer
         1 DRb::DRbIdConv
         1 God::Registry
         1 OptionParser::Switch::OptionalArgument
         1 OptionParser
         1 God::Socket
         1 God::Contacts::Email
         2 Date::Infinity
         2 DRb::DRbMessage
         2 DRb::DRbBadScheme
         2 DRb::DRbUNIXSocket
         3 OptionParser::List
         6 IOError
         6 Errno::ESRCH
         6 OptionParser::Switch::RequiredArgument
         6 Net::InternetMessageIO
         7 God::System::SlashProcPoller
         7 God::System::Process
         7 God::DriverOperation
         7 Net::SMTP
         8 StandardError
        10 OptionParser::Switch::NoArgument
        13 God::Conditions::Flapping
        13 God::Conditions::ProcessExits
        13 God::Behaviors::CleanPidFile
        13 God::Process
        13 God::Watch
        13 God::Driver
        13 God::DriverEventQueue
        19 God::DriverEvent
        38 Process::Status
        39 God::Conditions::ProcessRunning
        50 Range
        63 Gem::Specification
        65 God::Metric
        81 Gem::Dependency
       174 Gem::Version::Part
       209 Gem::Requirement
       219 Gem::Version

  (gdb) ruby objects strings 
         70 u'bin'
         73 u' INFO'
         74 u'--main'
         74 u'I'
         75 u'..'
         78 u'ruby'
         80 u'::'
         92 u'1.3.2'
        100 u'README.rdoc'
        102 u' '
        108 u'Rakefile'
        110 u'README'
        114 u'\r\n'
        127 u'>='
        140 u'lib'
        158 u'0'
        294 u'\n'
        619 u''

      30503 unique strings
    3187435 bytes

  (gdb) ruby objects nodes 
      8156 NODE_EVSTR
      8966 NODE_COLON2
     10020 NODE_DVAR
     11493 NODE_AND
     13157 NODE_FCALL
     14493 NODE_VCALL
     15148 NODE_ARGS
     15180 NODE_CONST
     15445 NODE_SCOPE
     16582 NODE_IF
     21594 NODE_LASGN
     22084 NODE_METHOD
     26633 NODE_STR
     37819 NODE_LIT
     64325 NODE_LVAR
     64470 NODE_NEWLINE
     69436 NODE_BLOCK
     85825 NODE_CALL
    126739 NODE_ARRAY


=== TODO

  `ruby where` for the current stack trace
  `ruby print` to inspect ruby variables
  `ruby breakpoint` to breakpoint on ruby methods
  `ruby irb` for a simple interactive shell


=== Credits

  Tom Tromey for his work on gdb python support (gdb-eval.patch, gdb-breakpoints.patch) and help
  tracking down some memory leaks (gdb-leak.patch)

  Joe Damato for writing parts of ruby-gdb.py and various gdb hacks to make gdb.rb possible.


=== License

  Available under the Ruby License.