ভিজ্যুয়াল স্টুডিও, একাধিক থ্রেডের মধ্যে ডিবাগ করুন


127

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


ভিজ্যুয়াল স্টুডিওর কোন সংস্করণ আপনি ব্যবহার করছেন? এক্সপ্রেস, প্রো, আলটিমেট ..?
চিহ্নিত করুন

তারপর jeffamaphone`s লিংক সাহায্য করবে এবং হয়ত এটাও যখন ডিবাগ অন্য থ্রেড স্যুইচ করতে আরও তথ্যের জন্য msdn.microsoft.com/en-us/library/bb157786.aspx
মার্ক

সম্পর্কিত আলোচনাটি দেখুন: ভিজ্যুয়ালস্টুডিও.ইউসারওয়াইস
121579-

উত্তর:


107

হ্যাঁ.

থ্রেডস উইন্ডোতে (ডিবাগ -> উইন্ডোজ -> থ্রেড) আপনি যে থ্রেডটি চান তা ডান ক্লিক করুন এবং "থ্রেডে স্যুইচ করুন" নির্বাচন করুন।

আপনি চালনা থেকে রক্ষা করতে আপনি যে থ্রেডগুলিতে ডিবাগ করতে চান না সেগুলিতেও "ফ্রিজ" চয়ন করতে পারেন। তবে আপনি যদি তাদের কাজ করার প্রত্যাশা করেন তবে তাদের "গলাতে" ভুলবেন না।

আরও পড়া


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

অসম্পূর্ণ: | আপনাকে সর্বদা স্যুইচ-এ ক্লিক করতে হবে, প্রতিবার কিছু ঘটবে
ডেডম্যান 1

16

একক থ্রেডের মাধ্যমে একক পদক্ষেপটি বেশিরভাগ ভিএস ২০১২-তে স্থির করা হয়েছে বলে মনে হচ্ছে (কিছু সাবধানতার সাথে আপনি নীচের আমার লিঙ্কে দেখতে পারেন)। ব্রেকপয়েন্টগুলি একটি ব্যথা।

থ্রিজে জমাট বাঁধা এবং জলাবদ্ধতাগুলি পূর্ববর্তী উত্তরগুলির মতো স্বাভাবিক কাজ, তবে এটি ক্লান্তিকর এবং আপনার থ্রেড হিমায়িত হয়ে যাওয়া অন্য থ্রেডের জন্য অপেক্ষা করলে এটি স্তব্ধ হয়ে যেতে পারে। আপনার আগ্রহের থ্রেডে আপনার জায়গাটি না হারিয়ে এগুলি থেকে পুনরুদ্ধার করা কঠিন।

আর একটি দরকারী কার্যপ্রবাহ হ'ল আপনার ব্রেকপয়েন্টগুলিতে একটি থ্রেড ফিল্টার প্রয়োগ করা, উত্তরের কয়েকটি ক্ষেত্রেও বলা হয়েছে:

একটি ব্রেকপয়েন্ট তৈরি করুন, ব্রেকপয়েন্টে ডান ক্লিক করুন, ফিল্টার ক্লিক করুন এবং থ্রেডআইড = 7740 লিখুন (থ্রেড উইন্ডো থেকে আপনার থ্রেড আইডি)।

এটি খুব ক্লান্তিকর হতে পারে।

মাইক্রোসফ্টকে আমার পরামর্শ হ'ল সুস্পষ্ট ব্রেকআপপয়েন্টটি অন্য থ্রেডে আঘাত না করলে থ্রেডটি কখনও পরিবর্তন করতে একক পদক্ষেপ (এবং এর প্রকরণগুলি) ঠিক করা fix বর্তমানের থ্রেড আইডিটির ফিল্টার হিসাবে একটি ব্রেকপয়েন্ট তৈরি করতে তাদেরও একটি শর্টকাট (সম্ভবত Ctrl-F9) যুক্ত করা উচিত। এটি দ্বিতীয় কর্মপ্রবাহকে আরও সুবিধাজনক করে তুলবে।

আপনি যদি সম্মত হন তবে এই পরামর্শটি ভোট দিন, বা আপনার নিজের পরামর্শ যুক্ত করুন:

https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/8543248-make-the-debugger-stick-to-the-current-thread-inst


1
"একটি থ্রেডের মাধ্যমে একক পদক্ষেপটি বেশিরভাগ ভিএস ২০১২-তে স্থির করা হয়েছে বলে মনে হয়" - সত্যই নয়, এটি এখনও ভিএস ২০১7-এ ভেঙে গেছে।
ব্যবহারকারী 626528

10

এছাড়াও আপনি আপনার কোডে একটি শর্তাধীন ব্রেকপয়েন্ট করা করা হতে পারে thread.Id == [someValue] বা Thread.Name == "[Somename]"ব্রেকপয়েন্ট অবস্থায় ...


ধন্যবাদ চার্লস, এটি সহায়ক ছিল (আপনি জানেন না যে আপনি এটি করতে পারেন)। যাইহোক, ডিবাগ করার আমার জন্য সবচেয়ে কার্যকর উপায় এক jeffamaphone লিখেছিলেন আমি নাম জানি না আগের মত এটা ব্রেকপয়েন্ট হিট এবং কিছু মান দেখতে পাবে না
অস্কার Kjellin

3

সাধারণ মামলার জন্য অনেক দ্রুত কাজ রয়েছে - স্টিভের লিঙ্কটিতে মন্তব্য দেখুন।

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

সুতরাং আমার ক্ষেত্রে একবার বিভিন্ন থ্রেড আমার ব্রেকপয়েন্টে আঘাত হানা শুরু করে আমি মাত্র কয়েকবার আঘাত করেছিলাম যতক্ষণ না আমি যে কলটি সন্ধান করছিলাম তা সনাক্ত না করা পর্যন্ত ব্রেকআপপয়েন্টটি সরিয়ে ফেলে এবং একই থ্রেডে থেকে হস্তক্ষেপ না করে বাকী কোডটি দিয়ে পদক্ষেপ নিয়েছিল from তাদের বাকি।

আপনি যদি রাখতে চান এমন একাধিক ব্রেকপয়েন্ট রয়েছে, তবে স্পষ্টতই এটি একটি সমস্যা হয়ে দাঁড়ায় - তবে আবার সাধারণ ক্ষেত্রে এটি করা খুব সহজ।


2

এটি দৃ strongly়রূপে ভিজ্যুয়াল স্টুডিও ২০০৮ এসপি 1-তে একটি খুব অনুরূপ সমস্যার অনুরূপ। এটি পোস্ট-এসপি হটফিক্স দিয়ে স্থির করা হয়েছিল। তবে অন্যান্য প্রমাণ রয়েছে যে হটফিক্স কোড বেসে সংহত হয়নি, এই প্রতিক্রিয়া আইটেমটিও একটি সমস্যা ছিল। হটফিক্সগুলির পক্ষে সংহত ফিরে না পাওয়া এটি অস্বাভাবিক নয়।

কোনও প্রতিক্রিয়া আইটেম নেই যা সঠিকভাবে আপনার সমস্যার বর্ণনা দেয় যা আমি খুঁজে পেতে পারি। আমি আপনাকে একটি ফাইল প্রস্তাব। এর মতো বাগের পুনরুত্পাদন করার ক্ষেত্রে সাধারণ সমস্যাটি দেওয়া, আমি দৃ strongly়ভাবে আপনাকে একটি প্রজনন প্রকল্প অন্তর্ভুক্ত করার পরামর্শ দিচ্ছি যা এই সমস্যাটি কীভাবে পুনরায় উত্পাদন করতে হবে তার নির্দেশাবলী সহ এই সমস্যাটি প্রদর্শন করে।

আপনার ইস্যুটির জন্য বিভিন্ন ধরণের কাজ রয়েছে, আপনি ডিবাগ + উইন্ডোজ + থ্রেডগুলিতে যেতে পারেন, আপনি যে থ্রেডগুলি ডিবাগ করতে চান না তার ডান ক্লিক করুন এবং জমাট নির্বাচন করুন। পরে তাদের গলাতে ভুলবেন না।

এই বাগগুলি আবার ভিজ্যুয়াল স্টুডিও 2010 সার্ভিস প্যাক 1 এ স্থির করা হয়েছিল।


1

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


0

৫.একটি একক থ্রেডের চারপাশে ঝাঁপুনি ছাড়াই পদক্ষেপ

আপনি যখন প্রথম ব্রেক ব্রেকপয়েন্টে আঘাত করবেন তখন আপনি কতবার মাল্টিথ্রেডেড কোডটি ডিবাগ করছেন, একটি পদক্ষেপ নিন এবং তারপরে হঠাৎ আপনাকে অন্য থ্রেডে হলুদ তীরটি দিয়ে থামানো হবে? অপ্রত্যাশিত আচরণটি ব্রেকআপপয়েন্ট থেকে এখনও সেট করা এবং ফলস্বরূপ আঘাত হানা থেকে আসে। ডিফল্টরূপে, ডিবাগারটি আঘাতের যে কোনও সময় ব্রেক ব্রেকপয়েন্টে থামবে। এর অর্থ হ'ল আপনি যখন কোনও পদক্ষেপ নেন তখন সমস্ত থ্রেড চালানোর অনুমতি দেওয়া হয় এবং আপনার বর্তমান থ্রেডে ধাপটি শেষ হওয়ার আগে আপনার চলমান থ্রেডগুলির একটি এই ব্রেকপয়েন্টে চাপায়। পরের বার আপনি এই পরিস্থিতিতে পড়ার চেষ্টা করুন:

  1. ডিবাগারটি স্যুইচ করা নতুন থ্রেডের দ্বারা আঘাতপ্রাপ্ত ব্রেকআপপয়েন্টটি অক্ষম করুন বা মুছুন।
  2. চালিয়ে যান (এফ 5) টিপুন
  3. সেই প্রথম থ্রেডে আপনার প্রথম প্রাথমিক পদক্ষেপটি কীভাবে সম্পূর্ণ হয় এবং এখন সক্রিয় ডিবাগিং প্রসঙ্গে তা পর্যবেক্ষণ করুন।
  4. যেহেতু আপনার ব্রেকপয়েন্টগুলি মুছে ফেলা বা অক্ষম করা হয়েছে, তাই আপনি বাধা ছাড়াই সেই একক থ্রেডে পা চালিয়ে যেতে পারেন।

ভিজ্যুয়াল স্টুডিওতে ডিবাগ করার জন্য 7 টি কম পরিচিত হ্যাক

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