ভিজুয়াল স্টুডিওতে ডিবাগ এবং রিলিজের মধ্যে পার্থক্য কী?


উত্তর:


114

সর্বাধিক গুরুত্বপূর্ণ বিষয়টি হ'ল ডিবাগ মোডে কোনও অপ্টিমাইজেশন নেই, যখন রিলিজ মোডে অপ্টিমাইজেশন রয়েছে। এটি গুরুত্বপূর্ণ কারণ সংকলকটি অত্যন্ত উন্নত এবং আপনার কোডটির কিছুটা কৌতূহলপূর্ণ নিম্ন-স্তরের উন্নতি করতে পারে। ফলস্বরূপ আপনার কোডের কয়েকটি লাইন কোনও নির্দেশ ছাড়াই ছেড়ে চলে যেতে পারে, বা কিছু কিছু মিশ্রিত হতে পারে। ধাপে ধাপে ডিবাগ করা অসম্ভব। এছাড়াও, স্থানীয় ভেরিয়েবলগুলি প্রায়শই রহস্যজনক উপায়ে অনুকূলিত হয়, সুতরাং ঘড়ি এবং কুইকওয়াচগুলি প্রায়শই কাজ করে না কারণ ভেরিয়েবলটি "অপ্টিমাইজড দূরে" থাকে। এবং অন্যান্য অপ্টিমাইজেশানগুলিও বহুসংখ্যক রয়েছে। অপ্টিমাইজড .NET কোডটি কিছুক্ষণের জন্য ডিবাগ করার চেষ্টা করুন এবং আপনি দেখতে পাবেন।

আর একটি মূল পার্থক্য হ'ল এর কারণে ডিফল্ট প্রকাশের সেটিংসটি বিস্তৃত ডিবাগ প্রতীক তথ্য উত্পন্ন করতে বিরক্ত করে না। এটি আপনার .PDB ফাইলটি লক্ষ্য করে থাকতে পারে এবং এটি কোনও ডিবাগারকে এটি নির্ধারণ করতে দেয় যে কোন সমাবেশের নির্দেশাবলী কোন কোডের লাইন ইত্যাদিতে সংশ্লেষ করে etc.


1
"ফলস্বরূপ আপনার কোডের কয়েকটি লাইন কোনও নির্দেশ ছাড়াই ছেড়ে চলে যেতে পারে, বা কিছু কিছু মিশ্রিত হতে পারে"। ইউইউপি, বর্তমান পদ্ধতি / সম্পত্তির নাম পেতে স্ট্যাক ফ্রেম ব্যবহার করে এই বিষয়ে
অবাক হয়েছে

4
"সর্বাধিক গুরুত্বপূর্ণ বিষয়টি হ'ল ডিবাগ মোডে কোনও অপ্টিমাইজেশন নেই" - এটি তর্কযোগ্য। সর্বাধিক গুরুত্বপূর্ণ বিষয়টি হ'ল এখানে ডিবাগ তথ্য যা আপনাকে ডিবাগ করার অনুমতি দেয়। যদিও এটি মুক্তির পাশাপাশিও থাকতে পারে।
shoosh

আমি জানি না কোনটি ডিফল্ট মোড (ডিবাগ / প্রকাশ)। সাধারণত আমার অভিজ্ঞতায় সমস্ত প্রকল্পগুলি ডিবাগ মোডে থাকে এবং পিডিবি ফাইল এড়াতে এবং অপ্টিমাইজেশন প্রবর্তনের জন্য ইনস্টলার টিম এই রিলিজটির যত্ন নেবে। তবে আজ আমি এমন একটি পরিস্থিতি পেরিয়ে এসেছি যে মোডটি রিলিজ করতে পরিবর্তিত হয়েছে এবং ব্রেক ব্রেক পয়েন্ট ব্যবহার করে আমি কোডটি ভাঙ্গতে পারছি না। আমি অনেক কিছু করে দীর্ঘ 1 ঘন্টা চেষ্টা করেছি এবং অবশেষে আমি লক্ষ্য করেছি যে এটি বর্তমান সংকলনের মোডের কারণে হয়েছে। @ ভ্লিক্স- আপনার উত্তরের জন্য ধন্যবাদ
kbvishnu

1
ডিফল্ট রিলিজ কনফিগারেশন মেনে অ্যাপ্লিকেশনটি ডিবাগ করার সময় তাত্ক্ষণিক উইন্ডোর মধ্যে একটি প্রতীক বিশ্লেষণ করার চেষ্টা করার সময় আমি যে সমস্যার মুখোমুখি হয়েছিলাম তা বর্তমান প্রসঙ্গে "ভেরিয়েবল 'বিদ্যমান নয়" সমাধান করতে আমাকে সাহায্য করেছিল। অনেক ধন্যবাদ!
এম 463

1) নিম্নলিখিত বিষয়গুলি সম্পর্কে কী? একটি এএসপি.নেট এমভিসি প্রকল্পে 3 টি কনফিগার রয়েছে: বেস (ওয়েব), ডিবাগ (ওয়েব.দেবগ), রিলিজ (ওয়েব.রিলিজ)। ধরে নিন আমরা সংশ্লিষ্ট কনফিগারেশনে রূপান্তর করে ডিবাগ এবং রিলিজ সংযোগের স্ট্রিং সেট করেছি (ডিবাগ এবং প্রকাশ)। প্রকাশের সময়, আমরা প্রকাশিত সংলাপে আমাদের নির্বাচন অনুযায়ী প্রকাশ করতে পারি। তবে, অ্যাপ্লিকেশন চলাকালীন, আমি ডিবাগ নির্বাচন করা সত্ত্বেও, এটি রিলিজ কনফিগারেশন ব্যবহার করে (বেস এবং ডিবাগ কনফিগারেশনে আমি ডিবাগ কনফিগার সেট করি) তা কি স্বাভাবিক?
জেসন

52

"ডিবাগ" এবং "রিলিজ" হ'ল কেবলমাত্র দুটি লেবেল যা পুরো বিলম্বিত সেটিংসের জন্য যা আপনার বিল্ড এবং ডিবাগিংকে প্রভাবিত করতে পারে।

"ডিবাগ" মোডে আপনার সাধারণত নিম্নলিখিতগুলি থাকে:

  • প্রোগ্রাম ডিবাগ ডাটাবেস ফাইল, যা আপনাকে রান-সময় চলাকালীন উত্সটিতে প্রোগ্রামটির সম্পাদনকে খুব কাছ থেকে অনুসরণ করতে দেয়।
  • সমস্ত অপ্টিমাইজেশন বন্ধ হয়ে গেছে, যা আপনাকে ভেরিয়েবলের মানটি পরীক্ষা করতে এবং ফাংশনগুলিতে ট্রেস করার অনুমতি দেয় যা অন্যথায় অপ্টিমাইজড বা ইন-লাইনেড থাকতে পারে
  • একটি _DEBUG প্রিপ্রসেসর সংজ্ঞা যা আপনাকে কোডটি লেখার অনুমতি দেয় যা রিলিজের তুলনায় ডিবাগ মোডে আলাদাভাবে কাজ করে, উদাহরণস্বরূপ যন্ত্রের এসএসআরটিগুলিতে যা কেবলমাত্র ডিবাগ করার সময় ব্যবহার করা উচিত
  • ডিবাগিং বিকল্পগুলির সাথে সংকলিত লাইব্রেরিগুলির সাথে সংযোগ স্থাপন করা হয়, যা সাধারণত প্রকৃত গ্রাহকদের কাছে স্থাপন করা হয় না (আকার এবং সুরক্ষার কারণে)

"রিলিজ" মোডে অপ্টিমাইজেশনগুলি চালু করা হয় (যদিও সেখানে একাধিক বিকল্প উপলব্ধ রয়েছে) এবং _DEBUG প্রিপ্রসেসর সংজ্ঞাটি সংজ্ঞায়িত করা হয় না। সাধারণত আপনি যদিও পিডিবি ফাইলগুলি জেনারেট করতে চান তবে কারণ যখন জিনিসগুলি দ্রুত চলছে তখন রিলিজ মোডে "ডিবাগ" করতে সক্ষম হওয়াই এটি অত্যন্ত দরকারী।


5
"মাত্র দুটি লেবেল" - বাস্তবে, ভিজ্যুয়াল স্টুডিও আপনাকে আরও তৈরি করার ক্ষমতা দেয় ! প্রোগ্রাম পরীক্ষা করার সময় এটি ব্যতিক্রমীভাবে কার্যকর হতে পারে। উদাহরণস্বরূপ, আমি সম্প্রতি আমার কাজের জন্য একটি প্রোগ্রাম লিখেছি যা কমান্ড-লাইন থেকে ফাইলের নাম গ্রহণ করেছে। আমি আমার কমান্ড-লাইন পার্সিং পরীক্ষা করেছি, তবে একবার এটি হয়ে গেলে, আমি প্রতিদিন সিএমডি এবং ফাইলের তালিকাগুলির সাথে গোলযোগ করতে চাইনি; আমি একটি কনফিগারেশন তৈরি করেছি যা আমি ডামি কমান্ড-লাইনের মান সরবরাহ করতে এবং প্রোগ্রামটির ব্যবসায়ের যুক্তি পরীক্ষা করতে শর্তসাপেক্ষ সংকলনটি ব্যবহার করতে পারি, যা প্রোগ্রামের বিকাশে আমাকে আরও দ্রুত পুনরাবৃত্তি চক্র দেয়।
ব্রায়ান এস

9

বেশিরভাগ ক্ষেত্রে, ডিবাগ করার সময় ডিবাগটিতে প্রচুর অতিরিক্ত অতিরিক্ত তথ্য অন্তর্ভুক্ত থাকে। রিলিজ মোডে, এটি সমস্ত কাটা এবং পারফরম্যান্সের জন্য লেনদেন হয়।


1) নিম্নলিখিত বিষয়গুলি সম্পর্কে কী? একটি এএসপি.নেট এমভিসি প্রকল্পে 3 টি কনফিগার রয়েছে: বেস (ওয়েব), ডিবাগ (ওয়েব.দেবগ), রিলিজ (ওয়েব.রিলিজ)। ধরে নিন আমরা সংশ্লিষ্ট কনফিগারেশনে রূপান্তর করে ডিবাগ এবং রিলিজ সংযোগের স্ট্রিং সেট করেছি (ডিবাগ এবং প্রকাশ)। প্রকাশের সময়, আমরা প্রকাশিত সংলাপে আমাদের নির্বাচন অনুযায়ী প্রকাশ করতে পারি। তবে, অ্যাপ্লিকেশন চলাকালীন, আমি ডিবাগ নির্বাচন করা সত্ত্বেও, এটি রিলিজ কনফিগারেশন ব্যবহার করে (বেস এবং ডিবাগ কনফিগারেশনে আমি ডিবাগ কনফিগার সেট করি) তা কি স্বাভাবিক?
জেসন

2) অ্যাপ্লিকেশনটি ডিবাগ বা রিলিজ মোডে চলাকালীন, ভিএস কি বেস ওয়েব কনফিগারেশন বা সম্পর্কিত ওয়েব কনফিগারেশন (ওয়েব.দেবগ.কনফগ বা ওয়েব.রেলিজ.কনফিগ) ব্যবহার করে?
জেসন

7

আপনি যদি প্রকল্প সংকলনের বিকল্পগুলি দিয়ে যান এবং সেগুলি তুলনা করেন তবে আপনি কী পার্থক্য তা দেখতে পাবেন।

ধরে নেওয়া প্রশ্নটি দেশীয় / সি ++ কোড সম্পর্কে (এটি ফ্রেসিং থেকে সম্পূর্ণ পরিষ্কার নয়):

মূলত, ডিবাগ-এ সমস্ত কোড জেনারেশন অপ্টিমাইজেশন বন্ধ রয়েছে। কিছু গ্রন্থাগার (যেমন এসটিএল ) কঠোর ত্রুটি পরীক্ষার ডিফল্ট (উদাহরণস্বরূপ ডিবাগ পুনরাবৃত্তিকারী)। আরও ডিবাগিং তথ্য উত্পন্ন হয় (উদাহরণস্বরূপ "সম্পাদনা করুন এবং চালিয়ে যান")। ত্রুটিগুলি ধরার জন্য কোডে আরও জিনিস উত্পন্ন হয় (স্থানীয় ভেরিয়েবল মানগুলি একটি অবিশ্রুত প্যাটার্নে সেট করা হয়, এবং ডিবাগ হিপ ব্যবহৃত হয়)।


2
@ ভিলাক্স: যখন আমি উত্তর দিয়েছি, এখনও। নেট ট্যাগ নেই, কেবল ভিজ্যুয়ালস্টুডিও। সুতরাং আমি ধরে নিয়েছি এটি সি ++।
নয়ারাজ

6

এছাড়াও, স্পষ্টতই, ডিবাগ মোড ডিবাগিংয়ে সহায়তা করতে প্রচুর অতিরিক্ত থ্রেড তৈরি করে। আপনি কোনও ডিবাগার সংযুক্ত করেন কিনা তা নির্বিশেষে এগুলি প্রক্রিয়াটির পুরো জীবন জুড়ে সক্রিয় থাকে। আমার সম্পর্কিত প্রশ্ন এখানে দেখুন


তবে কেবল নেট নেট (সি ++ নয়) এর জন্য?
পিটার মর্টেনসেন

6

এটা সম্ভবত খুব সুস্পষ্ট কহতব্য, যে বিল্ড পতাকা বিভিন্ন যুক্তিবিজ্ঞান, যার জন্য অনুমতি দেয় উচিত শুধু পরিবর্তন লগিং এবং "কনসোল" মেসেজিং ব্যবহার করা যেতে, কিন্তু এটা করতে নির্যাতিত হবে এবং নাটকীয়ভাবে না শুধু কম মাত্রা, তবে প্রকৃত ব্যবসা লজিক পরিবর্তন করুন।


"... নাটকীয়ভাবে পরিবর্তন ... আসল ব্যবসায়ের যুক্তি" - আমার কাছে ত্রুটির মতো শোনাচ্ছে! আমাদের কাছে প্রচুর শর্তাধীন কোড রয়েছে এবং এটি বোঝা সত্যিই কঠিন করে তোলে। এছাড়াও, শর্তাধীন কোড পতাকাগুলির প্রতিটি সংমিশ্রণটি আপনার সফ্টওয়্যারটির মূলত আলাদা সংস্করণ যা সঠিকতা এবং মৌলিক সততা নিশ্চিত করার জন্য পরীক্ষা করা উচিত। সফ্টওয়্যার নির্মাণের আমার বাইবেল "কোড কমপ্লিট" অনুসারে, আমাদের "প্রাইম ডাইরেক্টিভ" জটিলতার পরিচালনা। (সমাধান করার জন্য এটি আমাদের # 1 সমস্যা)) নির্বিচারে আরও শর্তাধীন পতাকা যুক্ত করার আগে দীর্ঘ এবং কঠোর চিন্তা করুন!
মাইক্রোসার্ভেসিঅনডিডিডি

আমার উপরের মন্তব্যটি এই উত্তরটির লক্ষ্য ছিল না বিশেষত শেষ বাক্যটি যেমন ছিল ... এটি কেবলমাত্র একটি অতিরিক্ত বিষয় ছিল যা আমি ভেবেছিলাম যে এখানে আসা পাঠকদের পড়া উচিত।
মাইক্রোসার্ভেসিঅনডিডিডি

6

এছাড়াও লক্ষ করুন যে উদাহরণস্বরূপ, এমএফসি ব্যবহার করার সময় , ডিবাগ প্রকল্পগুলি পুনরায় বিতরণযোগ্য ডিএলএল সংস্করণের MFC90D.DLLবিরুদ্ধে লিঙ্কগুলি লিঙ্ক তৈরি করে যেমন পুনরায় বিতরণযোগ্য সংস্করণগুলির মতো লিঙ্ক তৈরি করে MFC90.DLL। এটি সম্ভবত অন্যান্য ফ্রেমওয়ার্কগুলির অনুরূপ।

অতএব আপনি সম্ভবত অ-বিকাশকারী মেশিনে ডিবাগ-বিল্ড অ্যাপ্লিকেশনগুলি চালাতে সক্ষম হবেন না।


খুবই সত্য. ক্লায়েন্টে থাকার সময় এটি একবারে দৌড়ে গেল। আমার মেশিনে (টিএম) কাজ করে।
ম্যাট জ্যাকবসন

আপনি এগুলি বিতরণ করতে পারবেন .. (আপনাকে অনুমতি দেওয়া হয়েছে কিনা তা জানেন না)। এগুলি আপনার আবেদনের পর্যাপ্তরূপে সাবফোল্ডারে থাকতে হবে।
আন্দ্রেয়াস রেফ

@ অ্যান্ড্রেয়াস আমার উদাহরণ সম্পর্কে, "পুনরায় বিতরণযোগ্য" এর অর্থ হ'ল মাইক্রোসফ্ট তাদের বিতরণ করতে দেয় না ।
18:55

4

আমি যখন বিদ্যমান রিলিজ বিল্ড কনফিগারেশন থেকে অনুলিপি করা একটি অ্যাপ্লিকেশন তৈরি করেছি তখন আমি এই প্রশ্নেও কৌতূহল পেয়েছি।

আমার এমন একটি বিকাশকারী রয়েছে যিনি সেই অ্যাপ্লিকেশনটি ডিবাগ মোডে ব্যবহার করতে আগ্রহী, তাই আমি ভাবলাম যে এই বিল্ড কনফিগারেশনটি রিলিজ কনফিগারেশন থেকে অনুলিপি করা রিলিজমাইবাইল্ডের নামের সাথে উপস্থিত রয়েছে (এবং এইভাবে অপটিমাইজেশন প্রকাশের জন্য সমস্ত সেটিংস থাকা উচিত) ) বিভ্রান্তিকর বিল্ড কনফিগারেশন নাম সত্ত্বেও হঠাৎ করে দল পরিবর্তন করতে এবং একটি ডিবাগ বিল্ডে পরিণত হয়।

আমি বুঝতে পেরেছিলাম যে প্রকল্পের কনফিগারেশনটি কেবল একটি নাম এবং "সেটিংসের সম্পূর্ণ পুরোপুরি" নির্বাচন করার সুবিধাজনক উপায় ছিল জরিস টিমারম্যানস উল্লেখ করেছেন। আমি জানতে চেয়েছিলাম যে সেগুলি সেগুলি কী হতে পারে যা "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সত্য হয়ে গেছে।


3

আপনি যে স্পষ্ট পার্থক্যটি দেখতে পাচ্ছেন তা হ'ল বাইনারি আকার। একটি ডিবাগ বিল্ড একটি রিলিজ বিল্ডের চেয়ে বড় বাইনারি তৈরি করে।

ডিবাগ-এ সংকলন করার সময়, প্রতীক টেবিলটি কোড ফাইলের সংকলিত অবজেক্টে যুক্ত করা হয় যা ডিবাগিং প্রোগ্রামগুলিকে এই বাইনারিগুলিতে ট্যাপ করতে দেয় এবং অবজেক্ট এবং ভেরিয়েবলের মান অ্যাক্সেস করতে পারে।

আর একটি পর্যবেক্ষণযোগ্য পার্থক্য হ'ল, রিলিজ মোডে, বাইনারিটি কেবল একটি মারাত্মক ত্রুটির উপর ক্র্যাশ হয়ে যায় ডিবাগ মোডে থাকা অবস্থায়, আপনি যদি ভিজ্যুয়াল স্টুডিওতে অ্যাপ্লিকেশনটি ডিবাগ করা শুরু করেন, আপনি কল স্ট্যাকটি পরীক্ষা করতে পারেন যা আপনাকে ভ্রান্ত বিবরণের সঠিক অবস্থানটি বলে দেয় check ।


-15

সঠিক পার্থক্যগুলি কী তা আমি জানি না কারণ সেখানে সহজে কোনও তথ্য উপলব্ধ নেই।

তবে মূল পর্যবেক্ষণের পার্থক্যটি হ'ল রিলিজ সংস্করণটি কখনও কখনও ফলাফলের ডিএলএল ফাইলকে কলুষিত করে এবং এর ফলে আপনাকে অ্যাপ্লিকেশন, ওয়েব অ্যাপ্লিকেশন অকেজো করে দেয়।

দুঃখের বিষয়, আপনাকে উত্পাদনতে ডিবাগ বিল্ড লাগাতে হবে। এবং হ্যাঁ, প্রকাশের জন্য আপনাকে ভাল পুরানো এফটিপি ব্যবহার করতে হবে।


7
কিভাবে এই প্রশ্নের উত্তর দেয়? এবং আপনি টাইপ করার সময় দয়া করে মনোযোগ দিন।
এমএমকিং

আমার অনুরূপ সমস্যা ছিল, কোডটি ডিবাগ মোডে কাজ করে, তবে রিলিজ মোডে সমস্যা রয়েছে। সমস্যাটি আমার কোডটিতে রয়েছে। রিলিজ সংস্করণে সাধারণ সমস্যাগুলি সম্পর্কে একটি দুর্দান্ত নিবন্ধ রয়েছে opeএটি অন্যকেও সহায়তা করতে পারে আশা করি।
ওয়েইহুই গুও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.