क्या निष्पादन योग्य के रन-टाइम पर पहचान करने का कोई तरीका है valgrind के भीतर से चल रहा है? मेरे पास सी ++ यूनिट परीक्षण का एक सेट है, और उनमें से एक std::bad_alloc
फेंकने की अपेक्षा करता है। जब मैं इसे वालग्रिंड के नीचे चलाता हूं, तो यह पूरी तरह से बाहर निकलता है, मुझे मेमोरी लीक (वाल्ग्रिंड का उपयोग करके) और व्यवहार (अपवाद को फेंकने की उम्मीद) दोनों के परीक्षण से रोकता है।मैं कैसे पता लगा सकता हूं कि कोई प्रोग्राम वाल्ग्रिंड के भीतर से चल रहा है या नहीं?
यहाँ एक न्यूनतम उदाहरण है कि reproduces यह है:
#include <vector>
int main()
{
size_t uint_max = static_cast<size_t>(-1);
std::vector<char> v;
v.reserve(uint_max);
}
valgrind चल रहा है, मैं इस उत्पादन प्राप्त करें:
Warning: silly arg (-1) to __builtin_new()
new/new[] failed and should throw an exception, but Valgrind
cannot throw exceptions and so is aborting instead. Sorry.
at 0x40192BC: VALGRIND_PRINTF_BACKTRACE (valgrind.h:319)
by 0x401C823: operator new(unsigned) (vg_replace_malloc.c:164)
by 0x80487BF: std::vector<char, std::allocator<char> >::reserve(unsigned) new_allocator.h:92)
by 0x804874D: main (vg.cxx:6)
मैं अपने इकाई परीक्षण संशोधित करने के लिए बस अपमानजनक कोड नहीं जब छोड़ना चाहते यह valgrind के भीतर से चलाया जा रहा है। क्या यह संभव है?
इसके लिए धन्यवाद, मैं वर्षों से * पीसने का उपयोग कर रहा हूं लेकिन इंटरफ़ेस को शायद ही कभी छुआ। वैट्रिंड/valgrind.h मौजूद है, तो valrgind के तहत चलते समय स्वचालित रूप से मेरे डीबग printfs() और assertions चालू करने के लिए स्वच्छता बनाने के लिए आसान है .. फिर से धन्यवाद! बहुत उपयोगी –