質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.61%

  • Ruby

    7368questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • プログラミング言語

    669questions

    プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

pryのshow-stakは、呼びだされた未完了のメソッドが確認できるものではないのでしょうか?

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 325

mitsuru793

score 149

プログラムにおいて、スタックとは関数が呼び出した際に積まれ、その関数が実行終了したらポップするものだと思っています。スタックトレースとは現在のスタックの積まれているもの、メソッドの呼び出し順を確認するために使うかと思います。

rubyのgemであるtwitterのソースコードを読み始めました。ソースコードリーディングにはpryがいいとのことで、これを使っていこうと思います。今回は、client.updateメソッドにbinding.pryを記述して追っていくつもりでした。updateに入り、show-stackを実行するとupdateが積まれているのがわかります。ここでupdateの中で呼びだされているupdate!メソッドにstepして入ってみると、show-stackしてもスタックが表示されなくなりました。No caller stack available!と表示されます。

私の考えではupdateの上にupdate!が積まれてるかと思いましたが、そうではなかったみたいです。上記のスタックに関する知識が間違っているのでしょうか?それとも別の問題があるのでしょうか?
他にもソースコードリーディングに役立つものがあれば教えて下さい。

ご回答、よろしくお願い致します。

 環境

ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14]
Pry version 0.10.2 on Ruby 2.2.2

# Gemfile
source 'http://rubygems.org'

gem 'pry'
gem 'pry-byebug'
gem 'pry-stack_explorer'
gem 'activesupport'
gem 'twitter'

 pryでの実行ログ

# トークンは実際に自分のを入れています。
client = Twitter::REST::Client.new do |config|
  config.consumer_key        = "YOUR_CONSUMER_KEY"
  config.consumer_secret     = "YOUR_CONSUMER_SECRET"
  config.access_token        = "YOUR_ACCESS_TOKEN"
  config.access_token_secret = "YOUR_ACCESS_SECRET"
end

show-stack
Showing all accessible frames in stack (5 in total):
--
=> #0  __pry__ <self.__pry__(UNKNOWN) (undefined method)>
   #1 [block]   block in parse_options <Pry::CLI.parse_options(args=?)>
   #2 [method]  parse_options <Pry::CLI.parse_options(args=?)>
   #3 [top]     <top (required)> 
   #4 [main]    <main> 

From: /Users/mitsuru/.rbenv/versions/2.2.2/gemsets/mygemsets/gems/twitter-5.15.0/lib/twitter/rest/tweets.rb @ line 129 Twitter::REST::Tweets#update:
client.update("hello")
    127: def update(status, options = {})
    128:   binding.pry
 => 129:   update!(status, options)
    130: rescue Twitter::Error::DuplicateStatus
    131:   user_timeline(:count => 1).first
    132: end

show-stack
Showing all accessible frames in stack (5 in total):
--
=> #0  update <Twitter::REST::Tweets#update(status, options=?)>
   #1 [block]   block in parse_options <Pry::CLI.parse_options(args=?)>
   #2 [method]  parse_options <Pry::CLI.parse_options(args=?)>
   #3 [top]     <top (required)> 
   #4 [main]    <main> 
[2] pry(#<Twitter::REST::Client>)> step

step
From: /Users/mitsuru/.rbenv/versions/2.2.2/gemsets/mygemsets/gems/twitter-5.15.0/lib/twitter/rest/tweets.rb @ line 156 Twitter::REST::Tweets#update!:
    155: def update!(status, options = {})
 => 156:   hash = options.dup
    157:   hash[:in_reply_to_status_id] = hash.delete(:in_reply_to_status).id unless hash[:in_reply_to_status].nil?
    158:   hash[:place_id] = hash.delete(:place).woeid unless hash[:place].nil?
    159:   perform_post_with_object('/1.1/statuses/update.json', hash.merge(:status => status), Twitter::Tweet)
    160: end

show-stack
No caller stack available!
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    Rails Twitter認証ログインをつくりたい

    RailsでWebアプリを構築しています。 そこで、Railsで作ったアプリにTwitterと認証してログイン及び ログアウトする機能を実装していきたいのですが gemのOmni

  • 受付中

    Ruby とTwitterStreaming API でツイートを取得したい

    Ruby とstreaming APIでつぶやきを取得したいのですが、一時間に60ツイートくらいしか取得できません。もっと多く取得できればと思うのですが、良いコード等ありましたら、

  • 解決済

    最新のTwitterAPIに対応できるコードを知りたい!!

    はじめまして! 現在、githubで公開されているOAuthライブラリ「twitteroauth」を使用して、Twitterのつぶやき情報を集めようとしている者です。 http

  • 解決済

    rake routesした際のprefixとは??

    皆様、よろしくお願い申し上げます。 routingを設定した時に、名前付きルートを確認するため"prefix"を確認することがあるとおもいます。 私は"prefix"とはなんぞ

  • 解決済

    ruby on railsのハッシュのハッシュにアクセスするときのキーの存在確認

    ruby on railsで開発をしています。 変数にハッシュのハッシュが入っていたときに値の取得が長くなってしまうのですが、うまい方法はないでしょうか var = {"A" =

  • 受付中

    【Ruby】SSL接続エラー

    前提・実現したいことAPIを利用して一定間隔(10秒)でデータを取得したい。 発生している問題・エラーメッセージSSLで接続すると下記のようなエラーになる。 SSL_connec

  • 解決済

    ツイートの投稿

    大学で卒業研究としてTwitterAPIを利用したアプリケーションを開発しています。 その過程で以下のようにツイート投稿のところで行き詰まりました。 同じようなコードでタイムラ

  • 解決済

    Ruby on Rails でツイート機能が実装できない

    前提・実現したいこと Ruby on Rails でTwitterのツイート機能を実装したい 発生している問題・エラーメッセージ Twitter::Error::Unau

同じタグがついた質問を見る

  • Ruby

    7368questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • プログラミング言語

    669questions

    プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

  • トップ
  • Rubyに関する質問
  • pryのshow-stakは、呼びだされた未完了のメソッドが確認できるものではないのでしょうか?