ভিএস ডিবাগার 'ম্যাজিক নাম' সম্পর্কে কোথায় শিখবেন


110

আপনি যদি কখনও প্রতিফলক ব্যবহার করেছেন, আপনি সম্ভবত লক্ষ্য করেছেন যে সি # সংকলকটি প্রকার, পদ্ধতি, ক্ষেত্র এবং স্থানীয় ভেরিয়েবল উত্পন্ন করে যা ডিবাগারের দ্বারা 'বিশেষ' প্রদর্শন প্রাপ্য। উদাহরণস্বরূপ, 'সিএস $' দিয়ে শুরু হওয়া স্থানীয় ভেরিয়েবলগুলি ব্যবহারকারীর কাছে প্রদর্শিত হয় না। বেনামে পদ্ধতি বন্ধ করে দেওয়ার জন্য, স্বয়ংক্রিয় বৈশিষ্ট্যগুলির ক্ষেত্রগুলিকে সমর্থন করার জন্য, এবং অন্যান্য জন্য অন্যান্য বিশেষ নামকরণের সম্মেলন রয়েছে।

আমার প্রশ্ন: এই নামকরণের সম্মেলনগুলি সম্পর্কে কোথায় শিখব? কেউ কি কিছু ডকুমেন্টেশন সম্পর্কে জানেন?

আমার উদ্দেশ্য পোস্টশার্প ২.০ একই কনভেনশনগুলি ব্যবহার করা।

উত্তর:


209

এগুলি সংকলকের অননুমোদিত বাস্তবায়ন বিবরণ এবং যে কোনও সময় পরিবর্তিত হতে পারে। (আপডেট: GeneratedNames.cs বর্তমান বিশদগুলির জন্য সি # উত্সে দেখুন; নীচের বিবরণটি কিছুটা পুরানো।

তবে, যেহেতু আমি খুব ভাল লোক, তাই এখানে কিছু বিবরণ দেওয়া হল:

আপনার যদি অব্যবহৃত স্থানীয় পরিবর্তনশীল থাকে যা অপ্টিমাইজারটি সরিয়ে দেয়, আমরা এর জন্য ডিবিগ তথ্যটি পিডিবির মধ্যে নির্গত করি। আমরা __Deleted$এ জাতীয় পরিবর্তনগুলিতে প্রত্যয়টি আটকে দিয়েছি যাতে ডিবাগারটি জানতে পারে যে তারা উত্স কোডে ছিল তবে বাইনারিটিতে প্রতিনিধিত্ব করে না।

সংকলক দ্বারা বরাদ্দকৃত অস্থায়ী পরিবর্তনশীল স্লটগুলিকে সিএস $ এক্স $ ওয়াইয়ের প্যাটার্ন সহ নাম দেওয়া হয়েছে, যেখানে এক্সটি "অস্থায়ী ধরণের" এবং ওয়াই এখন পর্যন্ত বরাদ্দকৃত অস্থায়ী সংখ্যা। অস্থায়ী ধরণেরগুলি হ'ল:

0 --> short lived temporaries
1 --> return value temporaries
2 --> temporaries generated for lock statements
3 --> temporaries generated for using statements
4 --> durable temporaries
5 --> the result of get enumerator in a foreach
6 --> the array storage in a foreach
7 --> the array index storage in a foreach.  

8 থেকে 264 এর মধ্যে অস্থায়ী প্রকারগুলি বহুমাত্রিক অ্যারেগুলির জন্য অতিরিক্ত অ্যারে সূচক স্টোরেজ।

264 এর উপরে অস্থায়ী প্রকারগুলি স্ট্রিং স্থির করে স্থির বিবৃতি জড়িত অস্থায়ী জন্য ব্যবহৃত হয়।

বিশেষ সংকলক উত্পাদিত নামগুলি এর জন্য উত্পন্ন করা হয়:

1 --> the iterator state ("state")
2 --> the value of current in an iterator ("current")
3 --> a saved parameter in an iterator
4 --> a hoisted 'this' in an iterator ("this")
5 --> a hoisted local in an iterator
6 --> the hoisted locals from an outer scope
7 --> a hoisted wrapped value ("wrap")
8 --> the closure class instance ("locals")
9 --> the cached delegate instance ("CachedAnonymousMethodDelegate")
a --> the iterator instance ("iterator")
b --> an anonymous method
c --> anonymous method closure class ("DisplayClass")
d --> iterator class
e --> fixed buffer struct ("FixedBuffer")
f --> anonymous type ("AnonymousType")
g --> initializer local ("initLocal")
h --> query expression temporary ("TransparentIdentifier")
i --> anonymous type field ("Field")
j --> anonymous type type parameter ("TPar")
k --> auto prop field ("BackingField")
l --> iterator thread id
m --> iterator finally ("Finally")
n --> fabricated method ("FabricatedMethod")
o --> dynamic container class ("SiteContainer")
p --> dynamic call site ("Site")
q --> dynamic delegate ("SiteDelegate")
r --> com ref call local ("ComRefCallLocal")
s --> lock taken local ("LockTaken")

যাদুকরী নাম উত্পন্ন করার প্যাটার্নটি হ'ল: P<N>C__SIযেখানে:

  • ক্যাশেড প্রতিনিধি এবং প্রদর্শন শ্রেণীর উদাহরণগুলির জন্য পি সিএস $, অন্যথায় খালি।
  • N যদি জিনিসটির সাথে যুক্ত থাকে তবে সেটির মূল নাম
  • সি উপরে বর্ণিত এসের মাধ্যমে 1 টি অক্ষর
  • এস হ'ল বর্ণনামূলক প্রত্যয় ("বর্তমান", "রাষ্ট্র" এবং আরও অনেক কিছু) যাতে মেটাডেটা পড়ার সময় আপনাকে উপরের টেবিলটি মুখস্থ করতে হবে না।
  • আমি একটি uniqueচ্ছিক অনন্য নম্বর

2
ধন্যবাদ! আমি দেখতে পাচ্ছি যে আমি পোস্টশার্প ক্লোজার ক্লাসগুলি সি # সংকলকটির মতো উত্সাহিত আচরণ করতে পারে কিনা!
গেইল ফ্রেইটোর

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

ক্লোজার ক্লাসগুলির মতো আমার ধারণা আছে তবে ক্ষেত্র হিসাবে প্যারামিটারগুলি উত্তোলনের পরিবর্তে আমার কাছে স্থানীয় ভেরিয়েবল হিসাবে রয়েছে। এটি প্যারামিটারগুলির জন্য বেশ ভাল কাজ করে তবে ডিবাগারকে কীভাবে বলা যায় যে 'এই' 'লিডারগ.0' নয় তবে সূচক 4 সহ স্থানীয় ভেরিয়েবল? কোন যাদু নাম আছে?
গেইল ফ্রেইটিউর

23
@ এরিক - আপনি কি এই উত্তরটি C # 5.0 (async / অপেক্ষার) দ্বারা উত্পাদিত নামগুলির সাথে আপডেট করতে পারবেন? আমি কিছু নতুন উপসর্গ দেখেছি :)
গ্যাল ফ্রেইটুর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.