c++ - Valgrind एक खंड अतिप्रवाह रिपोर्टिंग




overflow callgrind (4)

जब मैं अपना प्रोग्राम वेलग्रिंड / कॉलग्रिंड के साथ चला रहा हूं तो मुझे निम्न संदेश बहुत मिलता है:

==21734== brk segment overflow in thread #1: can't grow to 0x4a39000 (विभिन्न पतों के साथ)

ध्यान दें कि यह स्टैक ओवरफ्लो संदेश से पहले नहीं है।

मुझे इस संदेश पर कोई दस्तावेज नहीं मिल रहा है और मुझे नहीं पता कि वास्तव में क्या बह निकला है।

किसी को भी मुझे पता लगाने में मदद कर सकते हैं कि समस्या क्या है? क्या यह वाल्ग्रिंड की समस्या है, या मेरे कार्यक्रम की?


क्या यह वाल्ग्रिंड की समस्या है, या मेरे कार्यक्रम की?

मैं कारण के बारे में अनिश्चित हूं, लेकिन मुझे लगता है कि आप इसे अनदेखा कर सकते हैं। कम से कम इसे कानूनी कार्यक्रमों के साथ ट्रिगर करना संभव प्रतीत होता है। मैंने यहां एक उदाहरण के साथ एक समान / गणन का उत्तर दिया:

Valgrind रिपोर्टिंग "ब्रैक सेगमेंट थ्रेड में ओवरफ़्लो # 1"


Piwi के जवाब में जोड़ते हुए, कभी-कभी आपके प्रोग्राम को कॉलग्रिंड को एक बड़े brk सेगमेंट (GBs तक, आपके कार्यान्वयन के आधार पर) का उपयोग करने की आवश्यकता होगी।

हार्डकोड कोड को संशोधित करने के लिए, coregrind/m_initimg/initimg-linux.c (लगभग 1000 लाइन VG_(ii_create_image) में VG_(ii_create_image) फ़ंक्शन पर VG_(ii_create_image) , अपनी आवश्यकताओं के अनुसार निम्नलिखित पंक्तियों को बदलें।

SizeT m1 = 1024 * 1024;
SizeT m8 = 8 * m1;

और वाल्ग्रिंड का पुनर्निर्माण।

m8 अधिकतम ब्रैक सेगमेंट साइज़ है जिसे कॉलग्रिंड आवंटित करने का प्रयास करेगा


उपयोगकर्ता के मैनुअल के लिए repo.or.cz/valgrind.git/blob/HEAD:/coregrind/m_syswrap/… से लाइन 1327, "उपयोगकर्ता मैनुअल में अनुभाग सीमाएं देखें":

सीमा आइटम 1:

Linux पर, Valgrind स्टार्टअप पर निर्धारित करता है कि RLIMIT_DATA rlim_cur का उपयोग करके 'brk सेगमेंट' का आकार न्यूनतम 1 MB और अधिकतम 8 MB है। Valgrind हर बार एक संदेश को आउटपुट करता है जब कोई प्रोग्राम स्टार्टअप पर निर्धारित आकार से परे brk खंड को विस्तारित करने का प्रयास करता है। अधिकांश प्रोग्राम इस सीमा के साथ ठीक से काम करेंगे, आमतौर पर अधिक मेमोरी प्राप्त करने के लिए मिमीप के उपयोग पर स्विच करके। यदि आपके प्रोग्राम को वास्तव में एक बड़े ब्रैक सेगमेंट की आवश्यकता है, तो आपको 8 एमबी हार्डकोड की सीमा को बदलना चाहिए और वाल्ग्रिंड को फिर से भरना चाहिए।


हालांकि यह वास्तव में एक उत्तर नहीं है, फिर भी यह ओपी के "किसी भी डॉक्स को नहीं पा सकता है" को संतुष्ट करता है:

1) repo.or.cz/valgrind.git/blob/HEAD:/coregrind/m_syswrap/…

1322 पंक्ति में चर्चा किए गए संदेश शामिल हैं

2) http://sourceforge.net/p/valgrind/mailman/message/34068401/

वह कमिट है जिसने फीचर पेश किया है, और संबंधित कमिट मैसेज पढ़ता है

Author: florian
Date: Wed Apr 29 13:59:16 2015
New Revision: 15155

Log: Issue an error message if then brk segment overflows.

जहां से हम इस प्रश्न को उन लोगों पर आगे बढ़ा सकते हैं, जो "इस संदर्भ में एक मतलब" ओवरकॉन्ग ओवर ब्रॉक सेगमेंट "के लिए एक योग्य उत्तर दे सकते हैं"!





callgrind