লিনাক্সের জন্য এবং আমরা C/C++ কোড কম্পাইল করতে gcc ব্যবহার করতে পারি। এই কম্পাইলার glibc লাইব্রেরি ব্যবহার করে। আমরা ব্যাকট্রেস() ফাংশন ব্যবহার করে ত্রুটি খুঁজে বের করতে পারি। এই ফাংশনটি execinfo.h হেডার ফাইলের ভিতরে থাকে। এই উদাহরণে, আমরা স্ট্যাক ট্রেস বৈশিষ্ট্য ব্যবহার করে সেগমেন্টেশন ফল্ট ত্রুটি প্রদর্শন করতে যাচ্ছি।
উদাহরণ
#include <iostream> #include <execinfo.h> #include <signal.h> #include <cstdlib> #include <unistd.h> using namespace std; void error_handler(int sig) { void *array[10]; size_t size; size = backtrace(array, 10); //get the void pointers for all of the entries cout << "Error: signal "<< sig <<":\n"; //display error signal backtrace_symbols_fd(array, size, STDERR_FILENO); exit(1); } void invalid_index() { int *ptr = (int*) - 1; cout << *ptr << endl; // segmentation error } void func1() { invalid_index(); } void func2() { func1(); } int main(int argc, char **argv) { signal(SIGSEGV, error_handler); // use handler to print the errors func2(); // this will call all other function to generate error }
আউটপুট
Error: signal 11: ./a.out(+0x825)[0x5579a31d7825] /lib/x86_64-linux-gnu/libc.so.6(+0x3ef20)[0x7f7689009f20] ./a.out(+0x880)[0x5579a31d7880] ./a.out(+0x8a1)[0x5579a31d78a1] ./a.out(+0x8ad)[0x5579a31d78ad] ./a.out(+0x8d5)[0x5579a31d78d5] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xe7)[0x7f7688fecb97] ./a.out(+0x71a)[0x5579a31d771a]