এটি হল valgrind.bin কমান্ড যা আমাদের একাধিক বিনামূল্যের অনলাইন ওয়ার্কস্টেশন যেমন উবুন্টু অনলাইন, ফেডোরা অনলাইন, উইন্ডোজ অনলাইন এমুলেটর বা MAC OS অনলাইন এমুলেটর ব্যবহার করে OnWorks ফ্রি হোস্টিং প্রদানকারীতে চালানো যেতে পারে।
কার্যক্রম:
NAME এর
valgrind - ডিবাগিং এবং প্রোফাইলিং প্রোগ্রামের জন্য সরঞ্জামগুলির একটি স্যুট
সাইনোপিসিস
ভালগ্রিন্ড [valgrind-বিকল্প] [আপনার-প্রোগ্রাম] [আপনার-প্রোগ্রাম-বিকল্প]
বর্ণনাঃ
ভালগ্রাইন্ড লিনাক্স এক্সিকিউটেবল ডিবাগিং এবং প্রোফাইলিং করার জন্য একটি নমনীয় প্রোগ্রাম। এটা গঠিত
একটি কোর, যা সফ্টওয়্যারে একটি সিন্থেটিক সিপিইউ প্রদান করে এবং ডিবাগিংয়ের একটি সিরিজ এবং
প্রোফাইলিং সরঞ্জাম। আর্কিটেকচারটি মডুলার, যাতে সহজেই নতুন টুল তৈরি করা যায়
বিদ্যমান কাঠামোকে বিরক্ত না করে।
নীচে বর্ণিত কিছু বিকল্প সমস্ত Valgrind টুলের সাথে কাজ করে এবং কিছু শুধুমাত্র সাথে কাজ করে
কয়েক বা এক. MEMCHECK OPTIONS বিভাগ এবং এর নিচের অংশগুলি টুল-নির্দিষ্ট বর্ণনা করে
অপশন।
এই ম্যানুয়াল পৃষ্ঠাটি শুধুমাত্র মৌলিক ব্যবহার এবং বিকল্পগুলি কভার করে৷ আরও ব্যাপক তথ্যের জন্য,
অনুগ্রহ করে আপনার সিস্টেমে HTML ডকুমেন্টেশন দেখুন:
$INSTALL/share/doc/valgrind/html/index.html, অথবা অনলাইন:
http://www.valgrind.org/docs/manual/index.html.
টুল নির্বাচন বিকল্প
একক সবচেয়ে গুরুত্বপূর্ণ বিকল্প।
--টুল= [ডিফল্ট: মেমচেক]
নামক Valgrind টুল চালান টুল নাম, যেমন memcheck, cachegrind, callgrind, helgrind,
drd, massif, lawkey, none, exp-sgcheck, exp-bbv, exp-dhat, ইত্যাদি।
বেসিক বিকল্প
এই বিকল্পগুলি সমস্ত সরঞ্জামের সাথে কাজ করে।
-h --help
সমস্ত বিকল্পের জন্য সাহায্য দেখান, মূল এবং নির্বাচিত টুল উভয়ের জন্য। যদি বিকল্প হয়
পুনরাবৃত্তি করা হয় এটি দেওয়ার সমতুল্য --হেল্প-ডিবাগ.
--হেল্প-ডিবাগ
একই রকম --help, কিন্তু ডিবাগিং বিকল্পগুলিও তালিকাভুক্ত করে যা সাধারণত শুধুমাত্র ব্যবহারযোগ্য
Valgrind এর বিকাশকারীরা।
--সংস্করণ
ভ্যালগ্রিন্ড কোরের সংস্করণ নম্বর দেখান। টুলের নিজস্ব সংস্করণ থাকতে পারে
সংখ্যা সেখানে একটি স্কিম আছে তা নিশ্চিত করার জন্য যে সরঞ্জামগুলি শুধুমাত্র তখনই কার্যকর হয় যখন মূল
সংস্করণ তারা কাজ করতে পরিচিত হয়. সম্ভাবনা কমানোর জন্য এটি করা হয়েছিল
টুল-বনাম-কোর সংস্করণের অসঙ্গতি থেকে উদ্ভূত অদ্ভুত সমস্যা।
-q, -- শান্ত
নীরবে চালান, এবং শুধুমাত্র ত্রুটি বার্তা প্রিন্ট করুন. আপনি রিগ্রেশন চলমান হলে দরকারী
পরীক্ষা বা অন্য কিছু স্বয়ংক্রিয় পরীক্ষার যন্ত্রপাতি আছে।
-v, -- ভারবোস
আরো শব্দযুক্ত হন. আপনার প্রোগ্রামের বিভিন্ন দিক সম্পর্কে অতিরিক্ত তথ্য দেয়, যেমন:
ভাগ করা বস্তু লোড করা, ব্যবহৃত দমন, যন্ত্রের অগ্রগতি
এবং এক্সিকিউশন ইঞ্জিন, এবং অস্বাভাবিক আচরণ সম্পর্কে সতর্কতা। বিকল্প পুনরাবৃত্তি
ভার্বোসিটি লেভেল বাড়ায়।
--ট্রেস-শিশু= [ডিফল্ট: না]
সক্রিয় করা হলে, ভ্যালগ্রিন্ড এর মাধ্যমে শুরু হওয়া সাব-প্রসেসগুলিতে ট্রেস করবে৷ Exec পদ্ধতি
কল মাল্টি-প্রসেস প্রোগ্রামের জন্য এটি প্রয়োজনীয়।
উল্লেখ্য যে Valgrind একটি সন্তানের মধ্যে ট্রেস করে কাঁটাচামচ (এটা না করা কঠিন হবে,
থেকে কাঁটাচামচ একটি প্রক্রিয়ার একটি অভিন্ন অনুলিপি তৈরি করে), তাই এই বিকল্পটি যুক্তিযুক্তভাবে খারাপ
নাম যাইহোক, অধিকাংশ শিশু কাঁটাচামচ কল অবিলম্বে কল Exec যাহাই হউক না কেন।
--trace-children-skip=patt1,patt2,...
এই বিকল্পটি শুধুমাত্র একটি প্রভাব আছে যখন --ট্রেস-চিল্ড্রেন=হ্যাঁ উল্লিখিত আছে. এটা জন্য অনুমতি দেয়
কিছু শিশুকে এড়িয়ে যেতে হবে। বিকল্পটির জন্য নিদর্শনগুলির একটি কমা দ্বারা পৃথক করা তালিকা লাগে৷
চাইল্ড এক্সিকিউটেবলদের নাম যা ভ্যালগ্রিন্ডের মধ্যে ট্রেস করা উচিত নয়। নিদর্শন হতে পারে
মেটা অক্ষর অন্তর্ভুক্ত? এবং *, যার স্বাভাবিক অর্থ আছে।
এটি প্রক্রিয়াজাত গাছ থেকে আগ্রহহীন শাখা ছাঁটাই করার জন্য কার্যকর হতে পারে
ভালগ্রিন্ডে চালান। তবে এটি ব্যবহার করার সময় আপনার সতর্ক হওয়া উচিত। যখন Valgrind ট্রেসিং এড়িয়ে যায়
একটি এক্সিকিউটেবলের মধ্যে, এটি শুধুমাত্র সেই এক্সিকিউটেবল ট্রেসিং এড়িয়ে যায় না, এটি এড়িয়ে যায়
যে কোনো এক্সিকিউটেবল এর চাইল্ড প্রসেস ট্রেসিং। অন্য কথায়, পতাকা না
শুধুমাত্র নির্দিষ্ট এক্সিকিউটেবলগুলিতে ট্রেসিং বন্ধ করার কারণ -- এটি ট্রেসিং এড়িয়ে যায়
সম্পূর্ণ প্রসেস সাবট্রিস যে কোনো নির্দিষ্ট এক্সিকিউটেবলে রুট করে।
--trace-children-skip-by-arg=patt1,patt2,...
এই হিসাবে একই --ট্রেস-শিশু-এড়িয়ে যান, একটি পার্থক্য সঙ্গে: হিসাবে সিদ্ধান্ত
একটি শিশু প্রক্রিয়ার মধ্যে ট্রেস করতে হবে কিনা তা শিশুর যুক্তিগুলি পরীক্ষা করে তৈরি করা হয়
প্রক্রিয়া, এর নির্বাহযোগ্য নামের পরিবর্তে।
--শিশু-নিরব-পর-কাঁটা= [ডিফল্ট: না]
সক্রিয় করা হলে, Valgrind সন্তানের জন্য কোনো ডিবাগিং বা লগিং আউটপুট দেখাবে না
একটি থেকে ফলে প্রক্রিয়া কাঁটাচামচ কল এটি আউটপুট কম বিভ্রান্তিকর করতে পারে (যদিও
আরও বিভ্রান্তিকর) যখন বাচ্চাদের তৈরি করে এমন প্রক্রিয়াগুলির সাথে কাজ করে। এটা বিশেষ করে
সঙ্গে একযোগে দরকারী --ট্রেস-শিশু=. এই বিকল্পের ব্যবহারও দৃঢ়ভাবে
আপনি যদি XML আউটপুট অনুরোধ করেন তবে প্রস্তাবিত (--xml=হ্যাঁ), অন্যথায় থেকে XML
শিশু এবং পিতামাতা মিশে যেতে পারে, যা সাধারণত এটিকে অকেজো করে তোলে।
--vgdb= [ডিফল্ট: হ্যাঁ]
Valgrind যখন "gdbserver" কার্যকারিতা প্রদান করবে --vgdb=হ্যাঁ or --vgdb=পূর্ণ is
নির্দিষ্ট করা এটি একটি বহিরাগত GNU GDB ডিবাগারকে আপনার প্রোগ্রাম নিয়ন্ত্রণ এবং ডিবাগ করার অনুমতি দেয়
যখন এটি ভালগ্রিন্ডে চলে। --vgdb=পূর্ণ উল্লেখযোগ্য কর্মক্ষমতা ওভারহেড বহন করে, কিন্তু
আরও সুনির্দিষ্ট ব্রেকপয়েন্ট এবং ওয়াচপয়েন্ট প্রদান করে। ব্যবহার করে আপনার প্রোগ্রাম ডিবাগিং দেখুন
Valgrind এর gdbserver এবং GDB বিস্তারিত বিবরণের জন্য।
যদি এমবেডেড gdbserver সক্রিয় থাকে কিন্তু বর্তমানে কোনো gdb ব্যবহার করা হচ্ছে না, vgdb
কমান্ড লাইন ইউটিলিটি একটি শেল থেকে Valgrind-এ "মনিটর কমান্ড" পাঠাতে পারে। দ্য
Valgrind core Valgrind মনিটর কমান্ডের একটি সেট প্রদান করে। একটি টুল ঐচ্ছিকভাবে করতে পারেন
টুল নির্দিষ্ট মনিটর কমান্ড প্রদান করে, যা নির্দিষ্ট টুলে নথিভুক্ত করা হয়
অধ্যায়.
--vgdb-ত্রুটি= [ডিফল্ট: 999999999]
Valgrind gdbserver সক্রিয় থাকলে এই বিকল্পটি ব্যবহার করুন --vgdb=হ্যাঁ or --vgdb=পূর্ণ.
যে সরঞ্জামগুলি ত্রুটিগুলি রিপোর্ট করে সেগুলি হিমায়িত হওয়ার আগে "সংখ্যা" ত্রুটিগুলি রিপোর্ট করার জন্য অপেক্ষা করবে৷
প্রোগ্রাম এবং আপনি GDB এর সাথে সংযোগ করার জন্য অপেক্ষা করছেন। এটি শূন্যের একটি মান অনুসরণ করে
আপনার প্রোগ্রাম চালানোর আগে gdbserver চালু হবে। এই
সাধারণত কার্যকর করার আগে GDB ব্রেকপয়েন্ট সন্নিবেশ করতে ব্যবহৃত হয় এবং সরঞ্জামগুলির সাথেও কাজ করে
যেগুলি ত্রুটিগুলি রিপোর্ট করে না, যেমন ম্যাসিফ৷
--vgdb-stop-at= [ডিফল্ট: কোনটিই না]
Valgrind gdbserver সক্রিয় থাকলে এই বিকল্পটি ব্যবহার করুন --vgdb=হ্যাঁ or --vgdb=পূর্ণ.
Valgrind gdbserver পরবর্তী প্রতিটি ত্রুটির জন্য আহ্বান করা হবে --vgdb-ত্রুটি হয়েছে
রিপোর্ট আপনি অতিরিক্তভাবে Valgrind gdbserver-কে অন্যের জন্য আহ্বান করতে বলতে পারেন
ইভেন্ট, নিম্নলিখিত উপায়ে নির্দিষ্ট করা হয়েছে:
এক বা একাধিক কমা দ্বারা পৃথক করা তালিকা প্রারম্ভকালে প্রস্থান valgrindabexit.
মান প্রারম্ভকালে প্রস্থান valgrindabexit যথাক্রমে gdbserver আহ্বান করতে নির্দেশ করে
আপনার প্রোগ্রামটি কার্যকর করার আগে, আপনার প্রোগ্রামের শেষ নির্দেশের পরে, চালু করুন
Valgrind অস্বাভাবিক প্রস্থান (যেমন অভ্যন্তরীণ ত্রুটি, মেমরির বাইরে, ...)।
বিঃদ্রঃ: প্রারম্ভকালে এবং --vgdb-ত্রুটি=0 উভয়ের কারণে Valgrind gdbserver চালু করা হবে
আপনার প্রোগ্রাম কার্যকর করার আগে। দ্য --vgdb-ত্রুটি=0 উপরন্তু আপনার কারণ হবে
পরবর্তী সমস্ত ত্রুটি বন্ধ করার জন্য প্রোগ্রাম।
· সব সম্পূর্ণ সেট নির্দিষ্ট করতে। এর সমতুল্য
--vgdb-stop-at=startup,exit,valgrindabexit.
· না খালি সেটের জন্য।
--ট্র্যাক-এফডিএস= [ডিফল্ট: না]
সক্রিয় করা হলে, ভ্যালগ্রিন্ড প্রস্থান বা চালু করার সময় খোলা ফাইল বর্ণনাকারীদের একটি তালিকা মুদ্রণ করবে
অনুরোধ, gdbserver মনিটর কমান্ডের মাধ্যমে v.info open_fds. প্রতিটি ফাইলের সাথে
বর্ণনাকারীতে ফাইলটি কোথায় খোলা হয়েছে তার একটি স্ট্যাক ব্যাকট্রেস এবং কোনো বিবরণ প্রিন্ট করা হয়
ফাইল বর্ণনাকারীর সাথে সম্পর্কিত যেমন ফাইলের নাম বা সকেটের বিবরণ।
--টাইম স্ট্যাম্প= [ডিফল্ট: না]
সক্রিয় করা হলে, প্রতিটি বার্তার পূর্বে অতিবাহিত ওয়ালক্লকের একটি ইঙ্গিত থাকে৷
শুরু হওয়ার পর থেকে সময়, দিন, ঘন্টা, মিনিট, সেকেন্ড এবং মিলিসেকেন্ড হিসাবে প্রকাশ করা হয়।
--log-fd= [ডিফল্ট: 2, stderr]
উল্লেখ করে যে Valgrind এর সমস্ত বার্তা নির্দিষ্ট ফাইলে পাঠাতে হবে
বর্ণনাকারী ডিফল্ট, 2, হল স্ট্যান্ডার্ড এরর চ্যানেল (stderr)। উল্লেখ্য যে এই হতে পারে
ক্লায়েন্টের নিজস্ব stderr ব্যবহারে হস্তক্ষেপ করে, কারণ Valgrind এর আউটপুট হবে
ক্লায়েন্ট stderr এ যে কোনো আউটপুট পাঠায় তার সাথে ইন্টারলিভড।
--লগ-ফাইল=
উল্লেখ করে যে Valgrind এর সমস্ত বার্তা নির্দিষ্ট ফাইলে পাঠাতে হবে। যদি
ফাইলের নাম খালি, এটি একটি গর্ভপাত ঘটায়। তিনটি বিশেষ বিন্যাস স্পেসিফায়ার আছে যে
ফাইলের নামে ব্যবহার করা যেতে পারে।
%p বর্তমান প্রক্রিয়া আইডি দিয়ে প্রতিস্থাপিত হয়। এই যে প্রোগ্রামের জন্য খুব দরকারী
একাধিক প্রক্রিয়া আহ্বান করুন। সতর্কতা: আপনি ব্যবহার করলে --ট্রেস-চিল্ড্রেন=হ্যাঁ এবং আপনার প্রোগ্রাম
পরে exec কল না করে একাধিক প্রসেস বা আপনার প্রোগ্রাম ফর্ক আহ্বান করে, এবং
আপনি এই স্পেসিফায়ার ব্যবহার করবেন না (বা %q নিচের স্পেসিফায়ার), সব থেকে Valgrind আউটপুট
এই প্রক্রিয়াগুলি একটি ফাইলে যাবে, সম্ভবত এলোমেলো, এবং সম্ভবত অসম্পূর্ণ।
%q{FOO} পরিবেশ ভেরিয়েবলের বিষয়বস্তু দিয়ে প্রতিস্থাপিত হয় যদি foo। যদি {FOO}
অংশটি বিকৃত, এটি একটি গর্ভপাত ঘটায়। এই স্পেসিফায়ার খুব কমই প্রয়োজন, কিন্তু খুব
নির্দিষ্ট পরিস্থিতিতে উপযোগী (যেমন MPI প্রোগ্রাম চালানোর সময়)। ধারণা হল যে আপনি
একটি ভেরিয়েবল নির্দিষ্ট করুন যা কাজের প্রতিটি প্রক্রিয়ার জন্য আলাদাভাবে সেট করা হবে, এর জন্য
উদাহরণ BPROC_RANK বা আপনার MPI সেটআপে প্রযোজ্য যাই হোক না কেন। নাম থাকলে
এনভায়রনমেন্ট ভেরিয়েবল সেট করা নেই, এটি একটি গর্ভপাত ঘটায়। উল্লেখ্য যে কিছু শেল, {
এবং } অক্ষরগুলিকে ব্যাকস্ল্যাশ দিয়ে পালানোর প্রয়োজন হতে পারে।
%% দিয়ে প্রতিস্থাপিত হয় %.
যদি একটা % অন্য কোন অক্ষর দ্বারা অনুসরণ করা হয়, এটি একটি গর্ভপাত ঘটায়।
যদি ফাইলের নামটি একটি আপেক্ষিক ফাইলের নাম উল্লেখ করে, তবে এটি প্রোগ্রামের প্রাথমিকে রাখা হয়
ওয়ার্কিং ডিরেক্টরি: এটি বর্তমান ডিরেক্টরি যখন প্রোগ্রামটি শুরু হয়েছিল
কাঁটা পরে বা exec পরে মৃত্যুদন্ড. যদি এটি একটি পরম ফাইলের নাম নির্দিষ্ট করে (যেমন।
'/' দিয়ে শুরু হয়) তারপর সেখানে রাখা হয়।
--লগ-সকেট=
সুনির্দিষ্ট করে যে Valgrind এর সমস্ত বার্তাগুলিকে নির্দিষ্ট পোর্টে পাঠাতে হবে৷
নির্দিষ্ট আইপি ঠিকানা। পোর্টটি বাদ দেওয়া হতে পারে, যে ক্ষেত্রে পোর্ট 1500 ব্যবহার করা হয়। যদি একটি
নির্দিষ্ট সকেটে সংযোগ করা যাবে না, Valgrind লেখায় ফিরে আসে
স্ট্যান্ডার্ড ত্রুটি (stderr) এ আউটপুট। এই বিকল্পটি ব্যবহার করার উদ্দেশ্যে
ভ্যালগ্রিন্ড-লিসেনার প্রোগ্রামের সাথে একযোগে। আরো বিস্তারিত জানার জন্য, দেখুন
ম্যানুয়াল মধ্যে ভাষ্য.
ত্রুটি-সম্পর্কিত বিকল্প
এই বিকল্পগুলি সমস্ত সরঞ্জাম দ্বারা ব্যবহৃত হয় যা ত্রুটির রিপোর্ট করতে পারে, যেমন মেমচেক, কিন্তু নয়
ক্যাচেগ্রিন্ড।
--xml= [ডিফল্ট: না]
সক্রিয় করা হলে, আউটপুটের গুরুত্বপূর্ণ অংশগুলি (যেমন টুল ত্রুটি বার্তা) থাকবে৷
প্লেইন টেক্সটের পরিবর্তে XML ফরম্যাট। অধিকন্তু, XML আউটপুট a এ পাঠানো হবে
প্লেইন টেক্সট আউটপুট থেকে ভিন্ন আউটপুট চ্যানেল। অতএব, আপনি একটি ব্যবহার করতে হবে
of --xml-fd, --xml-ফাইল or --xml-সকেট XML কোথায় পাঠানো হবে তা নির্দিষ্ট করতে।
কম গুরুত্বপূর্ণ বার্তা এখনও প্লেইন টেক্সটে প্রিন্ট করা হবে, কিন্তু কারণ XML
আউটপুট এবং প্লেইন টেক্সট আউটপুট বিভিন্ন আউটপুট চ্যানেলে পাঠানো হয় (এর গন্তব্য
প্লেইন টেক্সট আউটপুট এখনও দ্বারা নিয়ন্ত্রিত হয় --log-fd, --লগ ফাইল এবং --লগ-সকেট)
এই সমস্যা সৃষ্টি করা উচিত নয়.
এই বিকল্পটি এমন সরঞ্জামগুলির জন্য জীবনকে সহজ করার লক্ষ্যে যা Valgrind এর আউটপুট হিসাবে ব্যবহার করে
ইনপুট, যেমন GUI ফ্রন্ট এন্ড। বর্তমানে এই বিকল্পটি মেমচেক, হেলগ্রিন্ড, এর সাথে কাজ করে
ডিআরডি এবং এসজিচেক। ফাইলে আউটপুট বিন্যাস নির্দিষ্ট করা আছে
Valgrind 4 এর জন্য সোর্স ট্রিতে docs/internals/xml-output-protocol3.5.0.txt বা
পরে।
XML আউটপুট অনুরোধ করার সময় একটি GUI পাস করার জন্য প্রস্তাবিত বিকল্পগুলি হল: --xml=হ্যাঁ
XML আউটপুট সক্ষম করতে, --xml-ফাইল একটিতে XML আউটপুট পাঠাতে (সম্ভবত GUI-নির্বাচিত)
ফাইল, --লগ ফাইল একটি দ্বিতীয় GUI-নির্বাচিত ফাইলে প্লেইন টেক্সট আউটপুট পাঠাতে,
--শিশু-নিরব-পর-ফর্ক=হ্যাঁ, এবং -q প্লেইন টেক্সট আউটপুটকে ক্রিটিক্যালে সীমাবদ্ধ করতে
ভ্যালগ্রিন্ড নিজেই তৈরি করা ত্রুটির বার্তা। উদাহরণস্বরূপ, একটি নির্দিষ্ট পড়তে ব্যর্থতা
দমন ফাইল একটি গুরুতর ত্রুটি বার্তা হিসাবে গণনা করা হয়. এই ভাবে, একটি সফল জন্য
চালান টেক্সট আউটপুট ফাইল খালি হবে। কিন্তু যদি এটি খালি না হয়, তাহলে এটি থাকবে
গুরুত্বপূর্ণ তথ্য যা GUI ব্যবহারকারীকে সচেতন করা উচিত।
--xml-fd= [ডিফল্ট: -1, অক্ষম]
সুনির্দিষ্ট করে যে Valgrind তার XML আউটপুটকে নির্দিষ্ট ফাইল বর্ণনাকারীতে পাঠাতে হবে।
এর সাথে একযোগে ব্যবহার করতে হবে --xml=হ্যাঁ.
--xml-file=
উল্লেখ করে যে Valgrind নির্দিষ্ট ফাইলে তার XML আউটপুট পাঠাতে হবে। এটাই হবে
এর সাথে একযোগে ব্যবহৃত হয় --xml=হ্যাঁ। কোন %p or %q ফাইলের নাম প্রদর্শিত ক্রম
ঠিক একইভাবে প্রসারিত করা হয় যেমনটি তাদের জন্য --লগ ফাইল. বর্ণনা দেখুন
of --লগ ফাইল বিস্তারিত জানার জন্য.
--xml-সকেট=
সুনির্দিষ্ট করে যে Valgrind তার XML আউটপুটকে নির্দিষ্ট পোর্টে পাঠাতে হবে
আইপি ঠিকানা. এর সাথে একযোগে ব্যবহার করতে হবে --xml=হ্যাঁ. যুক্তির রূপ হলো
যে দ্বারা ব্যবহৃত হিসাবে একই --লগ-সকেট. এর বর্ণনা দেখুন --লগ-সকেট ভবিষ্যতের জন্য
বিবরণ।
--xml-ব্যবহারকারী-মন্তব্য=
XML আউটপুটের শুরুতে একটি অতিরিক্ত ব্যবহারকারীর মন্তব্য স্ট্রিং এম্বেড করে। শুধুমাত্র যখন কাজ করে
--xml=হ্যাঁ উল্লিখিত আছে; অন্যথায় উপেক্ষা করা হয়।
--demangle= [ডিফল্ট: হ্যাঁ]
C++ নামের স্বয়ংক্রিয় ডিম্যাংলিং (ডিকোডিং) সক্ষম/অক্ষম করুন। ডিফল্টরূপে সক্রিয়. কখন
সক্রিয়, Valgrind এনকোড করা C++ নামগুলিকে আবার কিছুতে অনুবাদ করার চেষ্টা করবে
মূলের কাছে আসছে। ডিম্যাংলার g++ সংস্করণ 2.X দ্বারা বিভক্ত প্রতীকগুলি পরিচালনা করে,
3.X এবং 4.X.
demangling সম্পর্কে একটি গুরুত্বপূর্ণ তথ্য হল যে ফাংশনের নামগুলি দমনে উল্লেখ করা হয়েছে
ফাইলগুলি তাদের জংকৃত আকারে হওয়া উচিত। Valgrind ফাংশন নাম demangle না যখন
প্রযোজ্য দমনের জন্য অনুসন্ধান, কারণ অন্যথায় দমন করা হবে
ফাইলের বিষয়বস্তু ভ্যালগ্রিন্ডের ডিম্যাংলিং মেশিনের অবস্থার উপর নির্ভরশীল এবং ধীরগতির
ডাউন দমন ম্যাচিং।
--সংখ্যা-কলার= [ডিফল্ট: 12]
প্রোগ্রাম সনাক্তকারী স্ট্যাক ট্রেসে দেখানো সর্বাধিক সংখ্যক এন্ট্রি নির্দিষ্ট করে
অবস্থান নোট করুন যে ত্রুটিগুলি শুধুমাত্র শীর্ষ চারটি ফাংশন অবস্থান ব্যবহার করে সাধারণ করা হয়৷
(বর্তমান ফাংশনের স্থান, এবং এটির তিনটি অবিলম্বে কলার)। সুতরাং এই
রিপোর্ট করা ত্রুটির মোট সংখ্যাকে প্রভাবিত করে না।
এটির জন্য সর্বোচ্চ মান হল 500৷ মনে রাখবেন যে উচ্চতর সেটিংস ভ্যালগ্রিন্ডকে রান করবে৷
বিট আরো ধীরে ধীরে এবং একটি বিট আরো মেমরি নিতে, কিন্তু সঙ্গে কাজ করার সময় দরকারী হতে পারে
গভীরভাবে নেস্টেড কল চেইন সহ প্রোগ্রাম।
--unw-stack-scan-thresh= [ডিফল্ট: 0] , --unw-stack-scan-frames= [ডিফল্ট:
5]
স্ট্যাক-স্ক্যানিং সমর্থন শুধুমাত্র ARM টার্গেটে উপলব্ধ।
এই পতাকাগুলি স্ট্যাক স্ক্যানিং দ্বারা স্ট্যাক আনওয়াইন্ডিং সক্ষম এবং নিয়ন্ত্রণ করে। যখন স্বাভাবিক
স্ট্যাক আনওয়াইন্ডিং মেকানিজম -- ডোয়ার্ফ সিএফআই রেকর্ডের ব্যবহার এবং ফ্রেম-পয়েন্টার অনুসরণ করা
-- ব্যর্থ, স্ট্যাক স্ক্যানিং একটি স্ট্যাক ট্রেস পুনরুদ্ধার করতে সক্ষম হতে পারে।
মনে রাখবেন যে স্ট্যাক স্ক্যানিং একটি অসম্পূর্ণ, হিউরিস্টিক মেকানিজম যা খুব দিতে পারে
বিভ্রান্তিকর ফলাফল, বা সব কিছুই না. এটি শুধুমাত্র জরুরী অবস্থায় ব্যবহার করা উচিত, যখন স্বাভাবিক
আনওয়াইন্ডিং ব্যর্থ হয়, এবং তা সত্ত্বেও স্ট্যাক ট্রেস থাকা গুরুত্বপূর্ণ।
স্ট্যাক স্ক্যানিং একটি সহজ কৌশল: আনওয়াইন্ডার স্ট্যাক থেকে শব্দগুলি পড়ে এবং
তাদের মধ্যে কোনটি ফেরত ঠিকানা হতে পারে তা অনুমান করার চেষ্টা করে, তারা কিনা তা পরীক্ষা করে
এআরএম বা থাম্ব কল নির্দেশের ঠিক পরে পয়েন্ট করুন। যদি তাই হয়, শব্দ যোগ করা হয়
ব্যাকট্রেস
প্রধান বিপদ ঘটে যখন একটি ফাংশন কল ফিরে আসে, তার রিটার্ন ঠিকানা রেখে
উন্মুক্ত, এবং একটি নতুন ফাংশন বলা হয়, কিন্তু নতুন ফাংশন পুরানোকে মুছে দেয় না
ঠিকানা এর ফলাফল হল ব্যাকট্রেসে ফাংশনের জন্য এন্ট্রি থাকতে পারে
যা ইতিমধ্যে ফিরে এসেছে, এবং তাই খুব বিভ্রান্তিকর হতে হবে।
এই বাস্তবায়নের দ্বিতীয় সীমাবদ্ধতা হল এটি শুধুমাত্র পৃষ্ঠা স্ক্যান করবে (4KB,
সাধারণত) প্রারম্ভিক স্ট্যাক পয়েন্টার ধারণকারী। স্ট্যাক ফ্রেম বড় হলে, এই
ট্রেসে উপস্থিত শুধুমাত্র কয়েকটি (বা এমনকি কোনটিও নয়) হতে পারে। এছাড়াও, আপনি যদি
দুর্ভাগ্যজনক এবং এর ধারণকারী পৃষ্ঠার শেষের কাছে একটি প্রাথমিক স্ট্যাক পয়েন্টার আছে,
স্ক্যান সব আকর্ষণীয় ফ্রেম মিস করতে পারে.
ডিফল্টভাবে স্ট্যাক স্ক্যানিং অক্ষম করা আছে। সাধারণ ব্যবহারের ক্ষেত্রে এটির জন্য জিজ্ঞাসা করা হয় যখন a
স্ট্যাক ট্রেস অন্যথায় খুব ছোট হবে। সুতরাং, এটি সক্রিয় করতে, ব্যবহার করুন
--unw-stack-scan-thresh=number. এটি ভ্যালগ্রিন্ডকে স্ট্যাক স্ক্যানিং ব্যবহার করার জন্য অনুরোধ করে
"প্রসারিত" স্ট্যাক ট্রেস যাতে সংখ্যা ফ্রেমের চেয়ে কম থাকে।
যদি স্ট্যাক স্ক্যানিং করা হয়, তবে এটি শুধুমাত্র সর্বাধিক ফ্রেমের সংখ্যা তৈরি করবে
--unw-stack-scan-frames দ্বারা নির্দিষ্ট করা হয়েছে। সাধারণত, স্ট্যাক স্ক্যানিং অনেকগুলি তৈরি করে
আবর্জনা এন্ট্রি যে এই মান ডিফল্টভাবে একটি কম মান (5) সেট করা হয়। কোন অবস্থাতেই হবে না
--num-কলার দ্বারা নির্ধারিত মানের চেয়ে বড় একটি স্ট্যাক ট্রেস তৈরি করা হবে।
--ত্রুটি-সীমা= [ডিফল্ট: হ্যাঁ]
সক্রিয় করা হলে, Valgrind মোট 10,000,000 বা 1,000 এর পরে ত্রুটি রিপোর্ট করা বন্ধ করে দেয়
বিভিন্ন, দেখা হয়েছে. এটি থেকে ত্রুটি ট্র্যাকিং যন্ত্রপাতি বন্ধ করা হয়
অনেক ত্রুটি সহ প্রোগ্রামে একটি বিশাল কর্মক্ষমতা ওভারহেড হয়ে উঠছে।
--error-exitcode= [ডিফল্ট: 0]
Valgrind যদি কোনো ত্রুটির রিপোর্ট করে তাহলে ফিরে আসার জন্য একটি বিকল্প প্রস্থান কোড নির্দিষ্ট করে
চালান যখন ডিফল্ট মান (শূন্য) সেট করা হয়, Valgrind থেকে ফেরত মান সবসময় হবে
সিমুলেটেড প্রক্রিয়ার রিটার্ন মান হবে। একটি অশূন্য মান সেট করা হলে, যে
Valgrind কোনো ত্রুটি শনাক্ত করলে তার পরিবর্তে মান ফেরত দেওয়া হয়। এটি ব্যবহারের জন্য দরকারী
একটি স্বয়ংক্রিয় পরীক্ষা স্যুটের অংশ হিসাবে Valgrind, যেহেতু এটি পরীক্ষা সনাক্ত করা সহজ করে তোলে
যে ক্ষেত্রে Valgrind ত্রুটি রিপোর্ট করেছে, শুধুমাত্র রিটার্ন কোড পরিদর্শন করে।
--error-markers= , [ডিফল্ট: কোনটিই না]
যখন ত্রুটিগুলি প্লেইন টেক্সট হিসাবে আউটপুট হয় (যেমন XML ব্যবহার করা হয় না), --ত্রুটি-মার্কার নির্দেশ দেয়
আউটপুট একটি লাইন ধারণকারী শুরু করা (শেষ) প্রতিটি ত্রুটির আগে (পরে) স্ট্রিং।
এই ধরনের মার্কার লাইনগুলি একটিতে ত্রুটিগুলি অনুসন্ধান এবং/অথবা ত্রুটিগুলি নিষ্কাশন করতে সহায়তা করে
আউটপুট ফাইল যা প্রোগ্রামের আউটপুটের সাথে মিশ্রিত ভ্যালগ্রিন্ড ত্রুটি ধারণ করে।
মনে রাখবেন যে খালি মার্কার গ্রহণ করা হয়। সুতরাং, শুধুমাত্র একটি শুরু (বা একটি শেষ) মার্কার ব্যবহার করা হয়
সম্ভব.
--sigill-diagnostics= [ডিফল্ট: হ্যাঁ]
অবৈধ নির্দেশ নির্ণয়ের মুদ্রণ সক্ষম/অক্ষম করুন। ডিফল্টরূপে সক্রিয়, কিন্তু
ডিফল্ট যখন নিষ্ক্রিয় -- শান্ত দেওয়া হয়. ডিফল্ট সবসময় স্পষ্টভাবে হতে পারে
এই বিকল্পটি দিয়ে ওভাররাইড করা হয়েছে।
সক্রিয় করা হলে, যখনই, কিছু ডায়াগনস্টিক সহ একটি সতর্কতা বার্তা প্রিন্ট করা হবে
একটি নির্দেশের সম্মুখীন হয় যে Valgrind ডিকোড বা অনুবাদ করতে পারে না, আগে
প্রোগ্রাম একটি SIGILL সংকেত দেওয়া হয়. প্রায়ই একটি অবৈধ নির্দেশ একটি বাগ নির্দেশ করে
ভালগ্রিন্ডে নির্দিষ্ট নির্দেশের জন্য প্রোগ্রাম বা অনুপস্থিত সমর্থন। কিন্তু কিছু
প্রোগ্রামগুলি ইচ্ছাকৃতভাবে একটি নির্দেশ কার্যকর করার চেষ্টা করে যা অনুপস্থিত এবং ফাঁদ হতে পারে
প্রসেসর বৈশিষ্ট্য সনাক্ত করতে SIGILL সংকেত. এই পতাকা ব্যবহার এটা সম্ভব করে তোলে
ডায়াগনস্টিক আউটপুট এড়িয়ে চলুন যা আপনি অন্যথায় এই ধরনের ক্ষেত্রে পাবেন।
--দেখুন-নীচে-প্রধান= [ডিফল্ট: না]
ডিফল্টরূপে, ত্রুটির জন্য স্ট্যাক ট্রেস নিচে প্রদর্শিত কোনো ফাংশন দেখায় না প্রধান
কারণ বেশির ভাগ সময়ই সি লাইব্রেরি স্টাফ এবং/অথবা গবব্লেডিগুক অরুচিকর।
বিকল্পভাবে, যদি প্রধান স্ট্যাক ট্রেসে উপস্থিত নেই, স্ট্যাক ট্রেস দেখাবে না
নিচের কোন ফাংশন প্রধানযেমন glibc এর মত ফাংশন __libc_start_main.
তদ্ব্যতীত, যদি প্রধান- মত ফাংশন ট্রেস উপস্থিত, তারা হিসাবে স্বাভাবিক করা হয়
(নিচে প্রধান), যাতে আউটপুট আরো নির্ধারক করতে.
এই বিকল্পটি সক্রিয় থাকলে, সমস্ত স্ট্যাক ট্রেস এন্ট্রি দেখানো হবে এবং প্রধান-একটি
ফাংশন স্বাভাবিক করা হবে না.
--ফুলপথ-পরে= [ডিফল্ট: না প্রদর্শনী উৎস পথ]
ডিফল্টরূপে Valgrind শুধুমাত্র স্ট্যাক ট্রেসে ফাইলের নাম দেখায়, কিন্তু সম্পূর্ণ পাথ নয়
সোর্স ফাইল. বড় প্রকল্পগুলিতে Valgrind ব্যবহার করার সময় যেখানে উত্সগুলি থাকে
একাধিক ভিন্ন ডিরেক্টরি, এটি অসুবিধাজনক হতে পারে। --ফুলপথ-পরে একটি প্রদান করে
এই সমস্যার নমনীয় সমাধান। এই বিকল্পটি উপস্থিত হলে, প্রতিটি পথ
উত্স ফাইলটি নিম্নলিখিত সমস্ত গুরুত্বপূর্ণ সতর্কতা সহ দেখানো হয়েছে: যদি স্ট্রিং পাওয়া যায়
পথ, তারপর পথ পর্যন্ত এবং সহ স্ট্রিং বাদ দেওয়া হয়, অন্যথায় পথ দেখানো হয়
অপরিবর্তিত মনে রাখবেন যে স্ট্রিং পথের একটি উপসর্গ হতে হবে না।
উদাহরণস্বরূপ, /home/janedoe/blah/src/foo/bar/xyzzy.c নামের একটি ফাইল বিবেচনা করুন। নির্দিষ্ট করা
--fullpath-after=/home/janedoe/blah/src/ Valgrind নামটি হিসাবে দেখাবে
foo/bar/xyzzy.c.
কারণ স্ট্রিং একটি উপসর্গ হতে হবে না, --ফুলপথ-পরে=src/ উত্পাদন করবে
একই আউটপুট। যখন পাথ নির্বিচারে মেশিন-জেনারেটেড থাকে তখন এটি কার্যকর
চরিত্র. উদাহরণস্বরূপ, পাথ /my/build/dir/C32A1B47/blah/src/foo/xyzzy হতে পারে
foo/xyzzy ব্যবহার করে ছাঁটাই --পূর্ণপথ-পরে=/blah/src/.
আপনি যদি সম্পূর্ণ পথটি দেখতে চান তবে কেবল একটি খালি স্ট্রিং নির্দিষ্ট করুন:
--ফুলপথ-পরে=. এটি একটি বিশেষ ক্ষেত্রে নয়, শুধুমাত্র একটি যৌক্তিক ফলাফল
উপরে নিয়ম।
অবশেষে, আপনি ব্যবহার করতে পারেন --ফুলপথ-পরে একাধিক বার. যে কোন চেহারা এটি কারণ
ভ্যালগ্রিন্ড সম্পূর্ণ পাথ তৈরি করতে এবং উপরের ফিল্টারিং নিয়ম প্রয়োগ করতে স্যুইচ করুন। প্রতিটি
উত্পাদিত পথ সব তুলনায় তুলনা করা হয় --ফুলপথ-পরে-নির্দিষ্ট স্ট্রিং, মধ্যে
আদেশ নির্দিষ্ট। প্রথম স্ট্রিংটি মেলে পাথটিকে ছেঁটে ফেলার কারণ হিসেবে
উপরে বর্ণিত. যদি কোনটি মেলে না, সম্পূর্ণ পথ দেখানো হয়। এটি কাটা বন্ধ সহজতর
উপসর্গগুলি যখন উৎসগুলিকে অনেকগুলি সম্পর্কহীন ডিরেক্টরি থেকে আঁকা হয়।
--extra-debuginfo-path= [ডিফল্ট: অনির্দিষ্ট এবং অব্যবহৃত]
ডিফল্টরূপে Valgrind ডিবাগ অবজেক্টের জন্য বেশ কয়েকটি সুপরিচিত পাথ অনুসন্ধান করে, যেমন
/usr/lib/debug/।
যাইহোক, এমন পরিস্থিতিতে হতে পারে যেখানে আপনি একটি ডিবাগ অবজেক্ট রাখতে চান
নির্বিচারে অবস্থান, যেমন একটি মোবাইল ডিভাইসে Valgrind চালানোর সময় বহিরাগত স্টোরেজ
সীমিত স্থানীয় স্টোরেজ সহ। আরেকটি উদাহরণ হতে পারে এমন একটি পরিস্থিতি যেখানে আপনার নেই
আপনি যে সিস্টেমে চালাচ্ছেন সেখানে ডিবাগ অবজেক্ট প্যাকেজ ইনস্টল করার অনুমতি
ভালগ্রিন্ড।
এই পরিস্থিতিতে, আপনি একটি অতিরিক্ত, চূড়ান্ত স্থান হিসাবে একটি সম্পূর্ণ পথ প্রদান করতে পারেন
নির্দিষ্ট করে ডিবাগ বস্তুর জন্য অনুসন্ধান করতে Valgrind
--extra-debuginfo-path=/path/to/debug/objects. প্রদত্ত পথ প্রিপেন্ড করা হবে
সার্চ করা বস্তুর পরম পথের নাম। উদাহরণস্বরূপ, যদি Valgrind খুঁজছেন
/w/x/y/zz.so এবং এর জন্য debuginfo --extra-debuginfo-path=/a/b/c নির্দিষ্ট করা আছে, এটা হবে
/a/b/c/w/x/y/zz.so এ একটি ডিবাগ অবজেক্ট সন্ধান করুন।
এই পতাকা শুধুমাত্র একবার নির্দিষ্ট করা উচিত. যদি এটি একাধিকবার নির্দিষ্ট করা হয়, শুধুমাত্র
শেষ উদাহরণ সম্মানিত হয়.
--debuginfo-server=ipaddr:পোর্ট [ডিফল্ট: অনির্দিষ্ট এবং অব্যবহৃত]
এটি একটি নতুন, পরীক্ষামূলক, বৈশিষ্ট্য 3.9.0 সংস্করণে চালু করা হয়েছে।
কিছু পরিস্থিতিতে a এ সঞ্চিত বস্তু থেকে ডিবাগিনফো পড়া সুবিধাজনক হতে পারে
বিভিন্ন মেশিন। এই ফ্ল্যাগটির সাহায্যে, Valgrind একটি ডিবাগিনফো সার্ভার চালু করে জিজ্ঞাসা করবে
ipaddr এবং পোর্ট পোর্টে লিসেনিং, যদি এটি স্থানীয় ডিবাগিনফো অবজেক্ট খুঁজে না পায়
নথি ব্যবস্থা.
debuginfo সার্ভারকে অবশ্যই পোর্ট পোর্টে TCP সংযোগ গ্রহণ করতে হবে। ডিবাগিনফো সার্ভার হল
সোর্স ফাইল auxprogs/valgrind-di-server.c এ রয়েছে। এটা শুধুমাত্র থেকে পরিবেশন করা হবে
যে ডিরেক্টরিতে এটি শুরু হয়েছে। পোর্ট ডিফল্ট 1500 ক্লায়েন্ট এবং সার্ভার উভয় ক্ষেত্রেই
উল্লিখিত না.
যদি Valgrind debuginfo সার্ভার ব্যবহার করে /w/x/y/zz.so-এর জন্য debuginfo খোঁজে, এটি
পাথনেম উপাদানগুলি ছিন্ন করবে এবং সার্ভারে শুধুমাত্র zz.so অনুরোধ করবে। যে
টার্ন শুধুমাত্র তার বর্তমান ওয়ার্কিং ডিরেক্টরীতে দেখাবে একটি মিলে যাওয়া ডিবাগিনফো অবজেক্টের জন্য।
ভ্যালগ্রিন্ডের অনুরোধ অনুযায়ী ডিবাগিনফো ডেটা ছোট ছোট টুকরোতে (8 KB) প্রেরণ করা হয়।
ট্রান্সমিশন সময় কমাতে LZO ব্যবহার করে প্রতিটি ব্লক সংকুচিত হয়। বাস্তবায়ন হয়েছে
একটি একক-পর্যায়ে 802.11g (ওয়াইফাই) নেটওয়ার্ক লিঙ্কে সেরা পারফরম্যান্সের জন্য টিউন করা হয়েছে৷
মনে রাখবেন যে জিএনইউ ডিবাগলিঙ্ক সিআরসি ব্যবহার করে প্রাথমিক বনাম ডিবাগ অবজেক্টের মিলের জন্য পরীক্ষা করে
স্কিম, এমনকি debuginfo সার্ভার ব্যবহার করার সময়ও সঞ্চালিত হয়। এই ধরনের চেকিং নিষ্ক্রিয় করতে,
আপনাকে --allow-mismatched-debuginfo=yes উল্লেখ করতে হবে।
ডিফল্টরূপে ভ্যালগ্রিন্ড বিল্ড সিস্টেম টার্গেটের জন্য ভ্যালগ্রিন্ড-ডি-সার্ভার তৈরি করবে
প্ল্যাটফর্ম, যা আপনি যা চান তা প্রায় অবশ্যই নয়। এখন পর্যন্ত আমরা তা করতে পারিনি
বিল্ড প্ল্যাটফর্মের জন্য এটি তৈরি করতে অটোমেক/অটোকনফ কীভাবে পাবেন তা খুঁজে বের করুন। তুমি যদি চাও
এটি ব্যবহার করার জন্য, আপনাকে উপরে দেখানো কমান্ডটি ব্যবহার করে এটিকে হাত দিয়ে পুনরায় কম্পাইল করতে হবে
auxprogs/valgrind-di-server.c.
--allow-unmatched-debuginfo=no|হ্যাঁ [না]
পৃথক debuginfo অবজেক্ট থেকে debuginfo পড়ার সময়, Valgrind ডিফল্টভাবে চেক করবে
GNU ডিবাগলিংক মেকানিজম ব্যবহার করে প্রধান এবং ডিবাগিনফো অবজেক্ট মিলে যায়। এই
গ্যারান্টি দেয় যে এটি পুরানো debuginfo অবজেক্ট থেকে debuginfo পড়বে না, এবং
এছাড়াও নিশ্চিত করে যে ভ্যালগ্রিন্ড অমিলের ফলে ক্র্যাশ করতে পারে না।
এই চেকটি --allow-mismatched-debuginfo=yes ব্যবহার করে ওভাররাইড করা যেতে পারে। এটা হতে পারে
যখন debuginfo এবং প্রধান বস্তু সঠিকভাবে বিভক্ত না করা হয় তখন দরকারী। থাকা
এটি ব্যবহার করার সময় সতর্কতা অবলম্বন করুন: এটি সমস্ত সামঞ্জস্য পরীক্ষা এবং Valgrind নিষ্ক্রিয় করে
প্রধান এবং debuginfo বস্তুর মিল না হলে ক্র্যাশ হতে দেখা গেছে।
--দমন= [ডিফল্ট: $PREFIX/lib/valgrind/default.supp]
একটি অতিরিক্ত ফাইল সুনির্দিষ্ট করে যা থেকে দমন করার জন্য ত্রুটির বিবরণ পড়তে হবে। আপনি পারেন
100টি পর্যন্ত অতিরিক্ত দমন ফাইল ব্যবহার করুন।
--জেন-দমন= [ডিফল্ট: না]
সেট করা হলে হাঁ, Valgrind দেখানো প্রতিটি ত্রুটির পরে বিরতি দেবে এবং লাইনটি মুদ্রণ করবে:
---- ছাপা দমন? --- [রিটার্ন/N/n/Y/y/C/c] ----
টিপলে পচান, বা N পচান or n পচান, কারণ Valgrind একটি মুদ্রণ ছাড়াই মৃত্যুদন্ড চালিয়ে যায়
এই ত্রুটির জন্য দমন।
টিপলে Y পচান or y পচান Valgrind এই ত্রুটির জন্য একটি দমন লিখতে কারণ। তুমি পারবে
তারপর কাট এবং একটি দমন ফাইলে পেস্ট করুন যদি আপনি সম্পর্কে শুনতে না চান
ভবিষ্যতে ত্রুটি।
সেট করা হলে সব, Valgrind প্রতিটি রিপোর্ট করা ত্রুটির জন্য একটি দমন মুদ্রণ করবে, ছাড়া
ব্যবহারকারীকে জিজ্ঞাসা করা।
এই বিকল্পটি বিশেষভাবে C++ প্রোগ্রামগুলির সাথে উপযোগী, কারণ এটি প্রিন্ট করে
প্রয়োজন অনুযায়ী ম্যাংগলড নাম সহ দমন।
নোট করুন যে মুদ্রিত দমনগুলি যতটা সম্ভব নির্দিষ্ট। আপনি সাধারণ করতে চাইতে পারেন
ফাংশনের নামগুলিতে ওয়াইল্ডকার্ড যোগ করে এবং ফ্রেম-লেভেল ব্যবহার করে অনুরূপগুলি তৈরি করুন
ওয়াইল্ডকার্ড ওয়াইল্ডকার্ডিং সুবিধাগুলি শক্তিশালী তবুও নমনীয় এবং কিছুটা সহ
সাবধানে সম্পাদনা, আপনি এর সাথে সম্পর্কিত ত্রুটিগুলির একটি সম্পূর্ণ পরিবারকে দমন করতে সক্ষম হতে পারেন
শুধুমাত্র কয়েকটি দমন।
কখনও কখনও দুটি ভিন্ন ত্রুটি একই দমন দ্বারা চাপা হয়, যে ক্ষেত্রে
Valgrind দমনকে একাধিকবার আউটপুট করবে, কিন্তু আপনার শুধুমাত্র একটি থাকা দরকার
আপনার দমন ফাইলে অনুলিপি করুন (কিন্তু একাধিক থাকলে সমস্যা হবে না)। এছাড়াও,
দমন নাম হিসাবে দেওয়া হয় ; নাম না
সত্যিই ব্যাপার, এটা শুধুমাত্র সঙ্গে ব্যবহার করা হয় -v বিকল্প যা সমস্ত ব্যবহৃত দমন প্রিন্ট আউট
রেকর্ড।
--ইনপুট-fd= [ডিফল্ট: 0, stdin]
ব্যবহার করার সময় --জেন-দমন = হ্যাঁ, Valgrind বন্ধ হয়ে যাবে যাতে কীবোর্ড ইনপুট পড়তে পারে
আপনার কাছ থেকে যখন প্রতিটি ত্রুটি ঘটে। ডিফল্টরূপে এটি স্ট্যান্ডার্ড ইনপুট (stdin) থেকে পড়ে,
যা stdin বন্ধ করা প্রোগ্রামগুলির জন্য সমস্যাযুক্ত। এই বিকল্পটি আপনাকে নির্দিষ্ট করার অনুমতি দেয়
একটি বিকল্প ফাইল বর্ণনাকারী যা থেকে ইনপুট পড়তে হয়।
--dsymutil=না|হ্যাঁ [হ্যাঁ]
Mac OS X-এ Valgrind চালানোর সময় এই বিকল্পটি শুধুমাত্র প্রাসঙ্গিক।
Mac OS X একটি বিলম্বিত ডিবাগ তথ্য (debuginfo) লিঙ্কিং স্কিম ব্যবহার করে। যখন বস্তু
debuginfo ধারণকারী ফাইলগুলি একটি .dylib বা একটি এক্সিকিউটেবলের সাথে লিঙ্ক করা হয়, debuginfo হল
চূড়ান্ত ফাইলে অনুলিপি করা হয়নি। পরিবর্তে, debuginfo ম্যানুয়ালি দ্বারা লিঙ্ক করা আবশ্যক
এক্সিকিউটেবল বা .dylib-এ dsymutil, একটি সিস্টেম-প্রদত্ত ইউটিলিটি চলছে। দ্য
ফলস্বরূপ সম্মিলিত ডিবাগিনফো এক্সিকিউটেবল বা এর পাশাপাশি একটি ডিরেক্টরিতে স্থাপন করা হয়
.dylib, কিন্তু এক্সটেনশন .dSYM সহ।
সঙ্গে --dsymutil=না, Valgrind কেস সনাক্ত করবে যেখানে .dSYM ডিরেক্টরি হয়
অনুপস্থিত, বা উপস্থিত কিন্তু সংশ্লিষ্ট এক্সিকিউটেবল বা এর সাথে মেলে না
.dylib, সম্ভবত কারণ এটি পুরানো। এই ক্ষেত্রে, Valgrind একটি প্রিন্ট করবে
সতর্কীকরণ বার্তা কিন্তু আর কোনো পদক্ষেপ নেয়নি।
সঙ্গে --dsymutil=হ্যাঁ, Valgrind হবে, যেমন ক্ষেত্রে, স্বয়ংক্রিয়ভাবে dsymutil হিসাবে চালান
ডিবাগিনফো আপ টু ডেট আনতে প্রয়োজনীয়। সব ব্যবহারিক উদ্দেশ্যে, যদি আপনি সবসময়
ব্যবহার --dsymutil=হ্যাঁ, তাহলে dsymutil ম্যানুয়ালি বা অংশ হিসাবে চালানোর প্রয়োজন নেই
আপনার অ্যাপ্লিকেশনের বিল্ড সিস্টেম, যেহেতু ভ্যালগ্রিন্ড এটিকে প্রয়োজনীয় হিসাবে চালাবে।
Valgrind কোনো এক্সিকিউটেবল বা লাইব্রেরিতে dsymutil চালানোর চেষ্টা করবে না /ইউএসআর/,
/ বিন /, / এসবিন /, / অপ্ট /, /sw/, /System/, /Library/ অথবা /Applications/ যেহেতু dsymutil করবে
সবসময় এই ধরনের পরিস্থিতিতে ব্যর্থ. এটি উভয়ই ব্যর্থ হয় কারণ এর জন্য ডিবাগিনফো
প্রি-ইনস্টল করা সিস্টেম উপাদানগুলি কোথাও পাওয়া যায় না, এবং কারণ এটি হবে
সেই ডিরেক্টরিগুলিতে লেখার বিশেষাধিকার প্রয়োজন।
ব্যবহার করার সময় সতর্কতা অবলম্বন করুন --dsymutil=হ্যাঁ, যেহেতু এটি পূর্ব-বিদ্যমান .dSYM সৃষ্টি করবে
ডিরেক্টরিগুলি নীরবে মুছে ফেলা এবং পুনরায় তৈরি করা। এছাড়াও উল্লেখ্য যে dsymutil বেশ
ধীর, কখনও কখনও অত্যধিক তাই।
--max-stackframe= [ডিফল্ট: 2000000]
একটি স্ট্যাক ফ্রেমের সর্বাধিক আকার। যদি স্ট্যাক পয়েন্টার এই পরিমাণের চেয়ে বেশি চলে যায়
তারপর Valgrind অনুমান করবে যে প্রোগ্রামটি একটি ভিন্ন স্ট্যাকে স্যুইচ করছে।
আপনার প্রোগ্রামে বড় স্ট্যাক-বরাদ্দকৃত অ্যারে থাকলে আপনাকে এই বিকল্পটি ব্যবহার করতে হতে পারে।
Valgrind আপনার প্রোগ্রামের স্ট্যাক পয়েন্টার ট্র্যাক রাখে। এর চেয়ে বেশি পরিবর্তন হলে
থ্রেশহোল্ড পরিমাণ, Valgrind আপনার প্রোগ্রাম একটি ভিন্ন স্ট্যাকে স্যুইচ করা হয় অনুমান, এবং
মেমচেক স্ট্যাক পয়েন্টার থেকে ছোট পরিবর্তনের চেয়ে ভিন্নভাবে আচরণ করে
প্রান্তিক সাধারণত এই হিউরিস্টিক ভাল কাজ করে। যাইহোক, যদি আপনার প্রোগ্রাম বড় বরাদ্দ
স্ট্যাকের কাঠামো, এই হিউরিস্টিককে বোকা বানানো হবে এবং মেমচেক পরবর্তীকালে
বিপুল সংখ্যক অবৈধ স্ট্যাক অ্যাক্সেসের প্রতিবেদন করুন। এই বিকল্পটি আপনাকে পরিবর্তন করতে দেয়
একটি ভিন্ন মান থ্রেশহোল্ড.
যদি Valgrind-এর ডিবাগ আউটপুট আপনাকে নির্দেশ করে তবেই আপনার এই বিকল্পটি ব্যবহার করা উচিত
তাই করো. সেই ক্ষেত্রে এটি আপনাকে নতুন থ্রেশহোল্ড বলে দেবে যা আপনাকে নির্দিষ্ট করতে হবে।
সাধারণভাবে, স্ট্যাকের উপর বড় কাঠামো বরাদ্দ করা একটি খারাপ ধারণা, কারণ আপনি এটি করতে পারেন
সহজেই স্ট্যাকের স্থান ফুরিয়ে যায়, বিশেষ করে সীমিত মেমরির সিস্টেমে বা যা
প্রতিটি একটি ছোট স্ট্যাকের সাথে প্রচুর সংখ্যক থ্রেড সমর্থন করার আশা, এবং কারণও৷
মেমচেক দ্বারা সঞ্চালিত ত্রুটি পরীক্ষাটি হিপ-বরাদ্দকৃত ডেটার জন্য আরও কার্যকর
স্ট্যাক-বরাদ্দ ডেটার চেয়ে। যদি আপনাকে এই বিকল্পটি ব্যবহার করতে হয়, আপনি চাইলে করতে পারেন
স্ট্যাকের পরিবর্তে হিপে বরাদ্দ করার জন্য আপনার কোডটি পুনরায় লেখার কথা বিবেচনা করুন।
--main-stacksize= [ডিফল্ট: ব্যবহার বর্তমান 'ulimit' মান]
প্রধান থ্রেডের স্ট্যাকের আকার নির্দিষ্ট করে।
এর মেমরি পরিচালনাকে সহজ করার জন্য, Valgrind মূলের জন্য প্রয়োজনীয় সমস্ত স্থান সংরক্ষণ করে
শুরুতে থ্রেড এর স্ট্যাক. এর মানে এটি প্রয়োজনীয় স্ট্যাকের আকার জানতে হবে
প্রারম্ভকালে।
ডিফল্টরূপে, Valgrind স্ট্যাকের আকারের জন্য বর্তমান "ulimit" মান ব্যবহার করে, বা 16 MB,
যেটা কম। অনেক ক্ষেত্রে এটি 8 থেকে 16 MB পরিসরে স্ট্যাকের আকার দেয়,
যা বেশিরভাগ অ্যাপ্লিকেশনের জন্য প্রায় কখনই উপচে পড়ে না।
আপনি একটি বড় মোট স্ট্যাক আকার প্রয়োজন হলে, ব্যবহার করুন --প্রধান-স্ট্যাকসাইজ এটা নির্দিষ্ট করতে। শুধু সেট করুন
আপনার যতটা প্রয়োজন তত বেশি, যেহেতু আপনার প্রয়োজনের চেয়ে অনেক বেশি জায়গা সংরক্ষণ করা হচ্ছে (অর্থাৎ শত শত
আপনার প্রয়োজনের চেয়ে বেশি মেগাবাইট) ভ্যালগ্রিন্ডের মেমরি বরাদ্দকারীকে বাধা দেয় এবং হতে পারে
Valgrind ব্যবহার করতে পারে এমন মোট মেমরির পরিমাণ কমিয়ে দিন। এই শুধুমাত্র সত্যিই
32-বিট মেশিনে তাত্পর্য।
Linux-এ, আপনি 2GB পর্যন্ত আকারের স্ট্যাকের অনুরোধ করতে পারেন। Valgrind একটি সঙ্গে বন্ধ হবে
ডায়গনিস্টিক বার্তা যদি স্ট্যাক বরাদ্দ করা যায় না।
--প্রধান-স্ট্যাকসাইজ শুধুমাত্র প্রোগ্রামের প্রাথমিক থ্রেডের জন্য স্ট্যাকের আকার প্রভাবিত করে। ইহা ছিল
থ্রেড স্ট্যাকের আকারের উপর কোন প্রভাব নেই, কারণ Valgrind সেগুলি বরাদ্দ করে না।
আপনি উভয় ব্যবহার করতে হতে পারে --প্রধান-স্ট্যাকসাইজ এবং --max-stackframe একসাথে এটাই
এটা বুঝতে গুরুত্বপূর্ণ --প্রধান-স্ট্যাকসাইজ সর্বোচ্চ মোট স্ট্যাকের আকার সেট করে,
থাকাকালীন --max-stackframe যেকোনো একটি স্ট্যাক ফ্রেমের সবচেয়ে বড় আকার নির্দিষ্ট করে। আপনি হবে
কাজ করতে হবে --প্রধান-স্ট্যাকসাইজ নিজের জন্য মূল্য (সাধারণত, যদি আপনার
অ্যাপ্লিকেশন segfaults)। কিন্তু ভালগ্রিন্ড আপনাকে প্রয়োজনীয়তা বলবে --max-stackframe আকার,
যদি প্রয়োজন হয় তাহলে.
এর বর্ণনায় আরও আলোচনা করা হয়েছে --max-stackframe, একটি বড় জন্য একটি প্রয়োজন
স্ট্যাক সম্ভাব্য বহনযোগ্যতা সমস্যার একটি চিহ্ন। আপনি সেরা সব স্থাপন করার পরামর্শ দেওয়া হয়
হিপ-বরাদ্দ মেমরিতে বড় ডেটা।
--max-থ্রেড= [ডিফল্ট: 500]
ডিফল্টরূপে, Valgrind 500 থ্রেড পর্যন্ত পরিচালনা করতে পারে। মাঝে মাঝে সেই সংখ্যাটাও হয়
ছোট একটি ভিন্ন সীমা প্রদান করতে এই বিকল্পটি ব্যবহার করুন। যেমন --max-থ্রেড=3000।
MALLOC()-সম্পর্কিত বিকল্প
ম্যালোকের নিজস্ব সংস্করণ ব্যবহার করে এমন সরঞ্জামগুলির জন্য (যেমন মেমচেক, ম্যাসিফ, হেলগ্রিন্ড, ডিআরডি),
নিম্নলিখিত বিকল্পগুলি প্রযোজ্য।
--সারিবদ্ধকরণ= [ডিফল্ট: 8 or 16, নির্ভর করে on দ্য প্লাটফর্ম]
ডিফল্টভাবে Valgrind এর malloc, realloc, ইত্যাদি, একটি ব্লক ফেরত দিন যার শুরুর ঠিকানা
8-বাইট সারিবদ্ধ বা 16-বাইট সারিবদ্ধ (মানটি প্ল্যাটফর্মের উপর নির্ভর করে এবং এর সাথে মেলে
প্ল্যাটফর্ম ডিফল্ট)। এই বিকল্পটি আপনাকে একটি ভিন্ন প্রান্তিককরণ নির্দিষ্ট করতে দেয়। দ্য
সরবরাহকৃত মান অবশ্যই ডিফল্টের চেয়ে বেশি বা সমান, কম বা সমান হতে হবে
4096, এবং অবশ্যই দুটি শক্তি হতে হবে।
--redzone-size= [ডিফল্ট: নির্ভর করে on দ্য টুল]
ভালগ্রিন্ডের malloc, realloc, ইত্যাদি, প্রতিটি হিপ ব্লকের আগে এবং পরে প্যাডিং ব্লক যোগ করুন
প্রোগ্রাম চালানো হচ্ছে দ্বারা বরাদ্দ. এই ধরনের প্যাডিং ব্লককে রেডজোন বলা হয়। দ্য
রেডজোন আকারের জন্য ডিফল্ট মান টুলের উপর নির্ভর করে। উদাহরণস্বরূপ, মেমচেক যোগ করে এবং
ক্লায়েন্ট দ্বারা বরাদ্দ করা প্রতিটি ব্লকের আগে এবং পরে সর্বনিম্ন 16 বাইট রক্ষা করে।
এটি এটিকে 16 বাইট পর্যন্ত ব্লক আন্ডাররান বা ওভাররান সনাক্ত করতে দেয়।
রেডজোনের আকার বাড়ানোর ফলে বড় দূরত্বের ওভাররান সনাক্ত করা সম্ভব হয়,
কিন্তু Valgrind দ্বারা ব্যবহৃত মেমরির পরিমাণ বৃদ্ধি করে। রেডজোনের আকার কমবে
ভ্যালগ্রিন্ডের প্রয়োজনীয় মেমরি কমিয়ে দেয় তবে সনাক্ত করার সম্ভাবনাও হ্রাস করে
বেশি/আন্ডাররান, তাই বাঞ্ছনীয় নয়।
বিরল বিকল্প
এই বিকল্পগুলি সমস্ত সরঞ্জামের জন্য প্রযোজ্য, কারণ এগুলি Valgrind-এর কিছু অস্পষ্ট কাজকে প্রভাবিত করে
মূল. বেশীরভাগ লোকের তাদের ব্যবহার করার প্রয়োজন হবে না।
--smc-চেক= [ডিফল্ট: সব-নন-ফাইল উন্নত x86/amd64/s390x,
গাদা উন্নত অন্যান্য খিলান]
এই বিকল্পটি Valgrind-এর স্ব-পরিমার্জন কোড সনাক্তকরণ নিয়ন্ত্রণ করে। যদি কোন চেকিং না হয়
সম্পন্ন, যখন একটি প্রোগ্রাম কিছু কোড এক্সিকিউট করে, তারপর নতুন কোড দিয়ে ওভাররাইট করে, এবং
নতুন কোড কার্যকর করে, Valgrind এটির জন্য করা অনুবাদগুলি সম্পাদন করতে থাকবে
পুরানো কোড। এটি সম্ভবত ভুল আচরণ এবং/অথবা ক্র্যাশের দিকে পরিচালিত করবে।
"আধুনিক" আর্কিটেকচারের জন্য -- যে কোনো কিছু যা x86, amd64 বা s390x নয় -- ডিফল্ট
is গাদা. এর কারণ হল একটি সঠিক প্রোগ্রামকে পুনঃস্থাপনের জন্য স্পষ্ট পদক্ষেপ নিতে হবে
কোড পরিবর্তন অনুসরণ করে DI ক্যাশে সমন্বয়। Valgrind এই ধরনের পর্যবেক্ষণ এবং সম্মান
কর্ম, যার ফলে স্ব-সংশোধনকারী কোড স্বচ্ছভাবে শূন্যের সাথে পরিচালনা করা হয়
অতিরিক্ত খরচ.
x86, amd64 এবং s390x এর জন্য, প্রোগ্রামটির হার্ডওয়্যারকে অবহিত করার প্রয়োজন নেই
প্রয়োজনীয় DI সমন্বয় সিঙ্ক। তাই ডিফল্ট হয় সব-নন-ফাইলযা কভার করে
একটি বেনামী (নন-ফাইল-ব্যাকড) mmap'd এলাকায় কোড তৈরি করার স্বাভাবিক ঘটনা।
চারটি উপলব্ধ সেটিংসের অর্থ নিম্নরূপ। কোন সনাক্তকরণ নেই (না),
স্ট্যাকের স্ব-পরিবর্তনকারী কোড সনাক্ত করুন (যা নেস্টেড বাস্তবায়নের জন্য GCC দ্বারা ব্যবহৃত হয়
ফাংশন) (গাদা), সর্বত্র স্ব-সংশোধনকারী কোড সনাক্ত করুন (সব), এবং সনাক্ত করুন
ফাইল-ব্যাকড ম্যাপিং ব্যতীত সর্বত্র স্ব-সংশোধনকারী কোড (সব-নন-ফাইল).
সাথে চলছে সব Valgrind লক্ষণীয়ভাবে কমিয়ে দেবে। সাথে চলছে না খুব কমই হবে
গতি বাড়ান, যেহেতু বেশিরভাগ প্রোগ্রামে খুব কম কোড গতিশীলভাবে তৈরি হয়।
সার্জারির VALGRIND_DISCARD_TRANSLATIONS ক্লায়েন্ট অনুরোধ একটি বিকল্প --smc-check=সমস্ত
এবং --smc-check=all-non-file এর জন্য আরও প্রোগ্রামার প্রচেষ্টার প্রয়োজন কিন্তু ভ্যালগ্রিন্ডকে অনুমতি দেয়
আপনার প্রোগ্রামটি দ্রুত চালানোর জন্য, যখন অনুবাদের প্রয়োজন হবে তা সঠিকভাবে বলে
পুনরায় তৈরি
--smc-check=all-non-file এর একটি সস্তা কিন্তু আরো সীমিত সংস্করণ প্রদান করে
--smc-check=সমস্ত. এটি যেকোন অনুবাদে চেক যোগ করে যা থেকে উদ্ভূত হয় না
ফাইল-ব্যাকড মেমরি ম্যাপিং। সাধারণ অ্যাপ্লিকেশন যা কোড তৈরি করে, উদাহরণস্বরূপ JITs
ওয়েব ব্রাউজারে, বেনামী mmaped এলাকায় কোড তৈরি করুন, যেখানে "স্থির" কোড
ব্রাউজার সর্বদা ফাইল-ব্যাকড ম্যাপিংয়ে থাকে। --smc-check=all-non-file লাগে
এই পর্যবেক্ষণের সুবিধা, কোড চেক করার ওভারহেডকে সীমাবদ্ধ করে যা
JIT তৈরি হতে পারে।
--পড়ুন-ইনলাইন-তথ্য= [ডিফল্ট: দেখ নিচে]
সক্রিয় করা হলে, Valgrind DWARF3 থেকে ইনলাইনড ফাংশন কল সম্পর্কে তথ্য পড়বে৷
ডিবাগ তথ্য. এটি ভ্যালগ্রিন্ড স্টার্টআপকে ধীর করে দেয় এবং এটিকে আরও মেমরি ব্যবহার করে (সাধারণত এর জন্য
কোডের প্রতিটি ইনলাইনড টুকরো, ফাংশনের নামের জন্য 6 শব্দ এবং স্থান), কিন্তু এটি ফলাফল করে
আরও বর্ণনামূলক স্ট্যাকট্রেসে। 3.10.0 রিলিজের জন্য, এই কার্যকারিতা সক্রিয় করা হয়েছে
ডিফল্টরূপে শুধুমাত্র লিনাক্স, অ্যান্ড্রয়েড এবং সোলারিস টার্গেট এবং শুধুমাত্র টুলের জন্য
মেমচেক, হেলগ্রিন্ড এবং ডিআরডি। এখানে কিছু স্ট্যাকট্রেসের উদাহরণ রয়েছে
--পড়ুন-ইনলাইন-তথ্য=নং:
==15380== শর্তসাপেক্ষ লাফ বা সরানো অপ্রাণিত মান(গুলি) এর উপর নির্ভর করে
==15380== 0x80484EA এ: প্রধান (inlinfo.c:6)
==15380==
==15380== শর্তসাপেক্ষ লাফ বা সরানো অপ্রাণিত মান(গুলি) এর উপর নির্ভর করে
==15380== 0x8048550 এ: fun_noninline (inlinfo.c:6)
==15380== 0x804850E দ্বারা: প্রধান (inlinfo.c:34)
==15380==
==15380== শর্তসাপেক্ষ লাফ বা সরানো অপ্রাণিত মান(গুলি) এর উপর নির্ভর করে
==15380== 0x8048520 এ: প্রধান (inlinfo.c:6)
এবং এখানে একই ত্রুটি আছে --পড়ুন-ইনলাইন-তথ্য=হ্যাঁ:
==15377== শর্তসাপেক্ষ লাফ বা সরানো অপ্রাণিত মান(গুলি) এর উপর নির্ভর করে
==15377== 0x80484EA এ: fun_d (inlinfo.c:6)
==15377== 0x80484EA দ্বারা: fun_c (inlinfo.c:14)
==15377== 0x80484EA দ্বারা: fun_b (inlinfo.c:20)
==15377== 0x80484EA দ্বারা: fun_a (inlinfo.c:26)
==15377== 0x80484EA দ্বারা: প্রধান (inlinfo.c:33)
==15377==
==15377== শর্তসাপেক্ষ লাফ বা সরানো অপ্রাণিত মান(গুলি) এর উপর নির্ভর করে
==15377== 0x8048550 এ: fun_d (inlinfo.c:6)
==15377== 0x8048550 দ্বারা: fun_noninline (inlinfo.c:41)
==15377== 0x804850E দ্বারা: প্রধান (inlinfo.c:34)
==15377==
==15377== শর্তসাপেক্ষ লাফ বা সরানো অপ্রাণিত মান(গুলি) এর উপর নির্ভর করে
==15377== 0x8048520 এ: fun_d (inlinfo.c:6)
==15377== 0x8048520 দ্বারা: প্রধান (inlinfo.c:35)
--পড়ুন-ভার-তথ্য= [ডিফল্ট: না]
সক্রিয় করা হলে, ভ্যালগ্রিন্ড পরিবর্তনশীল প্রকার এবং অবস্থান সম্পর্কে তথ্য পড়বে
DWARF3 ডিবাগ তথ্য। এটি Valgrind স্টার্টআপকে উল্লেখযোগ্যভাবে ধীর করে দেয় এবং এটি ব্যবহার করে
উল্লেখযোগ্যভাবে বেশি মেমরি, কিন্তু টুলগুলির জন্য যা এটির সুবিধা নিতে পারে (মেমচেক,
হেলগ্রিন্ড, ডিআরডি) এর ফলে আরও সুনির্দিষ্ট ত্রুটির বার্তা আসতে পারে। উদাহরণস্বরূপ, এখানে আছে
মেমচেক দ্বারা জারি করা কিছু মানক ত্রুটি:
==15363== ক্লায়েন্ট চেক অনুরোধের সময় অপ্রচলিত বাইট(গুলি) পাওয়া গেছে
==15363== 0x80484A9 এ: ক্রোক (varinfo1.c:28)
==15363== 0x8048544 দ্বারা: প্রধান (varinfo1.c:55)
==15363== ঠিকানা 0x80497f7 ডাটা চিহ্ন "global_i7" এর ভিতরে 2 বাইট
==15363==
==15363== ক্লায়েন্ট চেক অনুরোধের সময় অপ্রচলিত বাইট(গুলি) পাওয়া গেছে
==15363== 0x80484A9 এ: ক্রোক (varinfo1.c:28)
==15363== 0x8048550 দ্বারা: প্রধান (varinfo1.c:56)
==15363== ঠিকানা 0xbea0d0cc থ্রেড 1 এর স্ট্যাকে রয়েছে
==15363== ফ্রেমে #1, প্রধান দ্বারা তৈরি (varinfo1.c:45)
এবং এখানে একই ত্রুটি আছে --read-var-info=হ্যাঁ:
==15370== ক্লায়েন্ট চেক অনুরোধের সময় অপ্রচলিত বাইট(গুলি) পাওয়া গেছে
==15370== 0x80484A9 এ: ক্রোক (varinfo1.c:28)
==15370== 0x8048544 দ্বারা: প্রধান (varinfo1.c:55)
==15370== অবস্থান 0x80497f7 হল 0 বাইট গ্লোবাল_i2[7],
==15370== একটি গ্লোবাল ভেরিয়েবল varinfo1.c:41 এ ঘোষিত
==15370==
==15370== ক্লায়েন্ট চেক অনুরোধের সময় অপ্রচলিত বাইট(গুলি) পাওয়া গেছে
==15370== 0x80484A9 এ: ক্রোক (varinfo1.c:28)
==15370== 0x8048550 দ্বারা: প্রধান (varinfo1.c:56)
==15370== অবস্থান 0xbeb4a0cc স্থানীয় var "স্থানীয়" এর ভিতরে 0 বাইট
==15370== varinfo1.c:46-এ ঘোষিত, থ্রেড 1 এর ফ্রেমে #1
--ভিজিডিবি-পোল= [ডিফল্ট: 5000]
এর প্রধান লুপের অংশ হিসাবে, ভ্যালগ্রিন্ড শিডিউলার কিছু কার্যকলাপ আছে কিনা তা পরীক্ষা করার জন্য পোল করবে
(যেমন একটি বাহ্যিক কমান্ড বা একটি gdb থেকে কিছু ইনপুট) gdbserver দ্বারা পরিচালনা করতে হবে।
প্রদত্ত সংখ্যক মৌলিক ব্লক চালানোর পরে এই কার্যকলাপ পোল করা হবে (বা
মৌলিক ব্লকের প্রদত্ত সংখ্যার চেয়ে সামান্য বেশি)। এই পোল বেশ সস্তা তাই
ডিফল্ট মান তুলনামূলকভাবে কম সেট করা হয়। vgdb হলে আপনি এই মান আরও কমাতে পারেন
ভ্যালগ্রিন্ডকে বাধা দিতে ptrace সিস্টেম কল ব্যবহার করতে পারে না যদি সমস্ত থ্রেড থাকে (বেশিরভাগ
সময়) একটি সিস্টেম কলে অবরুদ্ধ।
--vgdb-shadow-registers=না|হ্যাঁ [ডিফল্ট: না]
সক্রিয় করা হলে, gdbserver ভ্যালগ্রিন্ড শ্যাডো রেজিস্টার GDB-তে প্রকাশ করবে। এর সাথে,
ভ্যালগ্রিন্ড শ্যাডো রেজিস্টারের মান GDB ব্যবহার করে পরীক্ষা বা পরিবর্তন করা যেতে পারে।
এক্সপোজিং শ্যাডো রেজিস্টার শুধুমাত্র GDB সংস্করণ 7.1 বা তার পরে কাজ করে।
--vgdb-প্রিফিক্স= [ডিফল্ট: /tmp/vgdb-পাইপ]
gdb/vgdb-এর সাথে যোগাযোগের জন্য, Valgrind gdbserver 3টি ফাইল তৈরি করে (2টি নাম FIFOs
এবং একটি mmap শেয়ার করা মেমরি ফাইল)। উপসর্গ বিকল্প ডিরেক্টরি এবং উপসর্গ নিয়ন্ত্রণ করে
এই ফাইল তৈরির জন্য।
--run-libc-freeres= [ডিফল্ট: হ্যাঁ]
Linux-এ Valgrind চালানোর সময় এই বিকল্পটি শুধুমাত্র প্রাসঙ্গিক।
GNU C লাইব্রেরি (libc.so), যা সমস্ত প্রোগ্রাম দ্বারা ব্যবহৃত হয়, এর জন্য মেমরি বরাদ্দ করতে পারে
এর নিজস্ব ব্যবহার। প্রোগ্রাম শেষ হলে সাধারণত সেই মেমরিটি মুক্ত করতে বিরক্ত হয় না-
কোন পয়েন্ট হবে না, যেহেতু লিনাক্স কার্নেল সমস্ত প্রক্রিয়া সংস্থান পুনরায় দাবি করে যখন a
প্রক্রিয়া যাইহোক প্রস্থান, তাই এটি শুধু জিনিস ধীর হবে.
glibc লেখকরা বুঝতে পেরেছিলেন যে এই আচরণটি লিক চেকারের কারণ, যেমন ভালগ্রিন্ড,
glibc-এ ফাঁসের মিথ্যা রিপোর্ট করতে, যখন প্রস্থান করার সময় একটি লিক চেক করা হয়। এড়ানোর জন্য
এই, তারা একটি রুটিন প্রদান করে বলা হয় __libc_freeres বিশেষ করে glibc রিলিজ করতে
সমস্ত মেমরি এটি বরাদ্দ করা হয়েছে. মেমচেক তাই চালানোর চেষ্টা করে __libc_freeres প্রস্থান এ
দুর্ভাগ্যবশত, glibc-এর কিছু খুব পুরানো সংস্করণে, __libc_freeres যথেষ্ট
বগি বিভাজন ফল্ট কারণ. এটি Red Hat 7.1-এ বিশেষভাবে লক্ষণীয় ছিল।
তাই এই অপশন প্রদান করা হয় যাতে রানের বাধা দেয় __libc_freeres. যদি তোমার
প্রোগ্রাম ভালগ্রিন্ডে ভাল চালানো বলে মনে হচ্ছে, কিন্তু প্রস্থান করার সময় segfaults, আপনি এটি খুঁজে পেতে পারেন
--run-libc-freeres=no এটি ঠিক করে, যদিও সম্ভবত মিথ্যা রিপোর্ট করার খরচে
libc.so এ স্পেস লিক।
--সিম-ইঙ্গিত=ইঙ্গিত1,ইঙ্গিত2,...
ভ্যালগ্রিন্ডে বিবিধ ইঙ্গিতগুলি প্রেরণ করুন যা এর মধ্যে সিমুলেটেড আচরণকে সামান্য পরিবর্তন করে
অমানক বা বিপজ্জনক উপায়, সম্ভবত অদ্ভুত বৈশিষ্ট্যের অনুকরণে সাহায্য করার জন্য। দ্বারা
ডিফল্ট কোন ইঙ্গিত সক্রিয় করা হয় না. সতর্কতার সাথে ব্যবহার করুন! বর্তমানে পরিচিত ইঙ্গিত হল:
· lax-ioctls: ioctl হ্যান্ডলিং সম্পর্কে খুব শিথিল হন; শুধুমাত্র অনুমান যে আকার
সঠিক. লেখার সময় সম্পূর্ণ বাফার শুরু করার প্রয়োজন নেই।
এই ছাড়া, অদ্ভুত ioctl একটি বড় সংখ্যা সঙ্গে কিছু ডিভাইস ড্রাইভার ব্যবহার করে
আদেশ খুব ক্লান্তিকর হয়ে ওঠে.
· ফিউজ সামঞ্জস্যপূর্ণ: ব্লক হতে পারে এমন নির্দিষ্ট সিস্টেম কলগুলির জন্য বিশেষ হ্যান্ডলিং সক্ষম করুন৷
একটি FUSE ফাইল-সিস্টেমে। a-তে Valgrind চালানোর সময় এটি প্রয়োজনীয় হতে পারে
মাল্টি-থ্রেডেড প্রোগ্রাম যা একটি FUSE ফাইল-সিস্টেম পরিচালনা করতে একটি থ্রেড ব্যবহার করে এবং
সেই ফাইল-সিস্টেম অ্যাক্সেস করার জন্য আরেকটি থ্রেড।
· সক্রিয় বাইরের: প্রোগ্রাম চালানোর সময় প্রয়োজনীয় কিছু বিশেষ জাদু সক্রিয় করুন
নিজেই Valgrind.
· no-inner-prefix: একটি উপসর্গ মুদ্রণ অক্ষম করুন > প্রতিটি stdout বা stderr এর সামনে
একটি ভিতরের Valgrind আউটপুট লাইন একটি বাইরের Valgrind দ্বারা চালিত হচ্ছে. এটি দরকারী
বাইরের/অভ্যন্তরীণ সেটআপে Valgrind রিগ্রেশন পরীক্ষা চালানোর সময়। উল্লেখ্য যে
উপসর্গ > সর্বদা ভিতরের ডিবাগ লগিং লাইনের সামনে মুদ্রিত হবে।
· no-nptl-pthread-stackcache: Valgrind চালু করার সময় এই ইঙ্গিতটি শুধুমাত্র প্রাসঙ্গিক
লিনাক্স।
GNU glibc pthread লাইব্রেরি (libpthread.so), যা pthread প্রোগ্রাম দ্বারা ব্যবহৃত হয়,
pthread স্ট্যাকের একটি ক্যাশে বজায় রাখে। একটি pthread বন্ধ হলে, মেমরি ব্যবহৃত
pthread স্ট্যাক এবং কিছু থ্রেড স্থানীয় স্টোরেজ সম্পর্কিত ডেটা কাঠামোর জন্য নয়
সবসময় সরাসরি মুক্তি। এই মেমরি একটি ক্যাশে রাখা হয় (একটি নির্দিষ্ট আকার পর্যন্ত),
এবং একটি নতুন থ্রেড শুরু হলে পুনরায় ব্যবহার করা হয়।
এই ক্যাশে হেলগ্রিন্ড টুলকে কিছু মিথ্যা ইতিবাচক রেস অবস্থার রিপোর্ট করতে দেয়
এই ক্যাশে করা মেমরিতে ত্রুটি, কারণ helgrind অভ্যন্তরীণ glibc বুঝতে পারে না
ক্যাশে সিঙ্ক্রোনাইজেশন আদিম। সুতরাং, হেলগ্রিন্ড ব্যবহার করার সময়, ক্যাশে নিষ্ক্রিয় করা
মিথ্যা ইতিবাচক রেস অবস্থা এড়াতে সাহায্য করে, বিশেষ করে থ্রেড ব্যবহার করার সময়
স্থানীয় স্টোরেজ ভেরিয়েবল (যেমন ভেরিয়েবল ব্যবহার করে __সুতো কোয়ালিফায়ার)।
মেমচেক টুল ব্যবহার করার সময়, ক্যাশে নিষ্ক্রিয় করলে glibc দ্বারা ব্যবহৃত মেমরি নিশ্চিত হয়
একটি থ্রেড বন্ধ হয়ে গেলে __thread ভেরিয়েবল পরিচালনা করতে সরাসরি প্রকাশিত হয়।
দ্রষ্টব্য: Valgrind glibc স্ট্যাকের কিছু অভ্যন্তরীণ জ্ঞান ব্যবহার করে ক্যাশে নিষ্ক্রিয় করে
ক্যাশে বাস্তবায়ন এবং pthread এর ডিবাগ তথ্য পরীক্ষা করে
লাইব্রেরি এই কৌশলটি এইভাবে কিছুটা ভঙ্গুর এবং সমস্ত glibc-এর জন্য কাজ নাও করতে পারে
সংস্করণ এটি বিভিন্ন glibc সংস্করণের সাথে সফলভাবে পরীক্ষা করা হয়েছে (যেমন
2.11, 2.16, 2.18) বিভিন্ন প্ল্যাটফর্মে।
· লাক্স দরজা: (শুধুমাত্র সোলারিস) ডোর সিস্কল হ্যান্ডলিং ওভার সম্পর্কে খুব শিথিল হন
অচেনা দরজা ফাইল বর্ণনাকারী. যে সম্পূর্ণ বাফার প্রয়োজন হয় না
লেখার সময় শুরু হয়। এই ছাড়া, প্রোগ্রাম ব্যবহার করে libdoor(3LIB) কার্যকারিতা
সম্পূর্ণ মালিকানাধীন শব্দার্থবিদ্যার সাথে প্রচুর পরিমাণে মিথ্যা ইতিবাচক রিপোর্ট করতে পারে।
--ন্যায্য-নির্ধারিত= [ডিফল্ট: না]
সার্জারির --ন্যায্য-নির্ধারিত বিকল্পটি সিরিয়ালাইজ করার জন্য Valgrind দ্বারা ব্যবহৃত লকিং প্রক্রিয়া নিয়ন্ত্রণ করে
থ্রেড মৃত্যুদন্ড লকিং মেকানিজম যেভাবে থ্রেডগুলি নির্ধারিত হয় তা নিয়ন্ত্রণ করে,
এবং বিভিন্ন সেটিংস ন্যায্যতা এবং কর্মক্ষমতা মধ্যে বিভিন্ন ট্রেড-অফ দেয়। জন্য
ভ্যালগ্রিন্ড থ্রেড সিরিয়ালাইজেশন স্কিম এবং এর উপর এর প্রভাব সম্পর্কে আরও বিশদ
কর্মক্ষমতা এবং থ্রেড সময়সূচী, শিডিউলিং এবং মাল্টি-থ্রেড কর্মক্ষমতা দেখুন।
· মূল্য --fair-sched=হ্যাঁ একটি ন্যায্য সময়সূচী সক্রিয় করে। সংক্ষেপে, একাধিক হলে
থ্রেডগুলি চালানোর জন্য প্রস্তুত, থ্রেডগুলি একটি রাউন্ড রবিন ফ্যাশনে নির্ধারিত হবে৷
এই প্রক্রিয়াটি সমস্ত প্ল্যাটফর্ম বা লিনাক্স সংস্করণে উপলব্ধ নয়। যদি না
উপলব্ধ, ব্যবহার করে --fair-sched=হ্যাঁ ভ্যালগ্রিন্ড একটি ত্রুটির সাথে সমাপ্ত হবে।
আপনি যদি একটি চালাচ্ছেন তবে এই সেটিংটি সামগ্রিক প্রতিক্রিয়াশীলতার উন্নতি করতে পারে
ইন্টারেক্টিভ মাল্টিথ্রেডেড প্রোগ্রাম, উদাহরণস্বরূপ একটি ওয়েব ব্রাউজার, ভ্যালগ্রিন্ডে।
· মূল্য --fair-sched=চেষ্টা প্ল্যাটফর্মে উপলব্ধ থাকলে ন্যায্য সময়সূচী সক্রিয় করে।
অন্যথায়, এটি স্বয়ংক্রিয়ভাবে ফিরে আসবে --fair-sched=no.
· মূল্য --fair-sched=no একটি শিডিউলার সক্রিয় করে যা ন্যায্যতার গ্যারান্টি দেয় না
চালানোর জন্য প্রস্তুত থ্রেডগুলির মধ্যে, কিন্তু যা সাধারণভাবে সর্বোচ্চ কর্মক্ষমতা দেয়।
--kernel-variant=variant1,variant2,...
ডিফল্ট কার্নেলের ছোটখাট রূপ থেকে উদ্ভূত সিস্টেম কল এবং ioctls পরিচালনা করুন
এই প্ল্যাটফর্ম। এটি হ্যাক করা কার্নেল বা কার্নেল মডিউলগুলির সাথে চালানোর জন্য দরকারী
যা ননস্ট্যান্ডার্ড ioctls সমর্থন করে, উদাহরণস্বরূপ। সতর্কতার সাথে ব্যবহার করুন. যদি আপনি না করেন
বুঝুন এই বিকল্পটি কী করে তাহলে আপনার প্রায় অবশ্যই এটির প্রয়োজন হবে না। বর্তমানে
পরিচিত রূপগুলি হল:
· bproc: সমর্থন sys_broc x86 এ সিস্টেম কল করুন। এটি BProc এ চালানোর জন্য,
যা স্ট্যান্ডার্ড লিনাক্সের একটি ছোট রূপ যা কখনও কখনও নির্মাণের জন্য ব্যবহৃত হয়
গুচ্ছ
· android-no-hw-tls: ARM-এর জন্য অ্যান্ড্রয়েড এমুলেটরের কিছু সংস্করণ একটি প্রদান করে না
হার্ডওয়্যার TLS (থ্রেড-লোকাল স্টেট) রেজিস্টার, এবং Valgrind স্টার্টআপে ক্র্যাশ হয়। ব্যবহার করুন
TLS-এর জন্য সফ্টওয়্যার সমর্থন নির্বাচন করতে এই বৈকল্পিক।
· android-gpu-sgx5xx: এর জন্য মালিকানাধীন ioctls পরিচালনার জন্য এটি ব্যবহার করুন
Android ডিভাইসে PowerVR SGX 5XX সিরিজের GPUs। এটি নির্বাচন করতে ব্যর্থ হয় না
স্থিতিশীলতার সমস্যা সৃষ্টি করে, তবে মেমচেক এর পরে মিথ্যা ত্রুটি রিপোর্ট করতে পারে
প্রোগ্রাম GPU-নির্দিষ্ট ioctls সঞ্চালন করে।
· android-gpu-adreno3xx: একইভাবে, মালিকানা পরিচালনার জন্য এটি ব্যবহার করুন
Android ডিভাইসে Qualcomm Adreno 3XX সিরিজের GPU-এর জন্য ioctls।
--merge-recursive-frames= [ডিফল্ট: 0]
কিছু পুনরাবৃত্ত অ্যালগরিদম, যেমন সুষম বাইনারি ট্রি বাস্তবায়ন, তৈরি করে
অনেকগুলি বিভিন্ন স্ট্যাক ট্রেস, প্রতিটিতে কলের চক্র রয়েছে। একটি চক্র হিসাবে সংজ্ঞায়িত করা হয়
দুটি অভিন্ন প্রোগ্রাম কাউন্টার মান শূন্য বা তার বেশি অন্যান্য প্রোগ্রাম কাউন্টার দ্বারা পৃথক করা হয়
মান ভ্যালগ্রিন্ড এই সমস্ত স্ট্যাক ট্রেস সংরক্ষণ করতে অনেক মেমরি ব্যবহার করতে পারে। এই
মেমরির একটি দুর্বল ব্যবহার বিবেচনা করে যে এই ধরনের স্ট্যাক ট্রেসে বারবার আগ্রহ নেই
রিকার্সিভ কলের পরিবর্তে আরও আকর্ষণীয় তথ্য যেমন ফাংশন আছে
পুনরাবৃত্ত কল শুরু করেছে।
পছন্দ --merge-recursive-frames= ভ্যালগ্রিন্ডকে সনাক্ত এবং একত্রিত করার নির্দেশ দেয়
রিকারসিভ কল সাইকেল পর্যন্ত একটি সাইজ আছে ফ্রেম যখন এমন একটি চক্র
সনাক্ত করা হয়েছে, ভ্যালগ্রিন্ড একটি অনন্য প্রোগ্রাম কাউন্টার হিসাবে স্ট্যাক ট্রেসে চক্রটিকে রেকর্ড করে।
মান 0 (ডিফল্ট) কোনো পুনরাবৃত্ত কল মার্জ করে না। 1 এর মান হবে
সাধারণ পুনরাবৃত্ত অ্যালগরিদমের স্ট্যাক ট্রেস (উদাহরণস্বরূপ, একটি ফ্যাক্টরিয়াল বাস্তবায়ন)
ধসে পড়া উত্পাদিত স্ট্যাক ট্রেসগুলিকে ভেঙে ফেলার জন্য সাধারণত 2 এর মান প্রয়োজন হবে
পুনরাবৃত্ত অ্যালগরিদম দ্বারা যেমন বাইনারি ট্রি, দ্রুত সাজানো ইত্যাদি। উচ্চতর মান হতে পারে
আরও জটিল পুনরাবৃত্ত অ্যালগরিদমের জন্য প্রয়োজন।
দ্রষ্টব্য: পুনরাবৃত্ত কলগুলি প্রোগ্রাম কাউন্টার মান বিশ্লেষণ করে সনাক্ত করা হয়। তারা না
ফাংশনের নাম দেখে সনাক্ত করা যায়।
--num-transtab-sectors= [ডিফল্ট: 6 উন্নত অ্যান্ড্রয়েড প্লাটফর্ম, 16 উন্নত সব অন্যান্য]
Valgrind আপনার প্রোগ্রামের মেশিন কোডকে ছোট ছোট অংশে অনুবাদ করে এবং যন্ত্র তৈরি করে
(মৌলিক ব্লক)। অনুবাদগুলি একটি অনুবাদ ক্যাশে সংরক্ষণ করা হয় যা বিভক্ত
কয়েকটি বিভাগে (সেক্টর)। ক্যাশে পূর্ণ হলে, সেক্টর ধারণকারী
প্রাচীনতম অনুবাদগুলি খালি করা হয় এবং পুনরায় ব্যবহার করা হয়। যদি এই পুরানো অনুবাদগুলি আবার প্রয়োজন হয়,
ভ্যালগ্রিন্ডকে অবশ্যই সংশ্লিষ্ট মেশিন কোডটি পুনরায় অনুবাদ এবং পুনরায় উপকরণ করতে হবে, যা
ব্যয়বহুল যদি "নির্দেশিত নির্দেশাবলী" একটি প্রোগ্রামের কাজ সেট বড় হয়, বৃদ্ধি
সেক্টরের সংখ্যা কমিয়ে কর্মক্ষমতা উন্নত করতে পারে
পুনরায় অনুবাদ প্রয়োজন। চাহিদা অনুযায়ী সেক্টর বরাদ্দ করা হয়। একবার বরাদ্দ, একটি খাত পারে
কখনই মুক্ত করা যাবে না, এবং টুল এবং মানের উপর নির্ভর করে যথেষ্ট জায়গা দখল করে
of --এভিজি-ট্রান্সট্যাব-এন্ট্রি-আকার (মেমচেকের জন্য প্রতি সেক্টরে প্রায় 40 এমবি)। বিকল্পটি ব্যবহার করুন
--পরিসংখ্যান=হ্যাঁ একটি সেক্টর দ্বারা ব্যবহৃত মেমরি সম্পর্কে সুনির্দিষ্ট তথ্য পেতে এবং
সেক্টরের বরাদ্দ এবং পুনর্ব্যবহার।
--avg-transtab-entry-size= [ডিফল্ট: 0, অর্থ ব্যবহার টুল প্রদত্ত ডিফল্ট]
অনুবাদিত মৌলিক ব্লকের গড় আকার। এই গড় আকার মাত্রা মাত্রা ব্যবহার করা হয়
একটি সেক্টরের আকার। প্রতিটি টুল ব্যবহার করার জন্য একটি ডিফল্ট মান প্রদান করে। যদি এই ডিফল্ট মান
খুব ছোট, অনুবাদ সেক্টর খুব দ্রুত পূর্ণ হয়ে যাবে। এই ডিফল্ট হলে
মান খুব বড়, অনুবাদ সেক্টর মেমরির একটি উল্লেখযোগ্য অংশ অব্যবহৃত হবে।
নোট করুন যে একটি মৌলিক ব্লক অনুবাদের গড় আকার টুলের উপর নির্ভর করে, এবং হতে পারে
টুল বিকল্পের উপর নির্ভর করে। উদাহরণস্বরূপ, মেমচেক বিকল্প --ট্র্যাক-অরিজিন্স=হ্যাঁ বৃদ্ধি
মৌলিক ব্লক অনুবাদের আকার। ব্যবহার করুন --এভিজি-ট্রান্সট্যাব-এন্ট্রি-আকার টিউন করতে
সেক্টরের আকার, হয় মেমরি অর্জন করতে বা অনেকগুলি পুনঃঅনুবাদ এড়াতে।
--aspace-minaddr= [ডিফল্ট: নির্ভর করে on দ্য প্লাটফর্ম]
কিছু সিস্টেম লাইব্রেরির সাথে সম্ভাব্য দ্বন্দ্ব এড়াতে, Valgrind ব্যবহার করে না
নীচে ঠিকানা স্থান --এস্পেস-মিনাদ্দার মান, একটি লাইব্রেরির ক্ষেত্রে এটি সংরক্ষিত রাখা
বিশেষভাবে এই অঞ্চলে মেমরি অনুরোধ. সুতরাং, কিছু "হতাশাবাদী" মান অনুমান করা হয়
প্ল্যাটফর্মের উপর নির্ভর করে Valgrind দ্বারা। লিনাক্সে, ডিফল্টরূপে, Valgrind ব্যবহার করা এড়িয়ে যায়
প্রথম 64MB এমনকি যদি সাধারণত এই সম্পূর্ণ অঞ্চলে কোন বিরোধ না থাকে। তুমি ব্যবহার করতে পার
পছন্দ --এস্পেস-মিনাদ্দার আপনার মেমরি ক্ষুধার্ত অ্যাপ্লিকেশন থেকে উপকৃত হতে
এই কম মেমরি বেশী. অন্যদিকে, যদি আপনি একটি দ্বন্দ্ব সম্মুখীন, ক্রমবর্ধমান
aspace-minaddr মান এটি সমাধান করতে পারে। দ্বন্দ্ব সাধারণত এর সাথে নিজেদেরকে প্রকাশ করবে
ঠিকানা স্থানের কম পরিসরে mmap ব্যর্থতা। প্রদত্ত ঠিকানা অবশ্যই পৃষ্ঠা হতে হবে
সারিবদ্ধ এবং 0x1000 (4KB) এর সমান বা বড় হতে হবে। আপনার ডিফল্ট মান খুঁজে পেতে
প্ল্যাটফর্ম, ভ্যালগ্রিন্ড -ডি -ডি তারিখ 2>&1 | এর মতো কিছু করুন grep -i minaddr. মূল্যবোধ
0x10000 (64KB) এর চেয়ে কম কিছু বিতরণে সমস্যা তৈরি করতে পরিচিত।
--valgrind-stacksize= [ডিফল্ট: 1MB]
প্রতিটি থ্রেডের জন্য, Valgrind এর নিজস্ব 'ব্যক্তিগত' স্ট্যাক প্রয়োজন। এই জন্য ডিফল্ট আকার
স্ট্যাকগুলি মূলত মাত্রাযুক্ত, এবং তাই বেশিরভাগ ক্ষেত্রেই যথেষ্ট হওয়া উচিত। ক্ষেত্রে
আকার খুব ছোট, Valgrind segfault হবে. Segfaulting আগে, একটি সতর্কতা হতে পারে
সীমা সমীপবর্তী যখন Valgrind দ্বারা উত্পাদিত.
বিকল্পটি ব্যবহার করুন --ভালগ্রিন্ড-স্ট্যাকসাইজ যদি এই ধরনের একটি (অসম্ভাব্য) সতর্কতা উত্পাদিত হয়, বা
সেগমেন্টেশন লঙ্ঘনের কারণে Valgrind মারা যায়। এ ধরনের বিভাজন লঙ্ঘন হয়েছে
বিশাল C++ চিহ্নগুলিকে বিচ্ছিন্ন করার সময় দেখা যায়।
যদি আপনার অ্যাপ্লিকেশন অনেক থ্রেড ব্যবহার করে এবং অনেক মেমরির প্রয়োজন হয়, আপনি কিছু লাভ করতে পারেন
বিকল্পটি ব্যবহার করে এই Valgrind স্ট্যাকের আকার হ্রাস করে মেমরি
--ভালগ্রিন্ড-স্ট্যাকসাইজ.
--show-emwarns= [ডিফল্ট: না]
সক্রিয় করা হলে, Valgrind নির্দিষ্ট কিছু ক্ষেত্রে তার CPU এমুলেশন সম্পর্কে সতর্কতা নির্গত করবে।
এগুলো সাধারণত আকর্ষণীয় হয় না।
--require-text-symbol=:sonamepatt:fnnamepatt
যখন একটি শেয়ার করা বস্তু যার সোনাম মেলে সোনামপ্যাট প্রক্রিয়ার মধ্যে লোড করা হয়,
এটি রপ্তানি করে এমন সমস্ত পাঠ্য প্রতীক পরীক্ষা করে দেখুন। যদি এর কোনটি মেলে না fnnamepatt, প্রিন্ট একটি
ত্রুটি বার্তা এবং রান পরিত্যাগ. এটি রান করে তা নিশ্চিত করা সম্ভব করে তোলে
প্রদত্ত ভাগ করা বস্তুতে একটি নির্দিষ্ট ফাংশনের নাম না থাকলে চালিয়ে যাবেন না।
উভয় সোনামপ্যাট এবং fnnamepatt স্বাভাবিক ব্যবহার করে লেখা যেতে পারে ? এবং * ওয়াইল্ডকার্ড জন্য
উদাহরণস্বরূপ: ":*libc.so*:foo?bar". আপনি আলাদা করার জন্য একটি কোলন ছাড়া অন্য অক্ষর ব্যবহার করতে পারেন
দুটি নিদর্শন। এটি শুধুমাত্র গুরুত্বপূর্ণ যে প্রথম অক্ষর এবং বিভাজক
চরিত্র একই। উদাহরণস্বরূপ, উপরের উদাহরণটিও লেখা যেতে পারে
"Q*libc.so*Qfoo?bar". একাধিক
--require-টেক্সট-সিম্বল পতাকা অনুমোদিত, যে ক্ষেত্রে শেয়ার করা বস্তু লোড করা হয়
প্রক্রিয়ায় তাদের সবার বিরুদ্ধে চেক করা হবে।
এর উদ্দেশ্য হল মার্ক-আপ লাইব্রেরির নির্ভরযোগ্য ব্যবহারকে সমর্থন করা। উদাহরণ স্বরূপ,
ধরুন আমাদের কাছে GCC এর একটি সংস্করণ আছে libgomp.so যা দিয়ে চিহ্নিত করা হয়েছে
হেলগ্রিন্ড সমর্থন করার জন্য টীকা। ভুল লোড করা খুব সহজ এবং বিভ্রান্তিকর,
অন-টীকা libgomp.so আবেদনের মধ্যে তাই ধারণা হল: একটি টেক্সট প্রতীক যোগ করুন
মার্ক-আপ লাইব্রেরি, উদাহরণস্বরূপ annotated_for_helgrind_3_6, এবং তারপর পতাকা দিতে
--require-text-symbol=:*libgomp*so*:annotated_for_helgrind_3_6 যাতে যখন libgomp.so
লোড করা হয়, Valgrind তার প্রতীক টেবিল স্ক্যান করে, এবং প্রতীক উপস্থিত না থাকলে রান হয়
চিহ্নহীন লাইব্রেরির সাথে নীরবে চালিয়ে যাওয়ার পরিবর্তে বাতিল করা হয়েছে। উল্লেখ্য যে আপনি
শেলগুলিকে প্রসারিত হওয়া বন্ধ করতে উদ্ধৃতিগুলির মধ্যে সমগ্র পতাকাটি রাখা উচিত * এবং ?
ওয়াইল্ডকার্ড
--সোনাম-প্রতিশব্দ=syn1=pattern1,syn2=pattern2,...
যখন একটি ভাগ করা লাইব্রেরি লোড করা হয়, ভ্যালগ্রিন্ড লাইব্রেরির ফাংশনগুলির জন্য পরীক্ষা করে
প্রতিস্থাপন বা আবৃত করা আবশ্যক। উদাহরণস্বরূপ, মেমচেক সমস্ত malloc সম্পর্কিত প্রতিস্থাপন করে
ফাংশন (malloc, free, calloc, ...) এর নিজস্ব সংস্করণ সহ। যেমন প্রতিস্থাপন হয়
ডিফল্টরূপে শুধুমাত্র ভাগ করা লাইব্রেরিতে করা হয় যার সোনেম একটি পূর্বনির্ধারিত সোনামের সাথে মিলে যায়
প্যাটার্ন (যেমন libc.so* লিনাক্সে)। ডিফল্টরূপে, স্ট্যাটিকভাবে কোনো প্রতিস্থাপন করা হয় না
লিঙ্কযুক্ত লাইব্রেরি বা বিকল্প লাইব্রেরির জন্য যেমন tcmalloc. কিছু ক্ষেত্রে, দ
প্রতিস্থাপন অনুমতি দেয় --সোনাম-প্রতিশব্দ একটি অতিরিক্ত প্রতিশব্দ প্যাটার্ন নির্দিষ্ট করতে, প্রদান
প্রতিস্থাপনে নমনীয়তা।
বর্তমানে, এই নমনীয়তা শুধুমাত্র malloc সম্পর্কিত ফাংশনের জন্য অনুমোদিত, ব্যবহার করে
সমার্থক শব্দ somalloc. এই প্রতিশব্দটি স্ট্যান্ডার্ড প্রতিস্থাপন করা সমস্ত সরঞ্জামের জন্য ব্যবহারযোগ্য
ম্যালোক সম্পর্কিত ফাংশনগুলির (যেমন মেমচেক, ম্যাসিফ, ডিআরডি, হেলগ্রিন্ড, এক্সপ-ধাত,
exp-sgcheck)।
· বিকল্প malloc লাইব্রেরি: একটি বিকল্পে malloc সম্পর্কিত ফাংশন প্রতিস্থাপন করতে
সোনাম সহ লাইব্রেরি mymalloclib.so, বিকল্প দিন
--soname-synonyms=somalloc=mymalloclib.so. একটি প্যাটার্ন একাধিক মেলাতে ব্যবহার করা যেতে পারে
লাইব্রেরি sonames. উদাহরণ স্বরূপ, --সোনাম-প্রতিশব্দ=somalloc=*tcmalloc* মিলবে
tcmalloc লাইব্রেরির সমস্ত রূপের সোনাম (নেটিভ, ডিবাগ, প্রোফাইল করা, ...
tcmalloc ভেরিয়েন্ট)।
দ্রষ্টব্য: একটি এলফ শেয়ার্ড লাইব্রেরির সোনাম রিডেলফ ব্যবহার করে পুনরুদ্ধার করা যেতে পারে
ইউটিলিটি।
· একটি স্ট্যাটিকলি লিঙ্কযুক্ত লাইব্রেরিতে প্রতিস্থাপনগুলি ব্যবহার করে করা হয় কিছুই না প্যাটার্ন।
উদাহরণস্বরূপ, যদি আপনি সঙ্গে লিঙ্ক libtcmalloc.a, memcheck সঠিকভাবে কাজ করবে যখন আপনি
বিকল্প দিন --সোনাম-প্রতিশব্দ=somalloc=NONE. নোট করুন যে একটি NONE প্যাটার্ন হবে
মেইন এক্সিকিউটেবল এবং যে কোনো শেয়ার্ড লাইব্রেরির সাথে কোনো সোনেম নেই।
লিনাক্সের জন্য একটি "ডিফল্ট" ফায়ারফক্স বিল্ড চালানোর জন্য, যেখানে JEMalloc লিঙ্ক করা আছে
প্রধান নির্বাহযোগ্য, ব্যবহার --সোনাম-প্রতিশব্দ=somalloc=NONE.
ডিবাগিং ভালগ্রিন্ড বিকল্প
ভ্যালগ্রিন্ড নিজেই ডিবাগ করার জন্য কিছু বিকল্প রয়েছে। আপনি তাদের ব্যবহার করার প্রয়োজন হবে না
জিনিসের স্বাভাবিক দৌড়ে। আপনি যদি তালিকা দেখতে চান, ব্যবহার করুন --হেল্প-ডিবাগ বিকল্প।
মেমচেক বিকল্প
--লিক-চেক= [ডিফল্ট: সারসংক্ষেপ]
সক্রিয় করা হলে, ক্লায়েন্ট প্রোগ্রাম শেষ হলে মেমরি লিক অনুসন্ধান করুন। যদি সেট করা হয়
সংক্ষিপ্ত, এটা বলে যে কতগুলি ফাঁস হয়েছে৷ যদি সেট করা হয় সম্পূর্ণ or হাঁ, প্রতিটি পৃথক লিক
বিশদভাবে দেখানো হবে এবং/অথবা একটি ত্রুটি হিসাবে গণনা করা হবে, যেমন বিকল্প দ্বারা নির্দিষ্ট করা হয়েছে
--শো-লিক-প্রকার এবং --ত্রুটি-ফোঁস-প্রকারের জন্য.
--লিক-রেজোলিউশন= [ডিফল্ট: উচ্চ]
লিক চেক করার সময়, মেমচেক ভিন্ন বিবেচনা করতে কতটা ইচ্ছুক তা নির্ধারণ করে
একাধিক ফাঁসকে এককভাবে একত্রিত করার উদ্দেশ্যে ব্যাকট্রেস একই হতে হবে
ফাঁস রিপোর্ট। যখন সেট করা হয় কম, শুধুমাত্র প্রথম দুটি এন্ট্রি মিল প্রয়োজন. কখন মেড, চার
এন্ট্রি মেলাতে হবে। কখন উচ্চ, সব এন্ট্রি মেলে প্রয়োজন.
হার্ডকোর লিক ডিবাগিংয়ের জন্য, আপনি সম্ভবত ব্যবহার করতে চান --লিক-রেজোলিউশন = উচ্চ একসঙ্গে
সঙ্গে --সংখ্যা-কলার = 40 বা এরকম কিছু বড় সংখ্যা।
উল্লেখ্য যে --লিক-রেজোলিউশন সেটিং মেমচেকের খুঁজে পাওয়ার ক্ষমতাকে প্রভাবিত করে না
ফুটো এটি শুধুমাত্র ফলাফলগুলি কীভাবে উপস্থাপন করা হয় তা পরিবর্তন করে।
--শো-লিক-ধরনের= [ডিফল্ট: নিশ্চিত, সম্ভব]
একটি তে দেখানোর জন্য লিক প্রকারগুলি নির্দিষ্ট করে৷ সম্পূর্ণ লিক অনুসন্ধান, নিম্নলিখিত উপায়গুলির মধ্যে একটিতে:
এক বা একাধিক কমা দ্বারা পৃথক করা তালিকা নির্দিষ্ট পরোক্ষ সম্ভব পৌঁছানো যায়.
· সব সম্পূর্ণ সেট নির্দিষ্ট করতে (সব ধরনের লিক)। এর সমতুল্য
--শো-লিক-কাইন্ডস=নির্দিষ্ট, পরোক্ষ, সম্ভব, নাগালযোগ্য.
· না খালি সেটের জন্য।
--ত্রুটি-ফোঁটা-কাইন্ড= [ডিফল্ট: নিশ্চিত, সম্ভব]
a তে ত্রুটি হিসাবে গণনা করার জন্য ফাঁসের ধরনগুলি নির্দিষ্ট করে৷ সম্পূর্ণ ফাঁস অনুসন্ধান দ্য is
অনুরূপভাবে নির্দিষ্ট --শো-লিক-প্রকার
--leak-check-heuristics= [ডিফল্ট: সব]
লিক অনুসন্ধানের সময় ব্যবহার করা লিক চেক হিউরিস্টিকসের সেট নির্দিষ্ট করে। দ্য
হিউরিস্টিকস নিয়ন্ত্রণ করে কোন ব্লকের অভ্যন্তরীণ নির্দেশক এটি হিসাবে বিবেচিত হয়
পৌঁছানো যায় হিউরিস্টিক সেট নিম্নলিখিত উপায়ে নির্দিষ্ট করা হয়েছে:
এক বা একাধিক কমা দ্বারা পৃথক করা তালিকা stdstring দৈর্ঘ্য64 newarray
একাধিক উত্তরাধিকার.
· সব হিউরিস্টিকসের সম্পূর্ণ সেট সক্রিয় করতে। এর সমতুল্য
--leak-check-heuristics=stdstring,length64,newarray,multipleinheritance.
· না খালি সেটের জন্য।
মনে রাখবেন যে এই হিউরিস্টিকগুলি দ্বারা উত্পাদিত বস্তুর বিন্যাসের উপর নির্ভরশীল
C++ কম্পাইলার। তাদের কিছু জিসিসি সংস্করণ (যেমন 4.4 এবং 4.7) দিয়ে পরীক্ষা করা হয়েছে। তারা
অন্যান্য C++ কম্পাইলারদের সাথে সঠিকভাবে কাজ নাও করতে পারে।
--শো-নাগালযোগ্য= , --শো-সম্ভবত-হারানো=
এই বিকল্পগুলি দেখাতে লিক প্রকারগুলি নির্দিষ্ট করার একটি বিকল্প উপায় প্রদান করে:
· --প্রকাশযোগ্য=না --show-possibly-lost=হ্যাঁ সমতুল্য
--শো-লিক-কাইন্ডস=নির্দিষ্ট,সম্ভব.
· --প্রকাশযোগ্য=না --শো-সম্ভবত-হারানো=না সমতুল্য
--শো-লিক-কাইন্ডস=নির্দিষ্ট.
· --প্রকাশযোগ্য=হ্যাঁ সমতুল্য --শো-লিক-কাইন্ডস=সব.
মনে রাখবেন যে --শো-সম্ভবত-হারানো=না কোন প্রভাব নেই যদি --প্রকাশযোগ্য=হ্যাঁ উল্লিখিত আছে.
--undef-value-errors= [ডিফল্ট: হ্যাঁ]
মেমচেক অনির্ধারিত মান ত্রুটির রিপোর্ট ব্যবহার করে কিনা তা নিয়ন্ত্রণ করে। এই সেট করুন না। if
আপনি অনির্ধারিত মান ত্রুটি দেখতে চান না. এটি দ্রুতগতির পার্শ্ব প্রতিক্রিয়াও রয়েছে
আপ মেমচেক কিছুটা।
--ট্র্যাক-উৎপত্তি= [ডিফল্ট: না]
মেমচেক অপ্রচলিত মানগুলির উত্স ট্র্যাক করে কিনা তা নিয়ন্ত্রণ করে। ডিফল্টরূপে, এটা
না, যার মানে হল যদিও এটি আপনাকে বলতে পারে যে একটি অপ্রচলিত মান
একটি বিপজ্জনক উপায়ে ব্যবহার করা হচ্ছে, এটি আপনাকে বলতে পারে না যে অপ্রচলিত মানটি কোথায় এসেছে৷
থেকে এটি প্রায়শই মূল সমস্যাটি ট্র্যাক করা কঠিন করে তোলে।
সেট করা হলে হাঁ, মেমচেক সমস্ত অপ্রচলিত মানগুলির উত্সের ট্র্যাক রাখে৷
তারপর, যখন একটি অপ্রচলিত মান ত্রুটি রিপোর্ট করা হয়, মেমচেক দেখানোর চেষ্টা করবে
মূল্যের উৎপত্তি। একটি উত্স নিম্নলিখিত চারটি স্থানের একটি হতে পারে: একটি গাদা ব্লক,
একটি স্ট্যাক বরাদ্দ, একটি ক্লায়েন্ট অনুরোধ, বা বিবিধ অন্যান্য উত্স (যেমন, একটি কল
brk).
একটি গাদা ব্লক থেকে উদ্ভূত অপ্রাথমিক মানগুলির জন্য, মেমচেক দেখায় কোথায় ব্লক
বরাদ্দ করা হয়েছিল। একটি স্ট্যাক বরাদ্দ থেকে উদ্ভূত অপ্রধান মানগুলির জন্য, মেমচেক
কোন ফাংশনটি মান বরাদ্দ করেছে তা আপনাকে বলতে পারে, তবে এর বেশি নয় - সাধারণত এটি
আপনাকে ফাংশনের খোলার বন্ধনীটির উত্স অবস্থান দেখায়। তাই আপনার উচিত
সাবধানে পরীক্ষা করুন যে ফাংশনের সমস্ত স্থানীয় ভেরিয়েবল সঠিকভাবে শুরু হয়েছে।
কর্মক্ষমতা ওভারহেড: মূল ট্র্যাকিং ব্যয়বহুল। এটি মেমচেকের গতিকে অর্ধেক করে
ন্যূনতম 100MB মেমরির ব্যবহার বাড়ায়, এবং সম্ভবত আরও বেশি। তবুও তা পারে
সূচনাবিহীন এর মূল কারণ চিহ্নিত করার জন্য প্রয়োজনীয় প্রচেষ্টাকে ব্যাপকভাবে হ্রাস করুন
মান ত্রুটি, এবং তাই প্রায়ই একটি প্রোগ্রামার উত্পাদনশীলতা জয়, আরো চালানো সত্ত্বেও
ধীরে ধীরে।
নির্ভুলতা: মেমচেক ট্র্যাকগুলি বেশ সঠিকভাবে উৎপত্তি হয়। খুব বড় স্থান এবং সময় এড়াতে
ওভারহেড, কিছু অনুমান করা হয়। এটা সম্ভব, যদিও অসম্ভাব্য, যে
Memcheck একটি ভুল উত্স রিপোর্ট করবে, বা কোন উত্স সনাক্ত করতে সক্ষম হবে না.
উল্লেখ্য যে সমন্বয় --ট্র্যাক-অরিজিন্স=হ্যাঁ এবং --undef-value-errors=no is
অর্থহীন মেমচেক স্টার্টআপে এই সংমিশ্রণটি পরীক্ষা করে এবং প্রত্যাখ্যান করে।
--আংশিক-লোড-ঠিক= [ডিফল্ট: হ্যাঁ]
মেমচেক কীভাবে 32-, 64-, 128- এবং 256-বিট প্রাকৃতিকভাবে সারিবদ্ধ লোডগুলি পরিচালনা করে তা নিয়ন্ত্রণ করে
ঠিকানা যার জন্য কিছু বাইট ঠিকানাযোগ্য এবং অন্যগুলি নয়। কখন হাঁযেমন
লোড একটি ঠিকানা ত্রুটি উত্পাদন করে না. পরিবর্তে, অবৈধ থেকে উদ্ভূত লোড বাইট
ঠিকানাগুলি অপ্রধান হিসাবে চিহ্নিত করা হয়েছে এবং আইনি ঠিকানাগুলির সাথে সংশ্লিষ্ট
স্বাভাবিক উপায়ে পরিচালনা করা হয়।
কখন না।, আংশিকভাবে অবৈধ ঠিকানা থেকে লোডগুলি থেকে লোডের মতোই বিবেচিত হয়৷
সম্পূর্ণরূপে অবৈধ ঠিকানা: একটি অবৈধ-ঠিকানা ত্রুটি জারি করা হয়, এবং এর ফলে
বাইট প্রারম্ভিক হিসাবে চিহ্নিত করা হয়.
মনে রাখবেন যে কোডটি এইভাবে আচরণ করে তা ISO C/C++ মান লঙ্ঘন করে,
এবং ভাঙ্গা বিবেচনা করা উচিত। যদি সম্ভব হয়, এই ধরনের কোড ঠিক করা উচিত।
--expensive-definedness-checks= [ডিফল্ট: না]
মেমচেক আরও সুনির্দিষ্ট তবে আরও ব্যয়বহুল (সময়
কনজিউমিং) অ্যালগরিদম যখন একটি মানের সংজ্ঞা পরীক্ষা করে। ডিফল্ট সেটিং হল
এটি করতে হবে না এবং এটি সাধারণত যথেষ্ট। যাইহোক, অত্যন্ত অপ্টিমাইজ করা কোডের জন্য
valgrind কখনও কখনও ভুল অভিযোগ করতে পারে. সঙ্গে valgrind invoking
--expensive-definedness-checks=হ্যাঁ সাহায্য করে কিন্তু কর্মক্ষমতা খরচে আসে। রানটাইম
25% অবনতি লক্ষ্য করা গেছে কিন্তু অতিরিক্ত খরচ অনেক উপর নির্ভর করে
হাতের কাছে আবেদন।
--keep-stacktraces=alloc|free|alloc-and-free|alloc-then-free|none [ডিফল্ট:
বরাদ্দ-ও-মুক্ত]
malloc'd এবং/অথবা free'd ব্লকের জন্য কোন স্ট্যাক ট্রেস(গুলি) রাখতে হবে তা নিয়ন্ত্রণ করে।
সঙ্গে alloc-তখন-মুক্ত, একটি স্ট্যাক ট্রেস বরাদ্দের সময় রেকর্ড করা হয়, এবং এটি যুক্ত
ব্লকের সাথে। যখন ব্লক মুক্ত হয়, একটি দ্বিতীয় স্ট্যাক ট্রেস রেকর্ড করা হয়, এবং এটি
বরাদ্দ স্ট্যাক ট্রেস প্রতিস্থাপন করে। ফলস্বরূপ, যেকোন "ব্যবহারের পরে বিনামূল্যে" সংক্রান্ত ত্রুটি
এই ব্লকে শুধুমাত্র একটি স্ট্যাক ট্রেস দেখাতে পারে যেখানে ব্লকটি মুক্ত করা হয়েছিল।
সঙ্গে বরাদ্দ-এবং-মুক্ত, ব্লকের জন্য বরাদ্দ এবং ডিললোকেশন স্ট্যাক ট্রেস উভয়ই
সংরক্ষিত. তাই একটি "ব্যবহার করার পরে বিনামূল্যে" ত্রুটি উভয়ই দেখাবে, যা ত্রুটি করতে পারে
নির্ণয় করা সহজ। তুলনা করা alloc-তখন-মুক্ত, এই সেটিং সামান্য বৃদ্ধি
ব্লক হিসাবে Valgrind এর মেমরি ব্যবহার একটি পরিবর্তে দুটি উল্লেখ রয়েছে।
সঙ্গে alloc, শুধুমাত্র বরাদ্দ স্ট্যাক ট্রেস রেকর্ড করা হয় (এবং রিপোর্ট)। সঙ্গে বিনামূল্যে,
শুধুমাত্র ডিলোকেশন স্ট্যাক ট্রেস রেকর্ড করা হয়েছে (এবং রিপোর্ট করা হয়েছে)। এই মান কিছুটা
Valgrind এর মেমরি এবং cpu ব্যবহার হ্রাস করুন। তারা ত্রুটির উপর নির্ভর করে দরকারী হতে পারে
আপনি যে প্রকারগুলি অনুসন্ধান করছেন এবং সেগুলি বিশ্লেষণ করতে আপনার প্রয়োজন বিশদ স্তর। জন্য
উদাহরণস্বরূপ, যদি আপনি শুধুমাত্র মেমরি লিক ত্রুটির জন্য আগ্রহী হন তবে এটি রেকর্ড করা যথেষ্ট
বরাদ্দ স্ট্যাক ট্রেস.
সঙ্গে না, malloc এবং বিনামূল্যে অপারেশনের জন্য কোন স্ট্যাক ট্রেস রেকর্ড করা হয় না। যদি তোমার
প্রোগ্রাম অনেকগুলি ব্লক বরাদ্দ করে এবং/অথবা বিভিন্ন স্ট্যাক থেকে বরাদ্দ/মুক্ত করে
ট্রেস, এটি উল্লেখযোগ্যভাবে cpu এবং/অথবা প্রয়োজনীয় মেমরি হ্রাস করতে পারে। অবশ্যই, কয়েক
বিশদ বিবরণ হিপ ব্লক সম্পর্কিত ত্রুটির জন্য রিপোর্ট করা হবে.
মনে রাখবেন যে একবার স্ট্যাক ট্রেস রেকর্ড করা হলে, Valgrind স্ট্যাক ট্রেস মেমরিতে রাখে
এমনকি যদি এটি কোনো ব্লক দ্বারা উল্লেখ না করা হয়। কিছু প্রোগ্রাম (উদাহরণস্বরূপ, পুনরাবৃত্তিমূলক
অ্যালগরিদম) বিপুল সংখ্যক স্ট্যাক ট্রেস তৈরি করতে পারে। যদি Valgrind খুব বেশি ব্যবহার করে
মেমরি এই ধরনের পরিস্থিতিতে, আপনি বিকল্পগুলির সাথে প্রয়োজনীয় মেমরি কমাতে পারেন
--কিপ-স্ট্যাকট্রেস এবং/অথবা বিকল্পের জন্য একটি ছোট মান ব্যবহার করে -- কলকারীর সংখ্যা.
--freelist-vol= [ডিফল্ট: 20000000]
যখন ক্লায়েন্ট প্রোগ্রাম ব্যবহার করে মেমরি রিলিজ করে বিনামূল্যে (C-তে) বা মুছে ফেলুন (C++), সেই মেমরি
অবিলম্বে পুনরায় বরাদ্দের জন্য উপলব্ধ করা হয় না. পরিবর্তে, এটি চিহ্নিত করা হয়
দুর্গম এবং মুক্ত ব্লকের একটি সারিতে স্থাপন করা হয়েছে। উদ্দেশ্য যতক্ষণ পিছিয়ে দেওয়া
সম্ভব যে বিন্দুতে মুক্ত করা মেমরি প্রচলনে ফিরে আসে। এই
মেমচেক ব্লকে অবৈধ অ্যাক্সেস সনাক্ত করতে সক্ষম হওয়ার সম্ভাবনা বৃদ্ধি করে
তারা মুক্তি পাওয়ার পর কিছু উল্লেখযোগ্য সময়ের জন্য।
এই বিকল্পটি সারিতে থাকা ব্লকগুলির সর্বাধিক মোট আকার, বাইটে, নির্দিষ্ট করে।
ডিফল্ট মান বিশ মিলিয়ন বাইট। এটি বাড়ালে মোট পরিমাণ বৃদ্ধি পায়
মেমচেক দ্বারা ব্যবহৃত মেমরির কিন্তু মুক্ত ব্লকের অবৈধ ব্যবহার সনাক্ত করতে পারে যা হবে
অন্যথায় শনাক্ত করা যাবে না।
--ফ্রিলিস্ট-বিগ-ব্লক= [ডিফল্ট: 1000000]
পুনরায় বরাদ্দের জন্য উপলব্ধ মুক্ত ব্লকের সারি থেকে ব্লক তৈরি করার সময়,
মেমচেক অগ্রাধিকারে ব্লকগুলিকে আরও বড় বা সমান আকারে পুনরায় প্রচার করবে
--ফ্রিলিস্ট-বিগ-ব্লক. এটি নিশ্চিত করে যে বড় ব্লকগুলি মুক্ত করা (বিশেষ করে মুক্ত করা
এর চেয়ে বড় ব্লক --ফ্রিলিস্ট-ভলিউম) অবিলম্বে একটি পুনরায় প্রচলন নেতৃত্বে না
বিনামূল্যে তালিকার সমস্ত (বা অনেক) ছোট ব্লক। অন্য কথায়, এই বিকল্প
এমনকি "ছোট" ব্লকগুলির জন্য ঝুলন্ত পয়েন্টারগুলি আবিষ্কার করার সম্ভাবনা বৃদ্ধি করে
যখন বড় ব্লক মুক্ত করা হয়।
0 এর মান সেট করার মানে হল যে সমস্ত ব্লক একটি FIFO অর্ডারে পুনরায় প্রচারিত হয়।
--workaround-gcc296-bugs= [ডিফল্ট: না]
যখন সক্রিয় করা হয়, ধরে নিন যে স্ট্যাক পয়েন্টারের নীচে কিছু ছোট দূরত্ব পড়ে এবং লেখে
GCC 2.96-এ বাগগুলির কারণে, এবং সেগুলি রিপোর্ট করে না। "ছোট দূরত্ব" হল 256
ডিফল্টরূপে বাইট। উল্লেখ্য যে GCC 2.96 হল কিছু প্রাচীন লিনাক্সের ডিফল্ট কম্পাইলার
বিতরণ (RedHat 7.X) এবং তাই আপনাকে এই বিকল্পটি ব্যবহার করতে হতে পারে। থাকলে ব্যবহার করবেন না
আপনাকে করতে হবে না, কারণ এটি বাস্তব ত্রুটিগুলিকে উপেক্ষা করতে পারে৷ একটি ভাল বিকল্প
একটি সাম্প্রতিক GCC ব্যবহার করতে হবে যেখানে এই বাগ সংশোধন করা হয়েছে।
3-বিটে GCC 4.X বা 32.X এর সাথে কাজ করার সময় আপনাকে এই বিকল্পটি ব্যবহার করতে হতে পারে
পাওয়ারপিসি লিনাক্স। এর কারণ হল GCC কোড তৈরি করে যা মাঝে মাঝে নীচে অ্যাক্সেস করে
স্ট্যাক পয়েন্টার, বিশেষ করে ফ্লোটিং পয়েন্ট থেকে/থেকে পূর্ণসংখ্যা রূপান্তরের জন্য। এই
32-বিট পাওয়ারপিসি ELF স্পেসিফিকেশন লঙ্ঘন করে, যার জন্য কোন বিধান নেই
স্ট্যাক পয়েন্টারের নীচের অবস্থানগুলি অ্যাক্সেসযোগ্য হতে পারে।
--শো-অমিল-মুক্ত= [ডিফল্ট: হ্যাঁ]
সক্রিয় করা হলে, মেমচেক পরীক্ষা করে যে হিপ ব্লকগুলি একটি ফাংশন ব্যবহার করে ডিললোকেড করা হয়েছে
বরাদ্দকরণ ফাংশনের সাথে মেলে। অর্থাৎ এটি প্রত্যাশা করে বিনামূল্যে ডিললোকেট করতে ব্যবহার করা
দ্বারা বরাদ্দ ব্লক malloc, মুছে ফেলা দ্বারা বরাদ্দ ব্লক জন্য নতুন, এবং মুছে ফেলা[] উন্নত
দ্বারা বরাদ্দ ব্লক নতুন[]. যদি একটি অমিল সনাক্ত করা হয়, একটি ত্রুটি রিপোর্ট করা হয়. এই আছে
সাধারণ গুরুত্বপূর্ণ কারণ কিছু পরিবেশে, একটি অ-ম্যাচিং ফাংশন দিয়ে মুক্ত করা
ক্র্যাশ হতে পারে।
তবে এমন একটি দৃশ্য রয়েছে যেখানে এই ধরনের অমিল এড়ানো যায় না। যে যখন
ব্যবহারকারী এর বাস্তবায়ন প্রদান করে নতুন/নতুন[] যে কল malloc এবং মুছে ফেলা/মুছে ফেলা[]
যে কল বিনামূল্যে, এবং এই ফাংশনগুলি অসমমিতভাবে ইনলাইনযুক্ত। উদাহরণস্বরূপ, কল্পনা করুন
যে মুছে ফেলা[] ইনলাইন আছে কিন্তু নতুন[] এটি না. ফলাফল মেমচেক সব "দেখতে" হয়
মুছে ফেলা[] সরাসরি কল হিসাবে কল বিনামূল্যে, এমনকি যখন প্রোগ্রামের উৎসে নেই
অমিল কল।
এটি অনেক বিভ্রান্তিকর এবং অপ্রাসঙ্গিক ত্রুটি রিপোর্টের কারণ।
--শো-অমিল-মুক্ত=না এই চেক নিষ্ক্রিয়. এটা সাধারণত বাঞ্ছনীয় নয়
তাদের নিষ্ক্রিয় করুন, যদিও, কারণ আপনি এর ফলে প্রকৃত ত্রুটিগুলি মিস করতে পারেন।
--ignore-ranges=0xPP-0xQQ[,0xRR-0xSS]
এই বিকল্পে তালিকাভুক্ত যেকোন ব্যাপ্তি (এবং একাধিক ব্যাপ্তি নির্দিষ্ট করা যেতে পারে, দ্বারা পৃথক করা হয়
কমা) মেমচেকের ঠিকানাযোগ্যতা পরীক্ষা দ্বারা উপেক্ষা করা হবে।
--malloc-fill=
malloc, new, ইত্যাদি দ্বারা বরাদ্দকৃত ব্লকগুলি পূরণ করে, কিন্তু calloc দ্বারা নয়, নির্দিষ্ট করা
বাইট অস্পষ্ট মেমরি দুর্নীতি সমস্যা ঝাঁকান চেষ্টা করার সময় এটি দরকারী হতে পারে।
বরাদ্দকৃত এলাকাটিকে এখনও মেমচেক অনির্ধারিত হিসাবে বিবেচনা করে -- শুধুমাত্র এই বিকল্পটি
এর বিষয়বস্তুকে প্রভাবিত করে। মনে রাখবেন যে --malloc-ভর্তি মেমরি একটি ব্লক প্রভাবিত করে না যখন
এটি ক্লায়েন্ট অনুরোধের যুক্তি হিসাবে ব্যবহৃত হয় VALGRIND_MEMPOOL_ALLOC বা
VALGRIND_MALLOCLIKE_BLOCK
--ফ্রি-ফিল=
নির্দিষ্ট বাইট মান সহ বিনামূল্যে, মুছুন, ইত্যাদি দ্বারা মুক্ত করা ব্লকগুলি পূরণ করে। এটা হতে পারে
অস্পষ্ট মেমরি দুর্নীতি সমস্যা ঝাঁকান চেষ্টা করার সময় দরকারী। মুক্ত এলাকা হল
মেমচেক এখনও অ্যাক্সেসের জন্য বৈধ নয় বলে বিবেচনা করে -- এই বিকল্পটি শুধুমাত্র এটিকে প্রভাবিত করে
বিষয়বস্তু মনে রাখবেন যে --মুক্ত-পূর্ণ মেমরির একটি ব্লককে প্রভাবিত করে না যখন এটি হিসাবে ব্যবহার করা হয়
ক্লায়েন্ট অনুরোধের যুক্তি VALGRIND_MEMPOOL_FREE বা VALGRIND_FREELIKE_BLOCK৷
ক্যাচেগ্রিন্ড বিকল্প
--I1= , , আকার>
লেভেল 1 ইন্সট্রাকশন ক্যাশের আকার, সহযোগীতা এবং লাইনের আকার নির্দিষ্ট করুন।
--D1= , , আকার>
স্তর 1 ডেটা ক্যাশের আকার, সহযোগীতা এবং লাইনের আকার নির্দিষ্ট করুন।
--এলএল= , , আকার>
শেষ-স্তরের ক্যাশের আকার, সহযোগীতা এবং লাইনের আকার নির্দিষ্ট করুন।
--cache-sim=no|হ্যাঁ [হ্যাঁ]
ক্যাশে অ্যাক্সেস এবং মিস গণনা সংগ্রহ সক্ষম বা নিষ্ক্রিয় করে।
--শাখা-সিম=না|হ্যাঁ [না]
শাখা নির্দেশনা এবং ভুল অনুমান গণনা সংগ্রহ সক্ষম বা নিষ্ক্রিয় করে। দ্বারা
ডিফল্ট এটি নিষ্ক্রিয় করা হয়েছে কারণ এটি ক্যাচেগ্রিন্ডকে প্রায় 25% কমিয়ে দেয়। মনে রাখবেন যে
আপনি নির্দিষ্ট করতে পারবেন না --ক্যাশে-সিম=নং এবং --শাখা-সিম=নং একসঙ্গে, যে ছেড়ে যেতে হবে
সংগ্রহ করার জন্য কোন তথ্য ছাড়াই ক্যাশেগ্রিন্ড।
--cachegrind-out-file=
ডিফল্ট আউটপুট ফাইলের পরিবর্তে ফাইলে প্রোফাইল ডেটা লিখুন,
cachegrind.out. . দ্য %p এবং %q ফর্ম্যাট স্পেসিফায়ারগুলি প্রক্রিয়াটি এম্বেড করতে ব্যবহার করা যেতে পারে
আইডি এবং/অথবা নামের একটি এনভায়রনমেন্ট ভেরিয়েবলের বিষয়বস্তু, যেমনটি ক্ষেত্রে
মূল বিকল্প --লগ ফাইল.
কলগ্রিন্ড বিকল্প
--callgrind-out-file=
ডিফল্ট আউটপুট ফাইলের পরিবর্তে ফাইলে প্রোফাইল ডেটা লিখুন,
callgrind.out. . দ্য %p এবং %q ফর্ম্যাট স্পেসিফায়ারগুলি প্রক্রিয়াটি এম্বেড করতে ব্যবহার করা যেতে পারে
আইডি এবং/অথবা নামের একটি এনভায়রনমেন্ট ভেরিয়েবলের বিষয়বস্তু, যেমনটি ক্ষেত্রে
মূল বিকল্প --লগ ফাইল. যখন একাধিক ডাম্প তৈরি করা হয়, তখন ফাইলের নাম পরিবর্তন করা হয়
আরও নিচে দেখ.
--ডাম্প-লাইন= [ডিফল্ট: হ্যাঁ]
এটি সুনির্দিষ্ট করে যে ইভেন্ট গণনা উৎস লাইন গ্রানুলারিটিতে সঞ্চালিত হওয়া উচিত।
এটি ডিবাগ তথ্যের সাথে সংকলিত উত্সগুলির জন্য উত্স টীকা করার অনুমতি দেয়৷
(-g).
--ডাম্প-ইনস্ট্র= [ডিফল্ট: না]
এটি নির্দিষ্ট করে যে ইভেন্ট গণনা প্রতি-নির্দেশের গ্রানুলারিটিতে সঞ্চালিত হওয়া উচিত।
এটি সমাবেশ কোড টীকা জন্য অনুমতি দেয়. বর্তমানে ফলাফল শুধুমাত্র প্রদর্শিত হতে পারে
KCachegrind দ্বারা।
--compress-strings= [ডিফল্ট: হ্যাঁ]
এই বিকল্পটি প্রোফাইল ডেটার আউটপুট বিন্যাসকে প্রভাবিত করে। এটি কিনা তা নির্দিষ্ট করে
স্ট্রিং (ফাইল এবং ফাংশনের নাম) সংখ্যা দ্বারা চিহ্নিত করা উচিত। এই সঙ্কুচিত
ফাইল, কিন্তু মানুষের পক্ষে পড়া আরও কঠিন করে তোলে (যা কোনটিতেই সুপারিশ করা হয় না
ক্ষেত্রে)।
--compress-pos= [ডিফল্ট: হ্যাঁ]
এই বিকল্পটি প্রোফাইল ডেটার আউটপুট বিন্যাসকে প্রভাবিত করে। এটি কিনা তা নির্দিষ্ট করে
সংখ্যাসূচক অবস্থানগুলি সর্বদা পরম মান হিসাবে নির্দিষ্ট করা হয় বা হতে দেওয়া হয়
পূর্ববর্তী সংখ্যার সাথে আপেক্ষিক। এটি ফাইলের আকার সঙ্কুচিত করে।
--combine-dumps= [ডিফল্ট: না]
যখন সক্রিয় করা হয়, যখন একাধিক প্রোফাইল ডেটা অংশগুলি তৈরি করা হয় তখন এই অংশগুলি হয়৷
একই আউটপুট ফাইলে যুক্ত করা হয়েছে। সুপারিশ করা হয় না.
--ডাম্প-প্রত্যেক-bb= [ডিফল্ট: 0, কখনোই]
প্রতিটি প্রোফাইল ডেটা ডাম্প করুন গণনা মৌলিক ব্লক। একটি ডাম্প প্রয়োজন কিনা শুধুমাত্র চেক করা হয়
যখন Valgrind এর অভ্যন্তরীণ সময়সূচী চালানো হয়। অতএব, ন্যূনতম সেটিং দরকারী
প্রায় 100000। দীর্ঘ ডাম্প পিরিয়ড সম্ভব করার জন্য গণনা একটি 64-বিট মান।
--ডাম্প-আগে=
প্রবেশ করার সময় ডাম্প ক্রিয়া.
--শূন্য-আগে=
ঢোকার সময় সব খরচ শূন্য ক্রিয়া.
--ডাম্প-পরে=
যাওয়ার সময় ডাম্প ক্রিয়া.
--instr-atstart= [ডিফল্ট: হ্যাঁ]
আপনি কলগ্রিন্ডের শুরু থেকে সিমুলেশন এবং প্রোফাইলিং শুরু করতে চান কিনা তা নির্দিষ্ট করুন
কার্যক্রম. না সেট করা হলে, কলগ্রিন্ড কোনো তথ্য সংগ্রহ করতে পারবে না,
কল সহ, তবে এটিতে সর্বাধিক 4 এর মন্থরতা থাকবে, যা সর্বনিম্ন
Valgrind ওভারহেড. কলগ্রিন্ড_কন্ট্রোলের মাধ্যমে ইন্সট্রুমেন্টেশন ইন্টারেক্টিভভাবে সক্ষম করা যেতে পারে
-আমি অন।
নোট করুন যে ফলস্বরূপ কল গ্রাফে সম্ভবত থাকবে না প্রধান, কিন্তু হবে
ইন্সট্রুমেন্টেশন সক্রিয় করার পরে কার্যকর করা সমস্ত ফাংশন রয়েছে। ইন্সট্রুমেন্টেশন
এছাড়াও প্রোগ্রামগতভাবে সক্রিয়/অক্ষম করতে পারেন। কলগ্রিন্ড ফাইল কলগ্রিন্ড.এইচ অন্তর্ভুক্ত দেখুন
ম্যাক্রোর জন্য আপনাকে আপনার সোর্স কোডে ব্যবহার করতে হবে।
ক্যাশে সিমুলেশনের জন্য, ইনস্ট্রুমেন্টেশন চালু করার সময় ফলাফল কম সঠিক হবে
পরে প্রোগ্রাম রানে, যেহেতু সিমুলেটরটি সেই মুহুর্তে একটি খালি ক্যাশে দিয়ে শুরু হয়।
এই ত্রুটিটি মোকাবেলা করতে পরে ইভেন্ট সংগ্রহ চালু করুন।
--collect-atstart= [ডিফল্ট: হ্যাঁ]
প্রোফাইল চালানোর শুরুতে ইভেন্ট সংগ্রহ সক্ষম করা হয়েছে কিনা তা নির্দিষ্ট করুন।
শুধুমাত্র আপনার প্রোগ্রামের অংশগুলি দেখতে, আপনার দুটি সম্ভাবনা রয়েছে:
1. শূন্য ইভেন্ট কাউন্টার প্রবেশ করার আগে প্রোগ্রাম অংশ আপনি প্রোফাইল করতে চান, এবং ডাম্প
ইভেন্টটি সেই প্রোগ্রামের অংশটি ছেড়ে যাওয়ার পরে একটি ফাইলে কাউন্টার করে।
2. শুধুমাত্র ইভেন্ট কাউন্টার ঘটছে দেখতে প্রয়োজন অনুযায়ী সংগ্রহের অবস্থা চালু/বন্ধ করুন
প্রোগ্রাম অংশের ভিতরে থাকাকালীন আপনি প্রোফাইল করতে চান।
দ্বিতীয় বিকল্পটি ব্যবহার করা যেতে পারে যদি আপনি যে প্রোগ্রাম অংশটিকে প্রোফাইল করতে চান তাকে অনেক বলা হয়
বার বিকল্প 1, অর্থাৎ প্রচুর ডাম্প তৈরি করা এখানে বাস্তবসম্মত নয়।
বিকল্পের সাথে একটি প্রদত্ত ফাংশনের প্রবেশ এবং প্রস্থানের সময় সংগ্রহের অবস্থা টগল করা যেতে পারে
--টগল-সংগ্রহ. আপনি যদি এই বিকল্পটি ব্যবহার করেন, সংগ্রহের অবস্থা তে নিষ্ক্রিয় করা উচিত
শুরু উল্লেখ্য যে স্পেসিফিকেশন --টগল-সংগ্রহ নিহিতভাবে সেট করে
--collect-state=no.
ক্লায়েন্ট অনুরোধ সন্নিবেশ করেও সংগ্রহের অবস্থা টগল করা যেতে পারে
CALLGRIND_TOGGLE_COLLECT ; প্রয়োজনীয় কোড অবস্থানে.
--টগল-সংগ্রহ=
এন্ট্রি/প্রস্থান করার সময় সংগ্রহ টগল করুন ক্রিয়া.
--collect-jumps= [ডিফল্ট: না]
এটি (শর্তসাপেক্ষ) জাম্পের জন্য তথ্য সংগ্রহ করা উচিত কিনা তা নির্দিষ্ট করে। হিসাবে
উপরে, callgrind_annotate বর্তমানে আপনাকে ডেটা দেখাতে সক্ষম নয়। ব্যবহার করতে হবে
টীকাযুক্ত কোডে জাম্প তীর পেতে KCachegrind.
--collect-systime= [ডিফল্ট: না]
সিস্টেম কল সময়ের জন্য তথ্য সংগ্রহ করা উচিত কিনা তা সুনির্দিষ্ট করে।
--সংগ্রহ-বাস= [ডিফল্ট: না]
এটি নির্দিষ্ট করে যে বিশ্বব্যাপী বাস ইভেন্টের সংখ্যা সংগ্রহ করা উচিত কিনা।
এই ইভেন্টগুলির জন্য ইভেন্ট টাইপ "Ge" ব্যবহার করা হয়।
--ক্যাশে-সিম= [ডিফল্ট: না]
আপনি যদি সম্পূর্ণ ক্যাশে সিমুলেশন করতে চান তা নির্দিষ্ট করুন। ডিফল্টরূপে, শুধুমাত্র নির্দেশ পড়া
অ্যাক্সেস গণনা করা হবে ("Ir")। ক্যাশে সিমুলেশন সহ, আরও ইভেন্ট কাউন্টার রয়েছে
সক্রিয়: নির্দেশ পাঠে ক্যাশে মিস ("I1mr"/"ILmr"), ডেটা পড়ার অ্যাক্সেস ("Dr")
এবং সম্পর্কিত ক্যাশে মিস ("D1mr"/"DLmr"), ডেটা রাইট অ্যাক্সেস ("Dw") এবং সম্পর্কিত ক্যাশে
মিস ("D1mw"/"DLmw")। আরও তথ্যের জন্য, ক্যাচেগ্রিন্ড দেখুন: একটি ক্যাশে এবং শাখা-
ভবিষ্যদ্বাণী প্রোফাইলার।
--শাখা-সিম= [ডিফল্ট: না]
আপনি যদি শাখা ভবিষ্যদ্বাণী সিমুলেশন করতে চান তা নির্দিষ্ট করুন। আরও ইভেন্ট কাউন্টার হয়
সক্রিয়: কার্যকর করা শর্তাধীন শাখার সংখ্যা এবং সম্পর্কিত ভবিষ্যদ্বাণী মিস
("Bc"/"Bcm"), নির্বাহিত পরোক্ষ লাফ এবং জাম্প ঠিকানা ভবিষ্যদ্বাণীর সম্পর্কিত মিস
("Bi"/"Bim")।
হেলগ্রিন্ড বিকল্প
--free-is-write=no|হ্যাঁ [ডিফল্ট: না]
যখন সক্রিয় করা হয় (ডিফল্ট নয়), হেলগ্রিন্ড হিপ মেমরি মুক্ত করার মতো আচরণ করে যেন
মেমরি বিনামূল্যে অবিলম্বে আগে লেখা ছিল. এটি মেমরি যেখানে ঘোড়দৌড় উন্মুক্ত
একটি থ্রেড দ্বারা উল্লেখ করা হয়েছে, এবং অন্য দ্বারা মুক্ত, কিন্তু কোন পর্যবেক্ষণযোগ্য নেই
সিঙ্ক্রোনাইজেশন ইভেন্ট নিশ্চিত করতে যে রেফারেন্সটি বিনামূল্যের আগে ঘটে।
এই কার্যকারিতা Valgrind 3.7.0-এ নতুন, এবং পরীক্ষামূলক হিসাবে বিবেচিত। এটাই
ডিফল্টরূপে সক্রিয় নয় কারণ কাস্টম মেমরি বরাদ্দকারীদের সাথে এর মিথস্ক্রিয়া নেই
বর্তমানে ভালোভাবে বোঝা যাচ্ছে। ব্যবহারকারীর প্রতিক্রিয়া স্বাগত জানানো হয়.
--track-lockorders=না|হ্যাঁ [ডিফল্ট: হ্যাঁ]
যখন সক্রিয় (ডিফল্ট), হেলগ্রিন্ড লক অর্ডার সামঞ্জস্য পরীক্ষা করে। জন্য
কিছু বগি প্রোগ্রাম, বড় সংখ্যক লক অর্ডার ত্রুটি রিপোর্ট করা হতে পারে
বিরক্তিকর, বিশেষ করে যদি আপনি শুধুমাত্র রেসের ত্রুটিতে আগ্রহী হন। আপনি তাই পারেন
লক অর্ডার চেকিং অক্ষম করার জন্য এটি সহায়ক বলে মনে করুন।
--history-level=none|প্রায়|পূর্ণ [ডিফল্ট: সম্পূর্ণ]
--ইতিহাস-স্তর=পূর্ণ (ডিফল্ট) হেলগ্রিন্ড সম্পর্কে যথেষ্ট তথ্য সংগ্রহ করে
"পুরানো" অ্যাক্সেস করে যে এটি একটি রেস রিপোর্টে দুটি স্ট্যাক ট্রেস তৈরি করতে পারে -- উভয় স্ট্যাক
বর্তমান অ্যাক্সেসের জন্য ট্রেস, এবং পুরানো, বিরোধপূর্ণ অ্যাক্সেসের জন্য ট্রেস। প্রতি
মেমরি ব্যবহার সীমিত করুন, "পুরানো" অ্যাক্সেস স্ট্যাক ট্রেস সর্বোচ্চ 8টি এন্ট্রিতে সীমাবদ্ধ,
যোদি ও -- কলকারীর সংখ্যা মান বড়।
এই ধরনের তথ্য সংগ্রহ করা গতি এবং মেমরি উভয় ক্ষেত্রেই ব্যয়বহুল, বিশেষ করে
প্রোগ্রাম যা অনেক ইন্টার-থ্রেড সিঙ্ক্রোনাইজেশন ইভেন্ট করে (লক, আনলক, ইত্যাদি)।
এই ধরনের তথ্য ছাড়া, জাতিগুলির মূল কারণগুলি খুঁজে বের করা আরও কঠিন।
যাইহোক, এমন পরিস্থিতিতে আপনার এটির প্রয়োজন নাও হতে পারে যেখানে আপনি কেবল পরীক্ষা করতে চান
ঘোড়দৌড়ের উপস্থিতি বা অনুপস্থিতি, উদাহরণস্বরূপ, a এর রিগ্রেশন টেস্টিং করার সময়
পূর্বে জাতি মুক্ত প্রোগ্রাম.
--ইতিহাস-স্তর=কোনটি নয় বিপরীত চরম হয়. এটি হেলগ্রিন্ডকে কোনো সংগ্রহ করতে পারে না
পূর্ববর্তী অ্যাক্সেস সম্পর্কে তথ্য। এই তুলনায় নাটকীয়ভাবে দ্রুত হতে পারে
--ইতিহাস-স্তর=পূর্ণ.
--ইতিহাস-স্তর=প্রায় এই দুটি চরম মধ্যে একটি আপস প্রদান করে. এটা কারণ
হেলগ্রিন্ড পরবর্তীতে অ্যাক্সেসের জন্য একটি সম্পূর্ণ ট্রেস এবং আনুমানিক তথ্য দেখাতে
পূর্বের প্রবেশাধিকার সম্পর্কে। এই আনুমানিক তথ্য দুটি স্ট্যাক গঠিত, এবং
পূর্ববর্তী অ্যাক্সেস প্রোগ্রাম পয়েন্টের মধ্যে কোথাও ঘটেছে নিশ্চিত করা হয়
দুটি স্ট্যাক দ্বারা চিহ্নিত. এর জন্য সঠিক স্ট্যাক দেখানোর মতো এটি কার্যকর নয়
পূর্ববর্তী অ্যাক্সেস (যেমন --ইতিহাস-স্তর=পূর্ণ করে), তবে এটি কিছুই না হওয়ার চেয়ে ভাল, এবং এটি
প্রায় হিসাবে দ্রুত --ইতিহাস-স্তর=কোনটি নয়.
--conflict-cache-size=N [ডিফল্ট: 1000000]
এই পতাকা শুধুমাত্র কোন প্রভাব আছে --ইতিহাস-স্তর=পূর্ণ.
"পুরানো" বিরোধপূর্ণ অ্যাক্সেস সম্পর্কে তথ্য সীমিত আকারের ক্যাশে সংরক্ষণ করা হয়,
LRU-শৈলী ব্যবস্থাপনা সহ। এটি প্রয়োজনীয় কারণ এটি a সংরক্ষণ করা ব্যবহারিক নয়
প্রোগ্রাম দ্বারা তৈরি প্রতিটি একক মেমরি অ্যাক্সেসের জন্য স্ট্যাক ট্রেস। ঐতিহাসিক তথ্য
সম্প্রতি অ্যাক্সেস না করা অবস্থানগুলিতে স্থান খালি করতে পর্যায়ক্রমে বাতিল করা হয়
ক্যাশে।
এই বিকল্পটি বিভিন্ন মেমরির সংখ্যার পরিপ্রেক্ষিতে ক্যাশের আকার নিয়ন্ত্রণ করে
ঠিকানা যার জন্য বিরোধপূর্ণ অ্যাক্সেস তথ্য সংরক্ষণ করা হয়। যদি আপনি যে খুঁজে
হেলগ্রিন্ড প্রত্যাশিত দুটির পরিবর্তে শুধুমাত্র একটি স্ট্যাকের সাথে রেস ত্রুটি দেখাচ্ছে
স্ট্যাক, এই মান বাড়ানোর চেষ্টা করুন।
সর্বনিম্ন মান হল 10,000 এবং সর্বাধিক হল 30,000,000 (ডিফল্টের ত্রিশ গুণ
মান)। মান 1 দ্বারা বৃদ্ধি করলে হেলগ্রিন্ডের মেমরির প্রয়োজনীয়তা অনেক বেড়ে যায়
মোটামুটি 100 বাইট, তাই সর্বোচ্চ মান সহজেই তিন অতিরিক্ত গিগাবাইট বা তার বেশি খেয়ে ফেলবে
স্মৃতির
--check-stack-refs=না|হ্যাঁ [ডিফল্ট: হ্যাঁ]
ডিফল্টরূপে হেলগ্রিন্ড আপনার প্রোগ্রাম দ্বারা তৈরি সমস্ত ডেটা মেমরি অ্যাক্সেস পরীক্ষা করে। এই পতাকা
আপনাকে থ্রেড স্ট্যাক (স্থানীয় ভেরিয়েবল) অ্যাক্সেসের জন্য পরীক্ষা করা এড়িয়ে যেতে সক্ষম করে। এটা পারে
কর্মক্ষমতা উন্নত, কিন্তু স্ট্যাক-বরাদ্দ ডেটার অনুপস্থিত রেসের খরচে আসে।
-- উপেক্ষা-থ্রেড-সৃষ্টি= [ডিফল্ট: না]
থ্রেড তৈরির সময় সমস্ত ক্রিয়াকলাপ উপেক্ষা করা উচিত কিনা তা নিয়ন্ত্রণ করে। গতানুগতিক
শুধুমাত্র সোলারিসে সক্ষম। সোলারিস উচ্চতর থ্রুপুট, সমান্তরালতা এবং প্রদান করে
অন্যান্য অপারেটিং সিস্টেমের তুলনায় স্কেলেবিলিটি, আরও সূক্ষ্ম লকিং খরচে
কার্যকলাপ এর মানে হল যে যখন glibc-এর অধীনে একটি থ্রেড তৈরি করা হয়, শুধুমাত্র একটি
সব থ্রেড সেটআপের জন্য বড় লক ব্যবহার করা হয়। Solaris libc বেশ কিছু সূক্ষ্ম দানাদার তালা ব্যবহার করে
এবং স্রষ্টা থ্রেড যত তাড়াতাড়ি সম্ভব তার কার্যক্রম পুনরায় শুরু করে, উদাহরণ স্বরূপ
তৈরি থ্রেডে স্ট্যাক এবং TLS সেটআপ ক্রম। এই পরিস্থিতি হেলগ্রিন্ডকে বিভ্রান্ত করে
যেহেতু এটি অনুমান করে যে স্রষ্টা এবং সৃষ্টির মধ্যে কিছু মিথ্যা আদেশ রয়েছে
থ্রেড; আর তাই আবেদনে অনেক ধরনের রেসের শর্ত থাকবে না
রিপোর্ট এই ধরনের মিথ্যা আদেশ প্রতিরোধ করার জন্য, এই কমান্ড লাইন বিকল্পটি হ্যাঁ দ্বারা সেট করা হয়েছে
সোলারিসে ডিফল্ট। সমস্ত কার্যকলাপ (লোড, দোকান, ক্লায়েন্ট অনুরোধ) তাই উপেক্ষা করা হয়
সময়:
স্রষ্টা থ্রেডে pthread_create() কল করুন
· তৈরি থ্রেডে থ্রেড তৈরির পর্ব (স্ট্যাক এবং TLS সেটআপ)
এছাড়াও থ্রেড তৈরির সময় বরাদ্দ করা নতুন মেমরি আনট্র্যাক করা হয়, এটি রেস রিপোর্টিং
সেখানে চাপা পড়ে। ডিআরডি একই জিনিস অস্পষ্টভাবে করে। এটি প্রয়োজনীয় কারণ
সোলারিস libc অনেক বস্তু ক্যাশে করে এবং বিভিন্ন থ্রেডের জন্য পুনরায় ব্যবহার করে
হেলগ্রিন্ডকে বিভ্রান্ত করে।
DRD বিকল্প
--চেক-স্ট্যাক-ভার= [ডিফল্ট: না]
DRD স্ট্যাক ভেরিয়েবলে ডেটা রেস সনাক্ত করে কিনা তা নিয়ন্ত্রণ করে। স্ট্যাক ভেরিয়েবল যাচাই করা হচ্ছে
ডিফল্টরূপে নিষ্ক্রিয় করা হয় কারণ বেশিরভাগ প্রোগ্রাম স্ট্যাক ভেরিয়েবল শেয়ার করে না
থ্রেড।
--এক্সক্লুসিভ-থ্রেশহোল্ড= [ডিফল্ট: বন্ধ]
কোনো মিউটেক্স বা রাইটার লক সময়ের চেয়ে বেশি সময় ধরে থাকলে একটি ত্রুটি বার্তা প্রিন্ট করুন
মিলিসেকেন্ডে নির্দিষ্ট করা হয়েছে। এই বিকল্পটি লক কনটেন্টেশন সনাক্তকরণ সক্ষম করে।
--join-list-vol= [ডিফল্ট: 10]
ডেটা রেস যা একটি থ্রেড এবং অন্য থ্রেডের শেষে একটি বিবৃতির মধ্যে ঘটে
মেমরি অ্যাক্সেস তথ্য একটি থ্রেড পরে অবিলম্বে বাতিল করা হলে মিস করা যেতে পারে
যোগদান করা হয়েছে। এই বিকল্পটি কতগুলি যোগযুক্ত থ্রেড মেমরির জন্য নির্দিষ্ট করতে দেয়
অ্যাক্সেস তথ্য রাখা উচিত.
--প্রথম-জাতি-শুধু= [ডিফল্ট: না]
শুধুমাত্র একটি মেমরি অবস্থানে সনাক্ত করা প্রথম ডেটা রেস রিপোর্ট করা হবে কিনা
অথবা একটি মেমরি অবস্থানে সনাক্ত করা হয়েছে যে সমস্ত ডেটা রেস.
--মুক্ত-ই-লিখুন= [ডিফল্ট: না]
মেমরি অ্যাক্সেস করা এবং মেমরি মুক্ত করার মধ্যে রেস রিপোর্ট করা হবে কিনা। এটি সক্রিয় করা হচ্ছে
বিকল্পটি ডিআরডিকে কিছুটা ধীর গতিতে চালাতে পারে। মন্তব্য:
কাস্টম মেমরি বরাদ্দকারী ব্যবহার করার সময় এই বিকল্পটি সক্রিয় করবেন না যা ব্যবহার করে
VG_USERREQ__MALLOCLIKE_BLOCK এবং VG_USERREQ__FREELIKE_BLOCK কারণ এটি হবে
মিথ্যা ইতিবাচক ফলাফল.
রেফারেন্স-গণনা করা বস্তু ব্যবহার করার সময় এই বিকল্পটি সক্রিয় করবেন না কারণ এটি হবে
মিথ্যা ইতিবাচক ফলাফল, এমনকি যখন সেই কোডটি সঠিকভাবে টীকা করা হয়েছে
ANNOTATE_HAPPENS_BEFORE এবং ANNOTATE_HAPPENS_AFTER। যেমন আউটপুট দেখুন
একটি উদাহরণের জন্য নিম্নলিখিত কমান্ড: valgrind --tool=drd --free-is-write=yes
drd/tests/annotate_smart_pointer.
--report-signal-unlocked= [ডিফল্ট: হ্যাঁ]
কল রিপোর্ট করতে হবে কিনা pthread_cond_signal এবং pthread_cond_broadcast যেখানে
মিউটেক্স এর মাধ্যমে সংকেতের সাথে যুক্ত pthread_cond_wait or
pthread_cond_timed_waitসংকেত পাঠানোর সময় লক করা হয় না। একটি সংকেত পাঠানো হচ্ছে
সংশ্লিষ্ট মিউটেক্সে একটি লক না ধরে রাখা একটি সাধারণ প্রোগ্রামিং ত্রুটি যা হতে পারে
সূক্ষ্ম জাতি অবস্থা এবং অপ্রত্যাশিত আচরণ কারণ. কিছু অস্বাভাবিক আছে
সিঙ্ক্রোনাইজেশন নিদর্শন তবে যেখানে a ধরে না রেখে একটি সংকেত পাঠানো নিরাপদ
সংশ্লিষ্ট মিউটেক্সে লক করুন।
--segment-merging= [ডিফল্ট: হ্যাঁ]
সেগমেন্ট মার্জিং নিয়ন্ত্রণ করে। সেগমেন্ট মার্জিং একটি অ্যালগরিদম যা মেমরির ব্যবহার সীমিত করে
ডেটা রেস সনাক্তকরণ অ্যালগরিদম। সেগমেন্ট মার্জিং অক্ষম করলে এর সঠিকতা উন্নত হতে পারে
তথাকথিত 'অন্যান্য সেগমেন্ট' রেস রিপোর্টে প্রদর্শিত হয় কিন্তু একটি আউট ট্রিগার করতে পারে
মেমরি ত্রুটি.
--segment-merging-interval= [ডিফল্ট: 10]
নতুন সেগমেন্টের নির্দিষ্ট সংখ্যক হওয়ার পরেই সেগমেন্ট মার্জ করুন
তৈরি এটি একটি উন্নত কনফিগারেশন বিকল্প যা একজনকে বেছে নিতে দেয় কিনা
একটি কম মান বেছে নিয়ে ডিআরডি-এর মেমরি ব্যবহার কমিয়ে দিন বা ডিআরডিকে দ্রুত চলতে দিন
একটি সামান্য উচ্চ মান নির্বাচন. এই পরামিতি জন্য সর্বোত্তম মান উপর নির্ভর করে
প্রোগ্রাম বিশ্লেষণ করা হচ্ছে। ডিফল্ট মান বেশিরভাগ প্রোগ্রামের জন্য ভাল কাজ করে।
--shared-threshold= [ডিফল্ট: বন্ধ]
একটি রিডার লক নির্দিষ্ট সময়ের চেয়ে বেশি সময় ধরে থাকলে একটি ত্রুটি বার্তা প্রিন্ট করুন
(মিলিসেকেন্ডে)। এই বিকল্পটি লক কনটেন্টেশন সনাক্তকরণ সক্ষম করে।
--show-confl-seg= [ডিফল্ট: হ্যাঁ]
রেসের রিপোর্টে পরস্পরবিরোধী সেগমেন্ট দেখান। যেহেতু এই তথ্য খুঁজে পেতে সাহায্য করতে পারেন
ডেটা রেসের কারণ, এই বিকল্পটি ডিফল্টরূপে সক্রিয় থাকে। এই বিকল্পটি নিষ্ক্রিয় করে তোলে
ডিআরডির আউটপুট আরও কমপ্যাক্ট।
--show-stack-usage= [ডিফল্ট: না]
থ্রেড প্রস্থান সময় স্ট্যাক ব্যবহার মুদ্রণ. একটি প্রোগ্রাম যখন একটি বড় সংখ্যা তৈরি করে
থ্রেডের জন্য বরাদ্দকৃত ভার্চুয়াল মেমরির পরিমাণ সীমিত করা গুরুত্বপূর্ণ হয়ে ওঠে
থ্রেড স্ট্যাক. এই বিকল্পটি স্ট্যাক মেমরি কত হয়েছে তা পর্যবেক্ষণ করা সম্ভব করে তোলে
ক্লায়েন্ট প্রোগ্রামের প্রতিটি থ্রেড দ্বারা ব্যবহৃত। দ্রষ্টব্য: DRD টুল নিজেই কিছু বরাদ্দ করে
ক্লায়েন্ট থ্রেড স্ট্যাকের অস্থায়ী ডেটা। এই অস্থায়ী ডেটার জন্য প্রয়োজনীয় স্থান
ক্লায়েন্ট প্রোগ্রাম দ্বারা বরাদ্দ করা আবশ্যক যখন এটি স্ট্যাক মেমরি বরাদ্দ করে, কিন্তু তা নয়
DRD দ্বারা রিপোর্ট করা স্ট্যাক ব্যবহার অন্তর্ভুক্ত.
-- উপেক্ষা-থ্রেড-সৃষ্টি= [ডিফল্ট: না]
থ্রেড তৈরির সময় সমস্ত ক্রিয়াকলাপ উপেক্ষা করা উচিত কিনা তা নিয়ন্ত্রণ করে। গতানুগতিক
শুধুমাত্র সোলারিসে সক্ষম। সোলারিস উচ্চতর থ্রুপুট, সমান্তরালতা এবং প্রদান করে
অন্যান্য অপারেটিং সিস্টেমের তুলনায় স্কেলেবিলিটি, আরও সূক্ষ্ম লকিং খরচে
কার্যকলাপ এর মানে হল যে যখন glibc-এর অধীনে একটি থ্রেড তৈরি করা হয়, শুধুমাত্র একটি
সব থ্রেড সেটআপের জন্য বড় লক ব্যবহার করা হয়। Solaris libc বেশ কিছু সূক্ষ্ম দানাদার তালা ব্যবহার করে
এবং স্রষ্টা থ্রেড যত তাড়াতাড়ি সম্ভব তার কার্যক্রম পুনরায় শুরু করে, উদাহরণ স্বরূপ
তৈরি থ্রেডে স্ট্যাক এবং TLS সেটআপ ক্রম। এই পরিস্থিতি ডিআরডিকে বিভ্রান্ত করে
অনুমান করে যে স্রষ্টা এবং তৈরি থ্রেডের মধ্যে কিছু মিথ্যা আদেশ রয়েছে; এবং
তাই অ্যাপ্লিকেশনে রেসের অবস্থার অনেক ধরনের রিপোর্ট করা হবে না। প্রতি
এই ধরনের মিথ্যা অর্ডার প্রতিরোধ, এই কমান্ড লাইন বিকল্পটি ডিফল্টরূপে হ্যাঁ সেট করা আছে
সোলারিস। সমস্ত কার্যকলাপ (লোড, স্টোর, ক্লায়েন্ট অনুরোধ) তাই এই সময়ে উপেক্ষা করা হয়:
স্রষ্টা থ্রেডে pthread_create() কল করুন
· তৈরি থ্রেডে থ্রেড তৈরির পর্ব (স্ট্যাক এবং TLS সেটআপ)
--trace-addr= [ডিফল্ট: কোনটিই না]
নির্দিষ্ট ঠিকানার জন্য সমস্ত লোড এবং স্টোর কার্যকলাপ ট্রেস করুন। এই বিকল্প হতে পারে
একাধিকবার নির্দিষ্ট করা হয়েছে।
--ptrace-addr= [ডিফল্ট: কোনটিই না]
নির্দিষ্ট ঠিকানার জন্য সমস্ত লোড এবং স্টোর কার্যকলাপ ট্রেস করুন এবং এটি করতে থাকুন
যে ঠিকানায় মেমরি মুক্ত এবং পুনরায় বরাদ্দ করা হয়েছে পরে.
--trace-alloc= [ডিফল্ট: না]
সমস্ত মেমরি বরাদ্দ এবং ডিলোকেশন ট্রেস করুন। আউটপুট একটি বিশাল পরিমাণ উত্পাদন করতে পারে.
--ট্রেস-বাধা= [ডিফল্ট: না]
সমস্ত বাধা কার্যকলাপ ট্রেস.
--ট্রেস-কন্ড= [ডিফল্ট: না]
সমস্ত শর্ত পরিবর্তনশীল কার্যকলাপ ট্রেস.
--ট্রেস-ফর্ক-যোগদান= [ডিফল্ট: না]
সমস্ত থ্রেড তৈরি এবং সমস্ত থ্রেড সমাপ্তির ঘটনাগুলি ট্রেস করুন৷
--ট্রেস-এইচবি= [ডিফল্ট: না]
ANNOTATE_HAPPENS_BEFORE(), ANNOTATE_HAPPENS_AFTER() এবং এর ট্রেস এক্সিকিউশন
ANNOTATE_HAPPENS_DONE() ক্লায়েন্ট অনুরোধ।
--ট্রেস-মিউটেক্স= [ডিফল্ট: না]
সমস্ত mutex কার্যকলাপ ট্রেস.
--trace-rwlock= [ডিফল্ট: না]
সমস্ত পাঠক-লেখক লক কার্যকলাপ ট্রেস.
--ট্রেস-সেমাফোর= [ডিফল্ট: না]
সমস্ত সেমাফোর কার্যকলাপ ট্রেস করুন।
ম্যাসিফ বিকল্প
--স্তূপ= [ডিফল্ট: হ্যাঁ]
হিপ প্রোফাইলিং করা উচিত কিনা তা নির্দিষ্ট করে।
--heap-admin= [ডিফল্ট: 8]
হিপ প্রোফাইলিং সক্ষম করা থাকলে, প্রতি ব্লকে প্রশাসনিক বাইটের সংখ্যা দেয়
ব্যবহার এটি গড়ের একটি অনুমান হওয়া উচিত, যেহেতু এটি পরিবর্তিত হতে পারে। উদাহরণস্বরূপ, দ
লিনাক্সে glibc দ্বারা ব্যবহৃত বরাদ্দকারীর জন্য প্রতি ব্লকে 4 থেকে 15 বাইটের প্রয়োজন হয়,
বিভিন্ন কারণের উপর নির্ভর করে। যে বরাদ্দকারী এছাড়াও বিনামূল্যে জন্য অ্যাডমিন স্থান প্রয়োজন
ব্লক, কিন্তু ম্যাসিফ এর জন্য অ্যাকাউন্ট করতে পারে না।
--স্ট্যাক্স= [ডিফল্ট: না]
স্ট্যাক প্রোফাইলিং করা উচিত কিনা তা নির্দিষ্ট করে। এই বিকল্পটি ম্যাসিফকে ধীর করে দেয়
ব্যাপকভাবে, এবং তাই ডিফল্টরূপে বন্ধ। লক্ষ্য করুন যে ম্যাসিফ অনুমান করে যে প্রধান স্ট্যাক রয়েছে
শুরুতে আকার শূন্য। এটি সত্য নয়, তবে অন্যথায় সঠিকভাবে করা কঠিন।
অধিকন্তু, শূন্য থেকে শুরু করা প্রধান স্ট্যাকের অংশের আকার নির্দেশ করে
যে একটি ব্যবহারকারী প্রোগ্রাম আসলে নিয়ন্ত্রণ আছে.
--পৃষ্ঠা-হিপ= [ডিফল্ট: না]
ম্যাসিফকে ম্যালোক'ড ব্লকের পরিবর্তে পৃষ্ঠা স্তরে প্রোফাইল মেমরি করতে বলে
স্তর বিস্তারিত জানার জন্য উপরে দেখুন.
--গভীরতা= [ডিফল্ট: 30]
বিস্তারিত স্ন্যাপশটের জন্য রেকর্ড করা বরাদ্দ গাছের সর্বোচ্চ গভীরতা। এটা বাড়াচ্ছে
ম্যাসিফকে কিছুটা ধীরে ধীরে চালাবে, আরও মেমরি ব্যবহার করবে এবং বড় আউটপুট তৈরি করবে
ফাইল।
--alloc-fn=
এই বিকল্পের সাথে নির্দিষ্ট করা ফাংশনগুলিকে হিপ হিসাবে বিবেচনা করা হবে
বরাদ্দ ফাংশন যেমন malloc. এটি মোড়ানো ফাংশনগুলির জন্য দরকারী
malloc or নতুন, যা আগ্রহহীন তথ্য দিয়ে বরাদ্দ গাছ পূরণ করতে পারে।
একাধিক নাম দেওয়ার জন্য এই বিকল্পটি কমান্ড লাইনে একাধিকবার নির্দিষ্ট করা যেতে পারে
ফাংশন।
উল্লেখ্য যে নামযুক্ত ফাংশনটি শুধুমাত্র এইভাবে বিবেচনা করা হবে যদি এটি a-তে শীর্ষ এন্ট্রি হয়
স্ট্যাক ট্রেস, বা ঠিক নীচে অন্য ফাংশন এই ভাবে চিকিত্সা করা হয়. উদাহরণস্বরূপ, আপনার যদি থাকে
একটি অনুষ্ঠান malloc1 যে wraps malloc, এবং malloc2 যে wraps malloc1, শুধু নির্দিষ্ট করা
--alloc-fn=malloc2 কোন প্রভাব হবে না। আপনি নির্দিষ্ট করতে হবে --alloc-fn=malloc1 as
আমরা হব. এটি একটু অসুবিধাজনক, কিন্তু কারণ বরাদ্দের জন্য যাচাই করা হয়
ফাংশনগুলি ধীর, এবং এটি অনেক সময় বাঁচায় যদি ম্যাসিফ এর মাধ্যমে দেখা বন্ধ করতে পারে
স্ট্যাক ট্রেস এন্ট্রি যত তাড়াতাড়ি এটি এমন একটি খুঁজে পায় যা করার চেয়ে মেলে না
সব এন্ট্রি মাধ্যমে অবিরত.
উল্লেখ্য যে C++ নামগুলো বিকৃত করা হয়েছে। এছাড়াও নোট করুন যে ওভারলোড করা C++ নাম অবশ্যই লিখতে হবে
পুরাপুরি. শেলটিকে ভাঙা থেকে বিরত রাখতে একক উদ্ধৃতি প্রয়োজন হতে পারে।
উদাহরণ স্বরূপ:
--alloc-fn='অপারেটর নতুন(স্বাক্ষরবিহীন, std::nothrow_t const&)'
--ignore-fn=
যেকোন সরাসরি হিপ বরাদ্দ (যেমন একটি কল malloc, নতুন, ইত্যাদি, বা একটি ফাংশন একটি কল
একটি দ্বারা নামকরণ করা হয়েছে --alloc-fn বিকল্প) যা এই বিকল্প দ্বারা নির্দিষ্ট একটি ফাংশনে ঘটে
উপেক্ষা করা এটি বেশিরভাগ পরীক্ষার উদ্দেশ্যে উপযোগী। এই বিকল্প নির্দিষ্ট করা যেতে পারে
কমান্ড লাইনে একাধিকবার, একাধিক ফাংশনের নাম দিতে।
কোন realloc একটি উপেক্ষিত ব্লকেরও উপেক্ষা করা হবে, এমনকি যদি realloc কল করে
একটি উপেক্ষিত ফাংশন ঘটবে না. এটি নেতিবাচক হিপ আকারের সম্ভাবনা এড়ায়
যদি উপেক্ষা করা ব্লকগুলি সঙ্কুচিত হয় realloc.
C++ ফাংশনের নাম লেখার নিয়ম একই রকম --alloc-fn উপরে।
--থ্রেশহোল্ড= [ডিফল্ট: 1.0]
মোট মেমরি আকারের শতাংশ হিসাবে হিপ বরাদ্দের জন্য তাত্পর্য থ্রেশহোল্ড।
বরাদ্দ ট্রি এন্ট্রি যা এর চেয়ে কম জন্য অ্যাকাউন্ট একত্রিত করা হবে. মনে রাখবেন যে
এটি একই নামের ms_print এর বিকল্পের সাথে ট্যান্ডেমে উল্লেখ করা উচিত।
--পিক-অশুদ্ধতা= [ডিফল্ট: 1.0]
ম্যাসিফ অগত্যা প্রকৃত বিশ্বব্যাপী মেমরি বরাদ্দের শিখর রেকর্ড করে না; দ্বারা
ডিফল্ট এটি শুধুমাত্র তখনই সর্বোচ্চ রেকর্ড করে যখন বিশ্বব্যাপী মেমরি বরাদ্দের আকার অতিক্রম করে
পূর্ববর্তী সর্বোচ্চ কমপক্ষে 1.0%। কারণ অনেক স্থানীয় বরাদ্দ থাকতে পারে
পথ ধরে শিখর, এবং প্রত্যেকের জন্য একটি বিস্তারিত স্ন্যাপশট করা ব্যয়বহুল হবে
এবং অপব্যয়, কারণ তাদের মধ্যে একটি ছাড়া বাকি সব পরে ফেলে দেওয়া হবে। এই অশুদ্ধতা হতে পারে
এই বিকল্পের মাধ্যমে পরিবর্তিত হয়েছে (এমনকি 0.0% পর্যন্ত), কিন্তু ম্যাসিফের মতো অত্যন্ত ধীর গতিতে চলবে
সংখ্যা শূন্যের কাছাকাছি।
--সময়-ইউনিট= [ডিফল্ট: i]
প্রোফাইলিংয়ের জন্য ব্যবহৃত সময়ের একক। তিনটি সম্ভাবনা আছে: নির্দেশাবলী
মৃত্যুদন্ডপ্রাপ্ত (i), যা বেশিরভাগ ক্ষেত্রেই ভালো; বাস্তব (ওয়ালক্লক) সময় (এমএস, যেমন
মিলিসেকেন্ড), যা কখনও কখনও দরকারী; এবং স্তূপে বরাদ্দ/বরাদ্দ বাইট
এবং/অথবা স্ট্যাক (বি), যা খুবই স্বল্পমেয়াদী প্রোগ্রাম এবং পরীক্ষার জন্য উপযোগী
উদ্দেশ্য, কারণ এটি বিভিন্ন মেশিনে সবচেয়ে পুনরুৎপাদনযোগ্য।
--বিস্তারিত-ফ্রিকোয়= [ডিফল্ট: 10]
বিস্তারিত স্ন্যাপশটের ফ্রিকোয়েন্সি। সঙ্গে --বিস্তারিত-ফ্রিকোয়েন্স=1, প্রতিটি স্ন্যাপশট বিস্তারিত.
--max-snapshots= [ডিফল্ট: 100]
সর্বোচ্চ সংখ্যক স্ন্যাপশট রেকর্ড করা হয়েছে। N তে সেট করা থাকলে, খুব ছাড়া সব প্রোগ্রামের জন্য
স্বল্প-চলমান, স্ন্যাপশটের চূড়ান্ত সংখ্যা হবে N/2 এবং N-এর মধ্যে।
--massif-out-file= [ডিফল্ট: massif.out.%p]
ডিফল্ট আউটপুট ফাইলের পরিবর্তে ফাইলে প্রোফাইল ডেটা লিখুন,
massif.out . দ্য %p এবং %q প্রসেস আইডি এমবেড করতে ফরম্যাট স্পেসিফায়ার ব্যবহার করা যেতে পারে
এবং/অথবা নামের একটি এনভায়রনমেন্ট ভেরিয়েবলের বিষয়বস্তু, যেমনটি ক্ষেত্রে
মূল বিকল্প --লগ ফাইল.
এসজিচেক বিকল্প
বর্তমানে কোন SGCheck-নির্দিষ্ট কমান্ড-লাইন বিকল্প নেই।
বিবিভি বিকল্প
--bb-out-file= [ডিফল্ট: bb.out.%p]
এই বিকল্পটি মৌলিক ব্লক ভেক্টর ফাইলের নাম নির্বাচন করে। দ্য %p এবং %q বিন্যাস
প্রসেস আইডি এবং/অথবা পরিবেশের বিষয়বস্তু এমবেড করতে স্পেসিফায়ার ব্যবহার করা যেতে পারে
নাম পরিবর্তনশীল, যেমন মূল বিকল্পের ক্ষেত্রে --লগ ফাইল.
--pc-out-file= [ডিফল্ট: pc.out.%p]
এই বিকল্পটি পিসি ফাইলের নাম নির্বাচন করে। এই ফাইলে প্রোগ্রাম পাল্টা ঠিকানা আছে
এবং বিভিন্ন মৌলিক ব্লকের জন্য ফাংশন নামের তথ্য। এটি একযোগে ব্যবহার করা যেতে পারে
বেসিক ব্লক ভেক্টর ফাইলের সাথে ফাস্ট-ফরোয়ার্ড করার জন্য শুধুমাত্র ফাংশন নামের মাধ্যমে
নির্দেশ গণনা দ্য %p এবং %q ফর্ম্যাট স্পেসিফায়ারগুলি প্রক্রিয়াটি এম্বেড করতে ব্যবহার করা যেতে পারে
আইডি এবং/অথবা নামের একটি এনভায়রনমেন্ট ভেরিয়েবলের বিষয়বস্তু, যেমনটি ক্ষেত্রে
মূল বিকল্প --লগ ফাইল.
--interval-size= [ডিফল্ট: 100000000]
এই বিকল্পটি ব্যবহার করার জন্য ব্যবধানের আকার নির্বাচন করে। ডিফল্ট 100 মিলিয়ন
নির্দেশাবলী, যা একটি সাধারণভাবে ব্যবহৃত মান। অন্যান্য মাপ ব্যবহার করা যেতে পারে; ছোট
ব্যবধান সূক্ষ্ম দানাদার পর্যায়গুলির সাথে প্রোগ্রামগুলিকে সাহায্য করতে পারে। তবে ছোট ব্যবধানের আকার
ওয়ার্ম-আপ ইফেক্টের কারণে নির্ভুলতার সমস্যা হতে পারে (যখন দ্রুত-ফরওয়ার্ড করা হয় বিভিন্ন
স্থাপত্য বৈশিষ্ট্য আন-ইনিশিয়ালাইজ করা হবে, এবং এটি কিছু সংখ্যক লাগবে
নির্দেশনা আগে তারা "উষ্ণ আপ" রাষ্ট্র একটি সম্পূর্ণ সিমুলেশন এ ছাড়া হবে
দ্রুত ফরোয়ার্ডিং বড় ব্যবধানের মাপ এটিকে কমিয়ে দেয়।)
--ইনস্ট্র-কাউন্ট-শুধু [ডিফল্ট: না]
এই বিকল্পটি টুলটিকে শুধুমাত্র নির্দেশের মোট সংখ্যা প্রদর্শন করতে বলে এবং না বলে
প্রকৃত মৌলিক ব্লক ভেক্টর ফাইল তৈরি করুন। এটি ডিবাগিং এবং এর জন্য দরকারী
বড় বেসিক ব্লক ভেক্টর তৈরি না করেই নির্দেশনা গণনার তথ্য সংগ্রহ করা
ফাইল।
লাকি বিকল্প
--মৌলিক-গণনা= [ডিফল্ট: হ্যাঁ]
সক্রিয় করা হলে, Lackey নিম্নলিখিত পরিসংখ্যান এবং তথ্য মুদ্রণ করে
ক্লায়েন্ট প্রোগ্রামের সঞ্চালন:
1. দ্বারা নির্দিষ্ট ফাংশন কল সংখ্যা --fnname বিকল্প (ডিফল্ট
প্রধান)। যদি প্রোগ্রামটির প্রতীক ছিনিয়ে নেওয়া হয়, তাহলে গণনা সর্বদা হবে
শূন্য।
2. শর্তসাপেক্ষ শাখার সংখ্যা এবং এর সংখ্যা এবং অনুপাত
যারা নেওয়া হয়েছে।
3. প্রোগ্রাম দ্বারা প্রবেশ করা এবং সম্পন্ন করা সুপারব্লকের সংখ্যা। উল্লেখ্য যে কারণে
JIT দ্বারা করা অপ্টিমাইজেশন, এটি মোটেও সঠিক মান নয়।
4. অতিথির সংখ্যা (x86, amd64, ppc, ইত্যাদি) নির্দেশাবলী এবং IR বিবৃতি
নিষ্পন্ন. IR হল Valgrind এর RISC-এর মত মধ্যবর্তী উপস্থাপনা যার মাধ্যমে সব
ইন্সট্রুমেন্টেশন করা হয়।
5. এই কয়েকটি গণনার মধ্যে অনুপাত।
6. ক্লায়েন্ট প্রোগ্রামের প্রস্থান কোড।
--বিস্তারিত-গণনা= [ডিফল্ট: না]
সক্রিয় থাকা অবস্থায়, Lackey লোড, স্টোর এবং ALU গণনা সম্বলিত একটি টেবিল প্রিন্ট করে
অপারেশন, তাদের IR প্রকারের দ্বারা পৃথক করা হয়। IR প্রকারগুলি তাদের IR দ্বারা চিহ্নিত করা হয়
নাম ("I1", "I8", ... "I128", "F32", "F64", এবং "V128")।
--ট্রেস-মেম= [ডিফল্ট: না]
সক্রিয় করা হলে, Lackey প্রায় প্রতিটি মেমরি অ্যাক্সেসের আকার এবং ঠিকানা মুদ্রণ করে
কার্যক্রম. বিস্তারিত জানার জন্য lackey/lk_main.c ফাইলের শীর্ষে মন্তব্য দেখুন
আউটপুট বিন্যাস সম্পর্কে, এটি কীভাবে কাজ করে এবং ঠিকানা ট্রেসে ত্রুটিগুলি সম্পর্কে। বিঃদ্রঃ
যে এই বিকল্পটি প্রচুর পরিমাণে আউটপুট তৈরি করে।
--ট্রেস-সুপারব্লক= [ডিফল্ট: না]
সক্রিয় করা হলে, ল্যাকি প্রতিটি সুপারব্লকের ঠিকানা প্রিন্ট করে (একটি এন্ট্রি,
একাধিক প্রস্থান, কোডের রৈখিক অংশ) প্রোগ্রাম দ্বারা নির্বাহ করা হয়। এই প্রাথমিকভাবে হয়
Valgrind বিকাশকারীদের আগ্রহ। ফাইলের শীর্ষে মন্তব্য দেখুন
আউটপুট বিন্যাস সম্পর্কে বিস্তারিত জানার জন্য lackey/lk_main.c. মনে রাখবেন যে এই বিকল্পটি উত্পাদন করে
প্রচুর পরিমাণে আউটপুট।
--fnname= [ডিফল্ট: প্রধান]
যে ফাংশনটির জন্য কল গণনা করা হয় তা পরিবর্তন করে -- মৌলিক-গণনা = হ্যাঁ উল্লিখিত আছে.
onworks.net পরিষেবা ব্যবহার করে অনলাইনে valgrind.bin ব্যবহার করুন