.pdb
রিলিজে সংকলন করার সময় কেন ভিজুয়াল স্টুডিও 2005 ফাইলগুলি তৈরি করে ? আমি একটি রিলিজ বিল্ড ডিবাগ করব না, তবে এগুলি কেন উত্পন্ন হয়?
.pdb
রিলিজে সংকলন করার সময় কেন ভিজুয়াল স্টুডিও 2005 ফাইলগুলি তৈরি করে ? আমি একটি রিলিজ বিল্ড ডিবাগ করব না, তবে এগুলি কেন উত্পন্ন হয়?
উত্তর:
কারণ পিডিবি ফাইলগুলি না থাকলে অ্যাড্রেস-লেভেল ডিবাগিং ব্যতীত অন্য কোনও "রিলিজ" বিল্ড ডিবাগ করা অসম্ভব। অপ্টিমাইজেশানগুলি সত্যই আপনার কোডটিতে একটি সংখ্যা করে, কিছু ভুল হয়ে গেলে অপরাধীকে খুঁজে পাওয়া খুব কঠিন করে তোলে (বলুন, একটি ব্যতিক্রম ছুঁড়ে দেওয়া হয়েছে)। এমনকি ব্রেকপয়েন্টগুলি সেট করাও অত্যন্ত কঠিন, কারণ উত্সাহিত সমাবেশ কোডের সাথে (অথবা এমনকি একই ক্রমেও) উত্স কোডের লাইনগুলি একের সাথে মিলে যায় না। পিডিবি ফাইলগুলি আপনাকে এবং ডিবাগারটিকে আউট করতে সহায়তা করে, ময়না তদন্ত ডিবাগিংকে উল্লেখযোগ্যভাবে সহজ করে তুলেছে।
আপনি এই বিষয়টি উল্লেখ করেছেন যে আপনার সফ্টওয়্যারটি যদি মুক্তির জন্য প্রস্তুত থাকে তবে ততক্ষণে আপনার সমস্ত ডিবাগিং করা উচিত ছিল। যদিও এটি অবশ্যই সত্য, মনে রাখার জন্য কয়েকটি গুরুত্বপূর্ণ বিষয় রয়েছে:
আপনি উচিত এছাড়াও পরীক্ষা এবং আপনার অ্যাপ্লিকেশন (আগে আপনি এটা মুক্তি) "রিলিজ" বিল্ড ব্যবহার ডিবাগ। এর কারণ অপ্টিমাইজেশানগুলি চালু করা ("ডিবাগ" কনফিগারেশনের অধীনে এগুলি ডিফল্টরূপে অক্ষম করা হয়) কখনও কখনও সূক্ষ্ম বাগগুলি দেখা দেয় যে আপনি অন্যথায় ধরেন না। আপনি যখন এই ডিবাগিংটি করছেন, আপনি PDB প্রতীকগুলি চাইবেন।
গ্রাহকরা প্রায়শই প্রান্তের কেসগুলি এবং বাগগুলি প্রতিবেদন করেন যা কেবলমাত্র "আদর্শ" শর্তে ক্রপ হয়। এগুলি এমন জিনিস যা ল্যাবগুলিতে পুনরুত্পাদন করা প্রায় অসম্ভব কারণ তারা ব্যবহারকারীর মেশিনটির কিছু অস্পষ্ট কনফিগারেশনের উপর নির্ভর করে। যদি তারা বিশেষভাবে সহায়ক গ্রাহক হয় তবে তারা ফেলে দেওয়া ব্যতিক্রমের প্রতিবেদন করবে এবং আপনাকে স্ট্যাক ট্রেস সরবরাহ করবে। অথবা তারা আপনাকে আপনার সফ্টওয়্যারটিকে দূর থেকে ডিবাগ করার জন্য তাদের মেশিনটি ধার নিতে দেয়। এই দুটি ক্ষেত্রেই, আপনি পিডিবি ফাইলগুলি আপনাকে সহায়তা করার জন্য চাইবেন।
প্রোফাইলিং সর্বদা "রিলিজ" বিল্ডগুলিতে অপ্টিমাইজেশান সক্ষম সহ করা উচিত। এবং আবারও, পিডিবি ফাইলগুলি কাজে আসে, কারণ তারা আপনার নির্দেশিত উত্স কোডটিতে সমাবেশের নির্দেশাবলী ম্যাপ করার অনুমতি দেয়।
সংকলনের পরে আপনি পিডিবি ফাইলগুলি আর জেনারেট করতে পারবেন না । * আপনি যদি বিল্ড করার সময় এগুলি তৈরি না করেন তবে আপনি আপনার সুযোগটি হারিয়েছেন। এগুলি তৈরি করতে কোনও ক্ষতি করে না। আপনি যদি সেগুলি বিতরণ করতে না চান তবে আপনি কেবল তাদের বাইনারিগুলি থেকে বাদ দিতে পারেন। তবে আপনি যদি পরে সিদ্ধান্ত নেন তবে সেগুলি চান, আপনার ভাগ্যের বাইরে। সর্বদা এগুলি উত্পন্ন করা এবং একটি অনুলিপি সংরক্ষণ করা ভাল, যদি আপনার কখনও তাদের প্রয়োজন হয়।
আপনি যদি সত্যিই সেগুলি বন্ধ করতে চান তবে এটি সর্বদা একটি বিকল্প। আপনার প্রকল্পের প্রোপার্টি উইন্ডোতে, আপনি যে কোনও কনফিগারেশন পরিবর্তন করতে চান তার জন্য "ডিবাগ তথ্য" বিকল্পটি "কিছুই নয়" তে সেট করুন।
নোট, না, তবে যে, "ডিবাগ" এবং "রিলিজ" কনফিগারেশন কি ডিবাগ তথ্য emitting জন্য ডিফল্ট ব্যবহার বিভিন্ন সেটিংস দ্বারা। আপনি এই সেটিংটি রাখতে চাইবেন। "ডিবাগ তথ্য" বিকল্পটি একটি ডিবাগ বিল্ডের জন্য "পূর্ণ" সেট করা হয়েছে, যার অর্থ একটি পিডিবি ফাইল ছাড়াও, ডিবাগিং প্রতীক তথ্য সমাবেশে এম্বেড করা আছে। আপনি এমন চিহ্ন পাবেন যা সম্পাদনা এবং চালিয়ে যাওয়ার মতো দুর্দান্ত বৈশিষ্ট্যগুলিকে সমর্থন করে। রিলিজ মোডে, "পিডিবি-কেবল" বিকল্পটি নির্বাচন করা হয়েছে, এটি যেমন শোনাচ্ছে তেমন কেবল পিডিবি ফাইল অন্তর্ভুক্ত নয়, এটি সমাবেশের সামগ্রীকে প্রভাবিত না করে। সুতরাং এটি আপনার /bin
ডিরেক্টরিতে পিডিবি ফাইলগুলির উপস্থিতি বা অনুপস্থিতির মতো এত সহজ নয় । তবে ধরে নিচ্ছি যে আপনি "পিডিবি-কেবল" বিকল্পটি ব্যবহার করছেন, পিডিবি ফাইল '
* যেহেতু মার্ক শেরম্যান একটি মন্তব্যে উল্লেখ করেছেন , যতক্ষণ না আপনার উত্স কোডটি পরিবর্তিত হয়নি (বা আপনি কোনও সংস্করণ-নিয়ন্ত্রণ সিস্টেম থেকে মূল কোডটি পুনরুদ্ধার করতে পারেন), আপনি এটি পুনর্নির্মাণ করতে এবং একটি মিলে যাওয়া পিডিবি ফাইল তৈরি করতে পারেন। কমপক্ষে, সাধারণত এটি বেশিরভাগ সময় ভালভাবে কাজ করে তবে প্রতিটি বার একই কোডটি সংকলন করার সময় সংকলকটি অভিন্ন বাইনারি তৈরির গ্যারান্টিযুক্ত নয় , সুতরাং সূক্ষ্ম পার্থক্য থাকতে পারে। সবচেয়ে খারাপ, যদি আপনি ইতিমধ্যে আপনার সরঞ্জামচেইনে কোনও আপগ্রেড করেছেন (যেমন ভিজ্যুয়াল স্টুডিওর জন্য কোনও সার্ভিস প্যাক প্রয়োগ করার মতো), পিডিবিগুলির মিলের সম্ভাবনাও কম। প্রাক্তন পোস্টফ্যাক্টোর নির্ভরযোগ্য প্রজন্মের গ্যারান্টি দেওয়াপিডিবি ফাইলগুলি, আপনাকে কেবল আপনার সংস্করণ-নিয়ন্ত্রণ সিস্টেমে উত্স কোডটিই নয়, আপনার সম্পূর্ণ বিল্ড টুলচেইনের বাইনারিগুলি নিশ্চিত করতে হবে যাতে আপনি অবশ্যই আপনার বিল্ড পরিবেশের কনফিগারেশনটি পুনরায় তৈরি করতে পারবেন। এটি পিডিবি ফাইলগুলি তৈরি করা এবং সংরক্ষণাগারভুক্ত করা অনেক সহজ is
.reload /i foo.dll
। এটি foo.pdb লোড করবে এমনকি foo.pdb foo.dll প্রকাশের পরে তৈরি করা হয়েছিল।
PDB Release
পাশাপাশি উত্পন্ন করা যেতে পারে Debug
। এটি সেট করা হয়েছে (ভিএস2010 এ তবে ভিএস ২০০৫ এ অবশ্যই একই রকম হবে):
প্রকল্প → বৈশিষ্ট্য → বিল্ড → উন্নত → ডিবাগ তথ্য
কেবল এটিতে পরিবর্তন করুন None
।
FileNotFoundException
), কিন্তু আপনি একটি স্ট্যাক ট্রেস দেখতে সক্ষম হবেন না। এটি কোন কোডের লাইনটি ব্যতিক্রমটি ছুঁড়ে ফেলার কারণে ঠিক তা পিন করা খুব কঠিন করে তোলে ।
.Pdb ফাইল ছাড়া এটি উত্পাদন কোডের মাধ্যমে পদক্ষেপে কার্যত অসম্পূর্ণ; আপনাকে অন্যান্য সরঞ্জামগুলির উপর নির্ভর করতে হবে যা ব্যয়বহুল এবং সময় সাপেক্ষ হতে পারে। আমি বুঝতে পারি আপনি উদাহরণস্বরূপ ট্রেসিং বা উইন্ডবিজি ব্যবহার করতে পারেন তবে এটি আপনি কী অর্জন করতে চান তার উপর নির্ভর করে। নির্দিষ্ট পরিস্থিতিতে আপনি নির্দিষ্ট আচরণ পর্যবেক্ষণ করতে উত্পাদন ডেটা ব্যবহার করে কেবল রিমোট কোড (কোনও ত্রুটি বা ব্যতিক্রম নয়) দিয়ে পদক্ষেপ নিতে চান এবং এখানেই .pdb ফাইলগুলি কাজে আসে। তাদের ছাড়া সেই কোডটিতে ডিবাগারটি চালানো অসম্ভব।
আপনি কেন এতটা নিশ্চিত যে আপনি রিলিজ বিল্ডগুলি ডিবাগ করবেন না? কখনও কখনও (আশা করি খুব কমই ঘটে তবে ঘটে) আপনি কোনও গ্রাহকের কাছ থেকে কোনও ত্রুটি প্রতিবেদন পেতে পারেন যা কোনও কারণে ডিবাগ সংস্করণে পুনরুত্পাদনযোগ্য নয় (বিভিন্ন সময়, ছোট বিভিন্ন আচরণ বা যাই হোক না কেন)। যদি সমস্যাটি রিলিজ বিল্ডে পুনরায় উত্পাদনযোগ্য বলে মনে হয় আপনি মিলে যাওয়া পিডিবি পেয়ে খুশি হবেন।
এছাড়াও, আপনি আপনার সফ্টওয়্যারটি ডিবাগ করতে ক্র্যাশ ডাম্পগুলি ব্যবহার করতে পারেন। গ্রাহক এটিকে আপনার কাছে প্রেরণ করে এবং তারপরে আপনি এটি আপনার উত্সের সঠিক সংস্করণ সনাক্ত করতে ব্যবহার করতে পারেন - এবং ভিজ্যুয়াল স্টুডিও এমনকি ক্র্যাশ ডাম্পটি ব্যবহার করে ডিবাগিং প্রতীকগুলির সঠিক সেটটি (এবং উত্সটি যদি আপনি সঠিকভাবে সেট আপ করেন) টানবেন। সিম্বল স্টোরগুলিতে মাইক্রোসফ্টের ডকুমেন্টেশন দেখুন ।
.PDB ফাইল হ'ল "প্রোগ্রাম ডেটাবেস" এর সংক্ষিপ্ত নাম। এটিতে ডিবাগার এবং সংস্থানসমূহ যা ব্যবহার বা রেফারেন্সের জন্য ডিবাগ পয়েন্ট সম্পর্কিত তথ্য রয়েছে। এটি তৈরি করা হয় যখন আমরা ডিবাগ মোড হিসাবে তৈরি করি। এটি রানটাইমে অ্যাপ্লিকেশনটিকে ডিবাগ করার অনুমতি দেয়।
আকারটি ডিবাগ মোডে .PDB ফাইলের বৃদ্ধি। যখন আমরা আমাদের অ্যাপ্লিকেশনটি পরীক্ষা করি তখন এটি ব্যবহৃত হয়।
পিডিবি ফাইলের ভাল নিবন্ধ।
http://www.codeproject.com/Articles/37456/How-To-Inspect-the-Content-of-a-Program-Database-P
একটি বহু-প্রকল্প সমাধানে, আপনি সাধারণত এমন একটি কনফিগারেশন রাখতে চান যা কোনও PDB বা এক্সএমএল ফাইল তৈরি করে না। Debug Info
প্রতিটি প্রকল্পের সম্পত্তি পরিবর্তন করার পরিবর্তে none
, আমি ভেবেছিলাম যে একটি বিল্ড-পরবর্তী ইভেন্ট যুক্ত করা আরও সমীচীন হবে যা কেবলমাত্র একটি নির্দিষ্ট কনফিগারেশনে কাজ করে।
দুর্ভাগ্যক্রমে, ভিজ্যুয়াল স্টুডিও আপনাকে বিভিন্ন কনফিগারেশনের জন্য পোস্ট-বিল্ড ইভেন্টগুলি নির্দিষ্ট করার অনুমতি দেয় না। সুতরাং আমি csproj
স্টার্টআপ প্রকল্পের ফাইল সম্পাদনা করে এবং নিম্নলিখিতগুলি (কোনও বিদ্যমান PostBuildEvent
ট্যাগের পরিবর্তে ) যুক্ত করে নিজেই এটি করার সিদ্ধান্ত নিয়েছি :
<PropertyGroup Condition="'$(Configuration)' == 'Publish'">
<PostBuildEvent>
del *.pdb
del *.xml
</PostBuildEvent>
</PropertyGroup>
দুর্ভাগ্যক্রমে, এটি পোস্ট তৈরির ইভেন্ট পাঠ্যবাক্সকে ফাঁকা করে দেবে এবং এতে কোনও কিছু রাখলে অনাকাঙ্ক্ষিত ফলাফল হতে পারে।
*.xml
ফাইল মুছে ফেলবে , এর সাথে সাবধানতা অবলম্বন করুন।
ডিবাগ প্রতীক ( .pdb) এবং এক্সএমএল ডক ( .xML) ফাইলগুলি মোট আকারের একটি বিশাল শতাংশ তৈরি করে এবং নিয়মিত স্থাপনার প্যাকেজের অংশ হওয়া উচিত নয়। তবে প্রয়োজনে তাদের অ্যাক্সেস করা উচিত possible
একটি সম্ভাব্য পন্থা: টিএফএস বিল্ড প্রক্রিয়া শেষে, তাদের একটি পৃথক নিদর্শনগুলিতে সরিয়ে দিন।
আসলে পিডিবি ফাইল এবং প্রতীকী তথ্য না থাকলে তাদের কাছে একটি সফল ক্র্যাশ রিপোর্ট (মেমরি ডাম্প ফাইল) তৈরি করা অসম্ভব এবং মাইক্রোসফ্টের সমস্যার কারণ কী তা নিয়ে সম্পূর্ণ চিত্র থাকবে না।
এবং তাই পিডিবি থাকা ক্র্যাশ রিপোর্টিংয়ের উন্নতি করে।