কীভাবে একটি রেফারেন্সড ডিএল ডিবাগ করবেন (পিডিবি থাকা)


132

আমার এবং আমার কার্যক্ষেত্রে দুটি সমাধান রয়েছে, এ এবং বি বলুন

সমাধান এ একটি পুরানো প্রকল্প যা আমি কিছুক্ষণ আগে কোডিং শেষ করেছি। সমাধান বিতে, আমার সলিউশন এ থেকে কিছু ক্লাস ব্যবহার করা দরকার, এটি করার জন্য, আমি দ্রষ্টব্য এ এর ​​মধ্যে একটি প্রকল্পের dll একটি রেফারেন্স যুক্ত করব

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

সমাধান এ থেকে ক্লাসগুলি ডিবাগ করার একমাত্র উপায় হ'ল সমাধান বি চালানো, সমস্ত প্রক্রিয়া (ডিবাগ মেনু আইটেমটিতে) বিযুক্ত করে সমাধান এ থেকে প্রক্রিয়াটি সংযুক্ত করে is

তবে এটি খুব অসুবিধাজনক এবং আমি কেবল একবারে A বা B ডিবাগ করতে পারি।

রেফারেন্সড ডিএলসের কোডে প্রবেশের অনুমতি দেওয়ার কোনও উপায় আছে (যার জন্য আমার কাছে উত্স কোড আছে)?


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

সমাধানগুলি কীভাবে ডিজাইন করা উচিত তার একটি খুব ভাল রেফারেন্স এমএসডিএন-এ পাওয়া যাবে ।


এমএসডিএন লিঙ্কটি নেট নেটগুলির জন্য অবশ্যই পড়তে হবে (তারা যে উত্স নিয়ন্ত্রণ ব্যবহার করে তা নির্বিশেষে)। আমি অবাক হয়েছি আমি আগে এটি দেখিনি। ধন্যবাদ!
প্যাট

নতুন comers, যদি আপনি ইতিমধ্যে প্রকল্পের রেফারেন্স সম্পর্কে জানতে, এবং যে একটি বিকল্প নয়, তারপর গৃহীত উত্তর উপেক্ষা এবং এই এক সরাসরি (যেমন আপনি যদি একটি NuGet প্যাকেজ ডিবাগ প্রয়োজন): stackoverflow.com/a/26029208/398630
BrainSlugs83

উত্তর:


113

আপনি যদি একটি প্রকল্প আছে রেফারেন্স থাকে তবে তা অবিলম্বে কাজ করা উচিত।

যদি এটি কোনও ফাইল (dll) রেফারেন্স হয় তবে আপনার ডিলিংয়ের মতো একই ফোল্ডারে ডিবাগিং প্রতীকগুলি ("পিডিবি" ফাইল) থাকা দরকার। আপনার প্রকল্পগুলি ডিবাগ প্রতীক তৈরি করছে তা পরীক্ষা করুন (প্রকল্পের বৈশিষ্ট্য => বিল্ড => উন্নত => আউটপুট / ডিবাগ তথ্য = পূর্ণ); এবং যদি আপনি অনুলিপি করেছেন dll করে থাকেন তবে পিডিবিটি এটি দিয়ে দিন।

আপনি কোনও ফাইল অনুলিপি করতে না চাইলে আপনি সরাসরি আইডিইতে প্রতীকগুলিও লোড করতে পারেন, তবে এটি আরও কাজ।

প্রকল্পের রেফারেন্স ব্যবহার করা সবচেয়ে সহজ বিকল্প!


3
দুর্ভাগ্যক্রমে, আমি মনে করি যে প্রকল্পের সাথে অন্য সমাধান থেকে প্রকল্পের রেফারেন্স যুক্ত করা সম্ভব নয় (আমি ভুল হলে আমাকে সংশোধন করুন!)।
এলাদ

7
@ এলাদ আমি সবেমাত্র এটি করেছি। প্রথমে সমাধানটিতে "বিদ্যমান প্রকল্প" যুক্ত করুন। তারপরে প্রকল্পের রেফারেন্স যুক্ত করে প্রকল্পে একটি রেফারেন্স যুক্ত করুন। আপনি বিদ্যমান প্রকল্প ফাইলগুলিতে ব্রেকপয়েন্টগুলি সেট করতে পারেন। এটি দুর্দান্ত কারণ ফাইলগুলি অনুলিপি করা হয়নি।
ব্যবহারকারী420667

3
আমার কাছে প্রকল্পের রেফারেন্স হিসাবে ডিএলএল প্রকল্প রয়েছে তবে এর মধ্যে ব্রেক পয়েন্ট উপেক্ষা করা হয়।
স্লাভ

1
আমি আসলে আজ একটি (রিলিজ-) অ্যাসেমব্লিকে ডিবাগ করতে সক্ষম হয়েছিল যা একটি ফাইল রেফারেন্স হিসাবে যুক্ত হয়েছিল। আমার পক্ষে ভাল, তবে কীভাবে তা ঘটল? MSVC2010, C #, (ASP) .NET 4.0, রেফারেন্সড অ্যাসেমব্লিটি ডিবাগ + রিলিজ হিসাবে উপস্থিত রয়েছে (তবে কেবলমাত্র প্রকল্প-এ রিলিজ-ফাইল যুক্ত হয়েছে)। সত্যিই এটি স্পষ্ট করতে চাই।
টোবিয়াস 8১

1
আমার জন্য এটি একদিন কাজ করছিল তবে পরের দিন কাজ করছিল না (ডিএলএল এবং পিডিবি ফাইল থাকা)। সরঞ্জামসমূহ> বিকল্পগুলি> ডিবাগিং> প্রতীকগুলিতে "খালি প্রতীক ক্যাশে" বোতাম টিপলে এটি ঠিক করা হয়েছে।
পল

45

আমারো একই ইস্যু ছিল. আমি সেটাই পেয়েছি:

1) নিশ্চিত করুন যে সমস্ত প্রকল্প একই ফ্রেমওয়ার্ক ব্যবহার করছে (এটি অত্যন্ত গুরুত্বপূর্ণ!)

2) সরঞ্জাম / বিকল্পগুলিতে> ডিবাগিং> সাধারণ নিশ্চিত করুন "জাস্ট মাই কোড সক্ষম (কেবলমাত্র পরিচালিত) টিক না দেওয়া হয়েছে

3) সরঞ্জাম / অপশন> ডিবাগিং> সিম্বলগুলি কোনও ক্যাশেড চিহ্নগুলি পরিষ্কার করে, ডিফল্ট "মাইক্রোসফ্ট সিম্বল সার্ভারস" ব্যতীত "সিম্বলস ফাইল (.pdb) অবস্থানগুলি" তালিকার বাক্সের অধীনে সমস্ত ফোল্ডার অবস্থানগুলি মুছুন, আনটিক করুন এবং মুছুন still "এই ডিরেক্টরিতে ক্যাশে প্রতীকগুলি" পাঠ্যবক্সে কোনও স্থিতিশীল পাথ মুছুন। "খালি প্রতীক ক্যাশে" বোতামটি ক্লিক করুন। শেষ পর্যন্ত নিশ্চিত করুন যে "কেবলমাত্র নির্দিষ্ট মডিউলগুলি" রেডিও বোতামটি টিক দেওয়া আছে।

4) সমস্ত প্রকল্পের জন্য বিল্ড / কনফিগারেশন ম্যানেজার মেনুতে কনফিগারেশনটি ডিবাগ মোডে রয়েছে তা নিশ্চিত করুন।


3
আমার সমস্যাটি হ'ল আমার দুটি প্রকল্প পৃথক। নেট ফ্রেমওয়ার্ক: 4.0 এবং 4.5। TX!
ব্যবহারকারী 627283

1) এবং 4) গুরুত্বপূর্ণ। ডিবাগ মোডে তৈরি করতে এবং একই কাঠামোটি ব্যবহার করতে ভুলবেন না।
স্কট_ফ

12

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


2
ধন্যবাদ! এটা আমার সমস্যা ছিল। আমি বিশ্বাস করতে পারি না যে আমি এটিকে বুঝতে পারি নি: - / আমি ভেবেছিলাম যে প্রকল্পের রেফারেন্সটি সেট করা কোনওভাবে জিএসি-তে ইনস্টল থাকা বিষয়টিকে ওভাররাইড করে।
স্নুকার সি

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

7

পদক্ষেপ 1: সরঞ্জামগুলিতে যান -> বিকল্প -> ডিবাগিং

পদক্ষেপ 2: যাচাই আমার কোড সক্ষম করুন আনচেক করুন

পদক্ষেপ 3: আনচেকের প্রয়োজনীয় উত্স ফাইলটি মূল সংস্করণের সাথে হুবহু মিলে

পদক্ষেপ 4: সম্পত্তি ও অপারেটরদের ওপরে আনচেক করুন


3

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


1
এই তথ্যটি গ্রহণযোগ্য উত্তরে অন্তর্ভুক্ত করা উচিত। এটিই আমি বিশেষত যা খুঁজছিলাম। ভাগ করে নেওয়ার জন্য ধন্যবাদ! +1
হেরিবার্তো লুগো

2

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

আপনি ব্রেকপয়েন্টগুলি উইন্ডো দিয়ে আপনার ব্রেকপয়েন্টগুলি পর্যালোচনা করতে পারেন, ডিবাগ -> উইন্ডোজ -> ব্রেকপয়েন্টের মাধ্যমে উপলব্ধ।

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


1
এটি কেবলমাত্র তখনই কার্যকর হয় যেখানে বাহ্যিক ফাইলটি যেখানে আপনি ব্রেকপয়েন্টটি রেখেছেন পিডিবিতে সঠিক পথটির সাথে মেলে। (উদাহরণস্বরূপ কেবল যদি আপনি আপনার মেশিনে ডিএলএল তৈরি করেন তবেই কাজ করে))
জোশ এম

2

আপনার ডিএলএলটি জিএসি তে নিবন্ধিত না রয়েছে তা নিশ্চিত করুন। ভিজ্যুয়াল স্টুডিওটি জিএসি-তে সংস্করণটি ব্যবহার করবে এবং এটিতে সম্ভবত কোনও ডিবাগিংয়ের তথ্য থাকবে না।


1

আমি আমার কয়েকটি সমাধানে একটি বাহ্যিক শ্রেণীর গ্রন্থাগার প্রকল্প অন্তর্ভুক্ত করতে চাই না, তাই আমি মজলিসমূহে পা রাখি যা আমি আলাদা উপায়ে গ্রাস করি।

আমার সমাধানগুলিতে একটি "প্রচলিত সমাবেশ" ডিরেক্টরি রয়েছে যাতে অন্যান্য প্রকল্পের নিজস্ব ডিএলএল থাকে। আমি যে ডিএলএলগুলি উল্লেখ করেছি সেগুলির ডিবাগিংয়ের জন্য তাদের সাথে থাকা পিডিবি ফাইল রয়েছে।

ডিবাগ করতে এবং ব্রেকপয়েন্টগুলি সেট করার জন্য, আমি গ্রাহক অ্যাপ্লিকেশনটির উত্সে একটি ব্রেকপয়েন্ট স্থাপন করেছি যেখানে আমি সমাবেশ থেকে কোনও পদ্ধতি বা কনস্ট্রাক্টর কল করছি এবং তারপরে পদ্ধতি / কনস্ট্রাক্টর কল INTO (F11) পদক্ষেপ নেব।

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

এটি সরাসরি এগিয়ে নয় তবে আপনি যদি কোনও নতুন প্রকল্পের রেফারেন্স অন্তর্ভুক্ত না করতে চান এবং কেবল পরিবর্তে একটি ভাগ করা অ্যাসেম্বলিটি উল্লেখ করতে চান তবে কাজ করে works


0

এটা অবশ্যই কাজ করা উচিত। আমি একই সময়ে একটি .exe ফাইল এবং একটি dll ডিবাগ করতাম! আমার পরামর্শটি হ'ল 1) আপনার বি প্রকল্পে ডেলের পথ অন্তর্ভুক্ত করুন, ২) তারপরে আপনার এ প্রকল্পটি ডিবাগ করে সংকলন করুন 3) নিয়ন্ত্রণ করুন যে পথটি ডিএল এবং ডি পিডিবি ফাইলের দিকে নির্দেশ করে .... 4) এর পরে আপনি বি প্রকল্পটি ডিবাগ শুরু করুন এবং যদি সবকিছু ঠিক থাকে তবে আপনি উভয় প্রকল্পেই ডিবাগ করতে সক্ষম হবেন!


0

আপনি নিউগেটে উল্লেখ করছেন এমন একটি বাহ্যিক লাইব্রেরি ডিবাগ করার জন্য ভিজ্যুয়ালস্টুডিও 2019 ব্যবহার করে আমি সর্বাধিক সোজা পথটি নিম্নলিখিত পদক্ষেপগুলি গ্রহণ করে:

  1. সরঞ্জামগুলি> বিকল্পগুলি> ডিবাগিং> সাধারণ> আনটিক 'কেবল আমার কোড সক্ষম করুন'

  2. অ্যাসেম্বলি এক্সপ্লোরার এ যান> নুগেট প্যাকেজগুলি ক্যাশে থেকে খুলুন তালিকাবদ্ধ

  3. আপনি অনুসন্ধান ক্ষেত্রে ডিবাগ করতে চান নিউগেট প্যাকেজটির নামটি টাইপ করুন এবং 'ওকে' ক্লিক করুন এখানে চিত্র বর্ণনা লিখুন

  4. অ্যাসেম্বলি এক্সপ্লোরার থেকে, আমদানি করা এসেম্বলিতে ডান ক্লিক করুন এবং 'জেনারেট করুন পিডিবি' নির্বাচন করুন এখানে চিত্র বর্ণনা লিখুন

  5. আপনি .PDB ফাইল এবং যে কাঠামোর জন্য তৈরি করতে চান সেগুলি সংরক্ষণ করতে চান এমন একটি কাস্টম পাথ নির্বাচন করুন

    এখানে চিত্র বর্ণনা লিখুন

  6. আপনার ডিবাগ ফোল্ডারে উত্পন্ন ফোল্ডার থেকে .PDB ফাইলটি অনুলিপি করুন এবং আপনি এখন এই সমাবেশের লাইব্রেরি কোডে ব্রেকপয়েন্ট সেট করতে পারেন


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