2010-05-04 8 views
5

समय-समय पर मुझे ब्रेकपॉइंट ट्रिगर होने पर यह मिलता है। ऐसा लगता है जैसे स्टैक फ्रेम सहेजे नहीं जा रहे हैं, इसलिए मैं कॉल स्टैक के माध्यम से वापस नहीं जा सकता - एक वास्तविक दर्द। उदाहरण के लिए नीचे देखेंरूबी-डीबग क्यों कहते हैं 'सहेजे गए फ्रेम अपूर्ण हो सकते हैं'

--> #0 BatchProcess.add_failure_record(row_id#Fixnum, test#Struct::Test, message#String,...) 
     at line server/processes/batch.rb:309 
Warning: saved frames may be incomplete; compare with caller(0). 
(rdb:1) pp caller 
["./server/processes/batch.rb:309:in `run_tests'", 
"./server/processes/common/generic_process.rb:219:in `each'", 
"./server/processes/common/generic_process.rb:219:in `run_tests'", 
"./server/processes/common/generic_process.rb:271:in `run_plan'", 
"./server/processes/common/corrections.rb:19:in `each_with_index'", 
"./server/processes/common/generic_process.rb:266:in `each'", 
"./server/processes/common/generic_process.rb:266:in `each_with_index'", 
"./server/processes/common/generic_process.rb:266:in `run_plan'", 
"./server/processes/batch.rb:202:in `run_engine'", 
"/usr/lib/ruby/1.8/benchmark.rb:293:in `measure'", 
"./server/processes/batch.rb:201:in `run_engine'", 
"./server/processes/common/generic_process.rb:88:in `run_dataset'", 
"./server/processes/batch.rb:210:in `run_dataset'", 
"/usr/lib/ruby/1.8/benchmark.rb:293:in `measure'", 
"./server/processes/batch.rb:209:in `run_dataset'", 
"./server/processes/common/generic_process.rb:159:in `run'", 
"./server/processes/common/generic_process.rb:158:in `each'", 
"./server/processes/common/generic_process.rb:158:in `run'", 
"./server/processes/batch.rb:350:in `run'", 
"/usr/lib/ruby/1.8/benchmark.rb:293:in `measure'", 
"./server/processes/batch.rb:349:in `run'", 
"server/processes/test_runs/run_tests.rb:55:in `run_one_process'", 
"server/processes/test_runs/run_tests.rb:81"] 

यह कैसे हो रहा है इस पर कोई विचार है?

उत्तर

7

इसका मतलब है कि रूबी के कॉलर() फ़ंक्शन द्वारा रिपोर्ट किए गए कॉल स्टैक को कॉल स्टैक के रूप में डीबगर रिकॉर्ड करने से मेल नहीं खाता है।

यह तब हो सकता है जब डीबगर ट्रैकिंग सक्रिय हो, जबकि कॉल स्टैक में एक से अधिक फ्रेम थे। यह रूबी-डीबग में एक बग के परिणामस्वरूप भी हो सकता है जहां यह सही तरीके से ट्रैकिंग नहीं कर रहा है। एक "उपाय" इसे मुख्य फ़ाइल में फ़ाइल की शुरुआत में रखना है: को 'रूबी-डीबग' की आवश्यकता होती है; Debugger.start

हालांकि इसका नकारात्मक पक्ष यह है कि कार्यक्रम की शुरुआत से कुछ अतिरिक्त ओवरहेड जोड़ा गया है।

कहीं भी आपके रूबी कोड में आपको रुबी को कॉल और रिटर्न ट्रैक करना शुरू करना होगा। आमतौर पर यह Debugger.start और Debugger.stop या Debugger.start {} के संयोजन के माध्यम से किया जाता है। यदि आप ढांचे से चल रहे हैं, तो ये आदेश आपके लिए कहीं भी जारी किए जाते हैं, इसलिए सही स्थान पर जारी करने की ज़िम्मेदारी उस प्रोग्रामर पर निर्भर करती है जिसने यह कोड जोड़ा।

अंत में, रेखा नीचे मैं संदेश को बदल थोड़ा और अधिक स्पष्ट हो जाएगा:

Warning: saved frames may be incomplete; 
compare debugger backtrace (bt) with Ruby caller(0). 
+0

धन्यवाद रॉकी। अगली बार ऐसा होता है मैं डीबगर का प्रयास करूंगा। स्टार्ट वर्कअराउंड –

+0

मैंने उस समस्या को दोबारा मारा और आपका समाधान काम किया। आप के लिए पूर्ण अंक! –

+0

मुझे बिल्कुल यकीन नहीं है कि यह नया संदेश या तो सूचनात्मक है या नहीं। हो सकता है कि इसमें "कॉलिंग पर विचार करें" जैसे कुछ शामिल हों, "रूबी-डीबग" की आवश्यकता हो \ n डीबगर.स्टार्ट आपके प्रोग्राम की शुरुआत में। " – Smar

संबंधित मुद्दे