.NET- এ সম্ভাব্য সদৃশ ডিবেগ ভিজ্যুয়াল স্টুডিও প্রকাশ
ভিজুয়াল স্টুডিওতে ডিবাগ এবং রিলিজের মধ্যে পার্থক্য কী?
.NET- এ সম্ভাব্য সদৃশ ডিবেগ ভিজ্যুয়াল স্টুডিও প্রকাশ
ভিজুয়াল স্টুডিওতে ডিবাগ এবং রিলিজের মধ্যে পার্থক্য কী?
উত্তর:
সর্বাধিক গুরুত্বপূর্ণ বিষয়টি হ'ল ডিবাগ মোডে কোনও অপ্টিমাইজেশন নেই, যখন রিলিজ মোডে অপ্টিমাইজেশন রয়েছে। এটি গুরুত্বপূর্ণ কারণ সংকলকটি অত্যন্ত উন্নত এবং আপনার কোডটির কিছুটা কৌতূহলপূর্ণ নিম্ন-স্তরের উন্নতি করতে পারে। ফলস্বরূপ আপনার কোডের কয়েকটি লাইন কোনও নির্দেশ ছাড়াই ছেড়ে চলে যেতে পারে, বা কিছু কিছু মিশ্রিত হতে পারে। ধাপে ধাপে ডিবাগ করা অসম্ভব। এছাড়াও, স্থানীয় ভেরিয়েবলগুলি প্রায়শই রহস্যজনক উপায়ে অনুকূলিত হয়, সুতরাং ঘড়ি এবং কুইকওয়াচগুলি প্রায়শই কাজ করে না কারণ ভেরিয়েবলটি "অপ্টিমাইজড দূরে" থাকে। এবং অন্যান্য অপ্টিমাইজেশানগুলিও বহুসংখ্যক রয়েছে। অপ্টিমাইজড .NET কোডটি কিছুক্ষণের জন্য ডিবাগ করার চেষ্টা করুন এবং আপনি দেখতে পাবেন।
আর একটি মূল পার্থক্য হ'ল এর কারণে ডিফল্ট প্রকাশের সেটিংসটি বিস্তৃত ডিবাগ প্রতীক তথ্য উত্পন্ন করতে বিরক্ত করে না। এটি আপনার .PDB ফাইলটি লক্ষ্য করে থাকতে পারে এবং এটি কোনও ডিবাগারকে এটি নির্ধারণ করতে দেয় যে কোন সমাবেশের নির্দেশাবলী কোন কোডের লাইন ইত্যাদিতে সংশ্লেষ করে etc.
"ডিবাগ" এবং "রিলিজ" হ'ল কেবলমাত্র দুটি লেবেল যা পুরো বিলম্বিত সেটিংসের জন্য যা আপনার বিল্ড এবং ডিবাগিংকে প্রভাবিত করতে পারে।
"ডিবাগ" মোডে আপনার সাধারণত নিম্নলিখিতগুলি থাকে:
"রিলিজ" মোডে অপ্টিমাইজেশনগুলি চালু করা হয় (যদিও সেখানে একাধিক বিকল্প উপলব্ধ রয়েছে) এবং _DEBUG প্রিপ্রসেসর সংজ্ঞাটি সংজ্ঞায়িত করা হয় না। সাধারণত আপনি যদিও পিডিবি ফাইলগুলি জেনারেট করতে চান তবে কারণ যখন জিনিসগুলি দ্রুত চলছে তখন রিলিজ মোডে "ডিবাগ" করতে সক্ষম হওয়াই এটি অত্যন্ত দরকারী।
বেশিরভাগ ক্ষেত্রে, ডিবাগ করার সময় ডিবাগটিতে প্রচুর অতিরিক্ত অতিরিক্ত তথ্য অন্তর্ভুক্ত থাকে। রিলিজ মোডে, এটি সমস্ত কাটা এবং পারফরম্যান্সের জন্য লেনদেন হয়।
আপনি যদি প্রকল্প সংকলনের বিকল্পগুলি দিয়ে যান এবং সেগুলি তুলনা করেন তবে আপনি কী পার্থক্য তা দেখতে পাবেন।
ধরে নেওয়া প্রশ্নটি দেশীয় / সি ++ কোড সম্পর্কে (এটি ফ্রেসিং থেকে সম্পূর্ণ পরিষ্কার নয়):
মূলত, ডিবাগ-এ সমস্ত কোড জেনারেশন অপ্টিমাইজেশন বন্ধ রয়েছে। কিছু গ্রন্থাগার (যেমন এসটিএল ) কঠোর ত্রুটি পরীক্ষার ডিফল্ট (উদাহরণস্বরূপ ডিবাগ পুনরাবৃত্তিকারী)। আরও ডিবাগিং তথ্য উত্পন্ন হয় (উদাহরণস্বরূপ "সম্পাদনা করুন এবং চালিয়ে যান")। ত্রুটিগুলি ধরার জন্য কোডে আরও জিনিস উত্পন্ন হয় (স্থানীয় ভেরিয়েবল মানগুলি একটি অবিশ্রুত প্যাটার্নে সেট করা হয়, এবং ডিবাগ হিপ ব্যবহৃত হয়)।
এছাড়াও, স্পষ্টতই, ডিবাগ মোড ডিবাগিংয়ে সহায়তা করতে প্রচুর অতিরিক্ত থ্রেড তৈরি করে। আপনি কোনও ডিবাগার সংযুক্ত করেন কিনা তা নির্বিশেষে এগুলি প্রক্রিয়াটির পুরো জীবন জুড়ে সক্রিয় থাকে। আমার সম্পর্কিত প্রশ্ন এখানে দেখুন ।
এটা সম্ভবত খুব সুস্পষ্ট কহতব্য, যে বিল্ড পতাকা বিভিন্ন যুক্তিবিজ্ঞান, যার জন্য অনুমতি দেয় উচিত শুধু পরিবর্তন লগিং এবং "কনসোল" মেসেজিং ব্যবহার করা যেতে, কিন্তু এটা করতে নির্যাতিত হবে এবং নাটকীয়ভাবে না শুধু কম মাত্রা, তবে প্রকৃত ব্যবসা লজিক পরিবর্তন করুন।
এছাড়াও লক্ষ করুন যে উদাহরণস্বরূপ, এমএফসি ব্যবহার করার সময় , ডিবাগ প্রকল্পগুলি পুনরায় বিতরণযোগ্য ডিএলএল সংস্করণের MFC90D.DLL
বিরুদ্ধে লিঙ্কগুলি লিঙ্ক তৈরি করে যেমন পুনরায় বিতরণযোগ্য সংস্করণগুলির মতো লিঙ্ক তৈরি করে MFC90.DLL
। এটি সম্ভবত অন্যান্য ফ্রেমওয়ার্কগুলির অনুরূপ।
অতএব আপনি সম্ভবত অ-বিকাশকারী মেশিনে ডিবাগ-বিল্ড অ্যাপ্লিকেশনগুলি চালাতে সক্ষম হবেন না।
আমি যখন বিদ্যমান রিলিজ বিল্ড কনফিগারেশন থেকে অনুলিপি করা একটি অ্যাপ্লিকেশন তৈরি করেছি তখন আমি এই প্রশ্নেও কৌতূহল পেয়েছি।
আমার এমন একটি বিকাশকারী রয়েছে যিনি সেই অ্যাপ্লিকেশনটি ডিবাগ মোডে ব্যবহার করতে আগ্রহী, তাই আমি ভাবলাম যে এই বিল্ড কনফিগারেশনটি রিলিজ কনফিগারেশন থেকে অনুলিপি করা রিলিজমাইবাইল্ডের নামের সাথে উপস্থিত রয়েছে (এবং এইভাবে অপটিমাইজেশন প্রকাশের জন্য সমস্ত সেটিংস থাকা উচিত) ) বিভ্রান্তিকর বিল্ড কনফিগারেশন নাম সত্ত্বেও হঠাৎ করে দল পরিবর্তন করতে এবং একটি ডিবাগ বিল্ডে পরিণত হয়।
আমি বুঝতে পেরেছিলাম যে প্রকল্পের কনফিগারেশনটি কেবল একটি নাম এবং "সেটিংসের সম্পূর্ণ পুরোপুরি" নির্বাচন করার সুবিধাজনক উপায় ছিল জরিস টিমারম্যানস উল্লেখ করেছেন। আমি জানতে চেয়েছিলাম যে সেগুলি সেগুলি কী হতে পারে যা "FOO" ফাংশন নামের একটি বিল্ড কনফিগারেশনটিকে একটি অনুকূলিতকরণ মুক্তির বিল্ড হিসাবে তৈরি করে of
এখানে এটির এক ঝলক। আমি ভিজ্যুয়াল স্টুডিও ২০১০ থেকে খালি প্রজেক্ট টেম্পলেট থেকে একটি নতুন ভিসিএক্সপ্রোজ তৈরি করেছি then আমি এটির অনুলিপি করে উভয় সম্পাদনা করেছি, প্রথমটি প্রথমটি ডিবাগের বিষয়বস্তু ধরে রাখা এবং দ্বিতীয়টি মুক্তির সামগ্রী। এখানে প্রাসঙ্গিক পার্থক্য কেন্দ্রিক পার্থক্য ...
মুক্তি
<PropertyGroup>
<WholeProgramOptimization>true</WholeProgramOptimization>
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
ডিবাগ
<PropertyGroup>
<UseDebugLibraries>true</UseDebugLibraries>`
<ClCompile>
<Optimization>Disabled</Optimization>
এটি আকর্ষণীয় যে লিঙ্ক বিভাগে তারা উভয়ই GenerateDebugInformation
সত্য হয়ে গেছে।
আপনি যে স্পষ্ট পার্থক্যটি দেখতে পাচ্ছেন তা হ'ল বাইনারি আকার। একটি ডিবাগ বিল্ড একটি রিলিজ বিল্ডের চেয়ে বড় বাইনারি তৈরি করে।
ডিবাগ-এ সংকলন করার সময়, প্রতীক টেবিলটি কোড ফাইলের সংকলিত অবজেক্টে যুক্ত করা হয় যা ডিবাগিং প্রোগ্রামগুলিকে এই বাইনারিগুলিতে ট্যাপ করতে দেয় এবং অবজেক্ট এবং ভেরিয়েবলের মান অ্যাক্সেস করতে পারে।
আর একটি পর্যবেক্ষণযোগ্য পার্থক্য হ'ল, রিলিজ মোডে, বাইনারিটি কেবল একটি মারাত্মক ত্রুটির উপর ক্র্যাশ হয়ে যায় ডিবাগ মোডে থাকা অবস্থায়, আপনি যদি ভিজ্যুয়াল স্টুডিওতে অ্যাপ্লিকেশনটি ডিবাগ করা শুরু করেন, আপনি কল স্ট্যাকটি পরীক্ষা করতে পারেন যা আপনাকে ভ্রান্ত বিবরণের সঠিক অবস্থানটি বলে দেয় check ।
সঠিক পার্থক্যগুলি কী তা আমি জানি না কারণ সেখানে সহজে কোনও তথ্য উপলব্ধ নেই।
তবে মূল পর্যবেক্ষণের পার্থক্যটি হ'ল রিলিজ সংস্করণটি কখনও কখনও ফলাফলের ডিএলএল ফাইলকে কলুষিত করে এবং এর ফলে আপনাকে অ্যাপ্লিকেশন, ওয়েব অ্যাপ্লিকেশন অকেজো করে দেয়।
দুঃখের বিষয়, আপনাকে উত্পাদনতে ডিবাগ বিল্ড লাগাতে হবে। এবং হ্যাঁ, প্রকাশের জন্য আপনাকে ভাল পুরানো এফটিপি ব্যবহার করতে হবে।