আপনার .NET ভাষার ধাপটি সঠিকভাবে ডিবাগারে তৈরি করা


135

প্রথমত, আমি এই প্রশ্নের দৈর্ঘ্যের জন্য ক্ষমাপ্রার্থী।

আমি আয়রনশিমের লেখক । সম্প্রতি আমি শালীন ডিবাগ তথ্য নির্ধারণের জন্য কঠোর পরিশ্রম করছি, যাতে আমি 'নেটিভ'। নেট ডিবাগারটি ব্যবহার করতে পারি।

যদিও এটি আংশিকভাবে সফল হয়েছে, আমি কিছু টিথিং সমস্যা নিয়ে চলেছি।

প্রথম সমস্যাটি পদক্ষেপের সাথে সম্পর্কিত।

স্কিমটি একটি অভিব্যক্তি ভাষা হওয়ার কারণে, সমস্ত বড় .NET ভাষাগুলির মতো নয় যা বিবৃতি (বা লাইন) ভিত্তিক বলে মনে হচ্ছে unlike

মূল কোড (স্কিম) এর মতো দেখাচ্ছে:

(define (baz x)
  (cond
    [(null? x) 
      x]
    [(pair? x) 
      (car x)]
    [else
      (assertion-violation #f "nooo" x)]))

আমি উদ্দেশ্যপ্রণে প্রতিটি এক্সপ্রেশন একটি নতুন লাইনে রেখেছি।

নির্গত কোডটি সি # তে রূপান্তরিত হয় (আইএলএসপি এর মাধ্যমে) দেখে মনে হচ্ছে:

public static object ::baz(object x)
{
  if (x == null)
  {
    return x;
  }
  if (x is Cons)
  {
    return Builtins.Car(x);
  }
  return #.ironscheme.exceptions::assertion-violation+(
     RuntimeHelpers.False, "nooo", Builtins.List(x));
}

আপনি দেখতে পারেন, বেশ সহজ।

দ্রষ্টব্য: কোডটি যদি শর্তসাপেক্ষ অভিব্যক্তিতে রূপান্তরিত হয় (? :) সি-তে, পুরো জিনিসটি কেবল একটি ডিবাগ স্টেপ হবে, তা মনে রাখবেন।

উত্স এবং লাইন সংখ্যা সহ এখানে আইএল আউটপুট রয়েছে:

  .method public static object  '::baz'(object x) cil managed
  {
    // Code size       56 (0x38)
    .maxstack  6
    .line 15,15 : 1,2 ''
//000014: 
//000015: (define (baz x)
    IL_0000:  nop
    .line 17,17 : 6,15 ''
//000016:   (cond
//000017:     [(null? x) 
    IL_0001:  ldarg.0
    IL_0002:  brtrue     IL_0009

    .line 18,18 : 7,8 ''
//000018:       x]
    IL_0007:  ldarg.0
    IL_0008:  ret

    .line 19,19 : 6,15 ''
//000019:     [(pair? x) 
    .line 19,19 : 6,15 ''
    IL_0009:  ldarg.0
    IL_000a:  isinst [IronScheme]IronScheme.Runtime.Cons
    IL_000f:  ldnull
    IL_0010:  cgt.un
    IL_0012:  brfalse    IL_0020

    IL_0017:  ldarg.0
    .line 20,20 : 7,14 ''
//000020:       (car x)]
    IL_0018:  tail.
    IL_001a:  call object [IronScheme]IronScheme.Runtime.Builtins::Car(object)
    IL_001f:  ret

    IL_0020:  ldsfld object 
         [Microsoft.Scripting]Microsoft.Scripting.RuntimeHelpers::False
    IL_0025:  ldstr      "nooo"
    IL_002a:  ldarg.0
    IL_002b:  call object [IronScheme]IronScheme.Runtime.Builtins::List(object)
    .line 22,22 : 7,40 ''
//000021:     [else
//000022:       (assertion-violation #f "nooo" x)]))
    IL_0030:  tail.
    IL_0032:  call object [ironscheme.boot]#::
       'ironscheme.exceptions::assertion-violation+'(object,object,object)
    IL_0037:  ret
  } // end of method 'eval-core(033)'::'::baz'

দ্রষ্টব্য: ডিবাগারটি পুরো পদ্ধতিটি হাইলাইট করা থেকে বিরত রাখতে, আমি পদ্ধতিটি এন্ট্রি পয়েন্টটি মাত্র 1 কলাম প্রশস্ত করি।

আপনি দেখতে পাচ্ছেন, প্রতিটি অভিব্যক্তি সঠিকভাবে একটি লাইনে ম্যাপ করে।

এখন পদক্ষেপ নিয়ে সমস্যা (ভিএস 2010 এ পরীক্ষিত, তবে ভিএস ২০০৮ এ একই / একই সমস্যা):

এগুলি IgnoreSymbolStoreSequencePointsপ্রয়োগ করা হয়নি।

  1. নাল আর্গ দিয়ে বাজকে কল করুন, এটি সঠিকভাবে কাজ করে। (নাল? এক্স) এর পরে এক্স
  2. কনস আর্গ দিয়ে বাজকে কল করুন, এটি সঠিকভাবে কাজ করে। (নাল? এক্স) তারপরে (জোড়? x) তারপরে (গাড়ি এক্স)
  3. অন্যান্য আর্গের সাথে বাজকে কল করুন, এটি ব্যর্থ। (নাল? এক্স) তারপরে (জোড়? এক্স) তারপরে (গাড়ি এক্স) তারপরে (দৃ -়-লঙ্ঘন ...)

আবেদন করার সময় IgnoreSymbolStoreSequencePoints(প্রস্তাবিত হিসাবে):

  1. নাল আর্গ দিয়ে বাজকে কল করুন, এটি সঠিকভাবে কাজ করে। (নাল? এক্স) এর পরে এক্স
  2. কনস আর্গ দিয়ে বাজকে কল করুন, এটি ব্যর্থ। (নাল? এক্স) তারপর (জোড়? এক্স)
  3. অন্যান্য আর্গের সাথে বাজকে কল করুন, এটি ব্যর্থ। (নাল? এক্স) তারপরে (জোড়? এক্স) তারপরে (গাড়ি এক্স) তারপরে (দৃ -়-লঙ্ঘন ...)

আমি এই মোডে এটিও দেখতে পাই যে কয়েকটি লাইন (এখানে দেখানো হয়নি) ভুলভাবে হাইলাইট করা হয়েছে, সেগুলি 1 দ্বারা বন্ধ রয়েছে।

কারণগুলি কী হতে পারে সে সম্পর্কে এখানে কিছু ধারণা দেওয়া হল:

  • টেলকলগুলি ডিবাগারকে বিভ্রান্ত করে
  • ওভারল্যাপিং অবস্থানগুলি (এখানে দেখানো হয়নি) ডিবাগারকে বিভ্রান্ত করে (ব্রেকপয়েন্ট নির্ধারণের সময় এটি খুব ভাল করে)
  • ????

দ্বিতীয়টি, তবে গুরুতর বিষয়, ডিবাগারটি কিছু ক্ষেত্রে ব্রেকপয়েন্টগুলিকে ব্রেক / হিট করতে ব্যর্থ।

সঠিকভাবে (এবং ধারাবাহিকভাবে) ব্রেক করার জন্য আমি কেবলমাত্র ডিবাগারটি পেতে পারি, এটিই পদ্ধতি প্রবেশের পয়েন্টে।

IgnoreSymbolStoreSequencePointsপ্রয়োগ না করা হলে পরিস্থিতি কিছুটা উন্নত হয়।

উপসংহার

এটি হতে পারে যে ভিএস ডিবাগারটি কেবল সরল বগী :(

তথ্যসূত্র:

  1. একটি সিএলআর /। নেট ভাষা ডিবাগযোগ্য

আপডেট 1:

মোডবিজি 64৪-বিট অ্যাসেমব্লির জন্য কাজ করে না। সুতরাং যে বাইরে। এটি পরীক্ষা করার জন্য আমার কাছে আর 32-বিট মেশিন নেই। আপডেট: আমি নিশ্চিত যে এটি কোনও বড় সমস্যা নয়, কারও কি ঠিক আছে? সম্পাদনা: হ্যাঁ, আমাকে বোকা, xd কমান্ড প্রম্পটের অধীনে এমডিবিজি শুরু করুন :)

আপডেট 2:

আমি একটি সি # অ্যাপ তৈরি করেছি এবং লাইন তথ্য বিচ্ছিন্ন করার চেষ্টা করেছি।

আমার অনুসন্ধানগুলি:

  • যে কোনও brXXXনির্দেশের পরে আপনার একটি সিকোয়েন্স পয়েন্ট থাকা দরকার (যদি বৈধ ওরফে '# লাইন লুকানো না থাকে তবে প্রসারণ করতে হবে nop)।
  • কোনও brXXXনির্দেশের আগে , একটি '# লাইন লুকানো' এবং এ nop

এটি প্রয়োগ করা, তবে সমস্যাগুলি (একা?) ঠিক করে না?

তবে নিম্নলিখিতগুলি যুক্ত করা, পছন্দসই ফলাফল দেয় :)

  • এর পরে ret, একটি '# লাইন লুকানো' এবং এ nop

এটি IgnoreSymbolStoreSequencePointsপ্রয়োগ করা হয়নি এমন মোডটি ব্যবহার করছে । প্রয়োগ করা হলে, কিছু পদক্ষেপ এখনও এড়িয়ে যায় :(

উপরে প্রয়োগ করা হলে এখানে আইএল আউটপুট দেওয়া হয়:

  .method public static object  '::baz'(object x) cil managed
  {
    // Code size       63 (0x3f)
    .maxstack  6
    .line 15,15 : 1,2 ''
    IL_0000:  nop
    .line 17,17 : 6,15 ''
    IL_0001:  ldarg.0
    .line 16707566,16707566 : 0,0 ''
    IL_0002:  nop
    IL_0003:  brtrue     IL_000c

    .line 16707566,16707566 : 0,0 ''
    IL_0008:  nop
    .line 18,18 : 7,8 ''
    IL_0009:  ldarg.0
    IL_000a:  ret

    .line 16707566,16707566 : 0,0 ''
    IL_000b:  nop
    .line 19,19 : 6,15 ''
    .line 19,19 : 6,15 ''
    IL_000c:  ldarg.0
    IL_000d:  isinst     [IronScheme]IronScheme.Runtime.Cons
    IL_0012:  ldnull
    IL_0013:  cgt.un
    .line 16707566,16707566 : 0,0 ''
    IL_0015:  nop
    IL_0016:  brfalse    IL_0026

    .line 16707566,16707566 : 0,0 ''
    IL_001b:  nop
    IL_001c:  ldarg.0
    .line 20,20 : 7,14 ''
    IL_001d:  tail.
    IL_001f:  call object [IronScheme]IronScheme.Runtime.Builtins::Car(object)
    IL_0024:  ret

    .line 16707566,16707566 : 0,0 ''
    IL_0025:  nop
    IL_0026:  ldsfld object 
      [Microsoft.Scripting]Microsoft.Scripting.RuntimeHelpers::False
    IL_002b:  ldstr      "nooo"
    IL_0030:  ldarg.0
    IL_0031:  call object [IronScheme]IronScheme.Runtime.Builtins::List(object)
    .line 22,22 : 7,40 ''
    IL_0036:  tail.
    IL_0038:  call object [ironscheme.boot]#::
      'ironscheme.exceptions::assertion-violation+'(object,object,object)
    IL_003d:  ret

    .line 16707566,16707566 : 0,0 ''
    IL_003e:  nop
  } // end of method 'eval-core(033)'::'::baz'

আপডেট 3:

উপরের 'সেমি-ফিক্স' নিয়ে সমস্যা। পেভারিফাই এর nopপরে সমস্ত পদ্ধতিতে ত্রুটিগুলি প্রতিবেদন করে ret। আমি আসলেই সমস্যাটি বুঝতে পারি না। কিভাবে একটি nopবিরতি যাচাইকরণ করতে পারেন ret। এটি ডেড কোডের মতো (এটি এমনকি কোড নয়) ... ওহ ভাল, পরীক্ষা চালিয়ে যায়।

আপডেট 4:

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

আপডেট 5:

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

বোনাস হিসাবে, আমার দ্বিতীয় সমস্যাটিও সমাধান হয়ে গেছে। :)

আমি কী দিয়ে শেষ করেছি তার একটি ছোট স্ক্রিনকাস্ট এখানে । এটি ব্রেকপয়েন্টগুলিতে হিট করে, যথাযথ পদক্ষেপ (ইন / আউট / ওভার) ইত্যাদি করে All সব মিলিয়ে কাঙ্ক্ষিত প্রভাব।

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

আপডেট 6:

ভিএস 2010-এ কোডটি পরীক্ষা করার জন্য কেবল পরিবর্তন হয়েছিল, কিছু সমস্যা রয়েছে বলে মনে হচ্ছে:

  1. প্রথম কলটি এখন সঠিকভাবে পদক্ষেপ নেয় না। (দাবি-লঙ্ঘন ...) আঘাত করা হয়। অন্যান্য মামলাগুলি ঠিক কাজ করে। কিছু পুরানো কোড অপ্রয়োজনীয় অবস্থান নির্গত করে। কোড সরানো হয়েছে, প্রত্যাশার মতো কাজ করে। :)
  2. আরও গুরুতরভাবে, প্রোগ্রামটির দ্বিতীয় অনুরোধে ব্রেকপয়েন্টগুলি ব্যর্থ হয় (মেমরি সংকলন ব্যবহার করে, অ্যাসেম্বলিকে ফাইল করতে ডাম্পিং করে ব্রেকপয়েন্টগুলিকে আবার খুশি মনে হয়)।

এই দুটি ক্ষেত্রেই VS2008 এর অধীনে সঠিকভাবে কাজ করে। মূল পার্থক্যটি হ'ল ভিএস2010 এর অধীনে পুরো অ্যাপ্লিকেশনটি। নেট 4 এর জন্য এবং ভিএস 2003 এর অধীনে, নেট 2 তে সংকলিত হয়েছে Both উভয়ই 64-বিট চলমান।

আপডেট 7:

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

আপডেট 8:

ব্রেকআপপয়েন্ট ইস্যু সম্পর্কিত আমি এমএস কানেক্ট সাইটে একটি বাগ দায়ের করেছি ।

আপডেট: স্থির

আপডেট 9:

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


যে কোনও ধারণা স্বাগত জানায়, আমি তাদের চেষ্টা করে দেখব এবং ফলাফলগুলিকে প্রশ্নের সাথে যুক্ত করব। প্রথম 2 টি ধারণা, mdbg চেষ্টা করুন এবং সি # তে একই কোড লিখুন এবং তুলনা করুন।
লেপি

6
প্রশ্নটি কি?
জর্জি স্টকার 14

9
আমি মনে করি তার প্রশ্নটি "কেন আমার ভাষা সঠিকভাবে পদক্ষেপ নিচ্ছে না?"
ম্যাককে

1
আপনি যদি peverify পাস না করে থাকেন তবে আপনি কোনও ম্যাপড ড্রাইভ বা বহু প্লাগইন হোস্টিং সেটআপের মতো আংশিক আস্থার পরিস্থিতিতে চালাতে সক্ষম হবেন না। আপনি কীভাবে আপনার আইএল, প্রতিবিম্ব তৈরি করছেন? প্রেরণ করুন বা পাঠ্য + ইলাসমের মাধ্যমে? উভয় ক্ষেত্রে আপনি সর্বদা .line 16707566,16707566: 0,0 '' এ নিজেকে রাখতে পারেন যাতে আপনি ফিরে আসার পরে কোনও সিদ্ধান্ত নেওয়ার বিষয়ে চিন্তা করবেন না।
হিপ্পিহুন্টার

@ হিপ্পিহান্টার: ধন্যবাদ দুর্ভাগ্যক্রমে এস ছাড়াই nop, পদক্ষেপ ব্যর্থ হয় (আমি এটি নিশ্চিত হয়ে আবার যাচাই করব)। এটি একটি ত্যাগ যা আমি অনুমান করি। ভিএসএস এমনকি প্রশাসকের অধিকার ছাড়াই চলতে পারে এমন নয়: বিটিডব্লিউ রিফ্লেকশন ব্যবহার করে। ডিএলআর মাধ্যমে প্রেরণ করুন (খুব শীঘ্রই ব্রাঞ্চযুক্ত)
লেপি

উত্তর:


26

আমি ভিজ্যুয়াল স্টুডিও ডিবাগার টিমের একজন প্রকৌশলী।

আমি ভুল হলে আমাকে সংশোধন করুন, তবে এটি কেবল মনে হচ্ছে কেবল পিডিবিগুলি থেকে .NET 4 গতিশীল সংকলন প্রতীক বিন্যাসে স্যুইচ করার সময় কিছু ব্রেকপয়েন্ট মিস করা হচ্ছে।

সমস্যাটি সঠিকভাবে নির্ণয়ের জন্য আমাদের সম্ভবত একটি তিরস্কার করা দরকার, তবে এখানে কিছু নোট যা সহায়তা করতে পারে are

  1. ভিএস (২০০৮+) কোনও প্রশাসকবিহীন হিসাবে চালানো যায়
  2. চারপাশে দ্বিতীয় বারে কোনও চিহ্ন লোড হয়? আপনি বিরতি দিয়ে পরীক্ষা করতে পারেন (ব্যতিক্রমের মাধ্যমে বা কল করুন সিস্টেম। ডায়াগনস্টিক.ডেবুগার.ব্রেক ())
  3. প্রতীকগুলি লোড করে ধরে নিলাম, এমন কোনও প্রতিবেদন আছে যা আপনি আমাদের পাঠাতে পারেন?
  4. সম্ভবত পার্থক্য হ'ল ডায়নামিক-সংকলিত কোডের জন্য প্রতীক বিন্যাসটি .NET 2 (PDB স্ট্রিম) এবং। নেট 4 (আইএল ডিবি আমার মনে হয় যে তারা এটিকে বলেছিল?)
  5. ঠিক আছে 'নাপ এর শব্দ। নীচে অন্তর্ভুক্ত ক্রম পয়েন্ট উত্পন্ন করার নিয়ম দেখুন See
  6. আপনাকে আসলে বিভিন্ন লাইনে জিনিস নির্গত করার দরকার নেই। ডিফল্টরূপে, ভিএস 'সিম্বল-স্টেটমেন্টস' পদক্ষেপ নেবে যেখানে সংকলক লেখক হিসাবে আপনি 'প্রতীক-বিবৃতি' অর্থ কী তা নির্ধারণ করতে পারেন। সুতরাং আপনি যদি প্রতিটি এক্সপ্রেশনটি প্রতীক ফাইলে আলাদা জিনিস হতে চান তবে এটি ঠিক কাজ করবে।

জেআইটি নিম্নলিখিত নিয়মগুলির উপর ভিত্তি করে একটি অন্তর্নিহিত ক্রম বিন্দু তৈরি করে: 1. আইএল নোপ নির্দেশাবলী 2. আইএল খালি পয়েন্ট স্ট্যাক ৩. একটি কল নির্দেশ অনুসরণ করার সাথে সাথে আইএল নির্দেশনা

যদি এটি ঘুরে দেখা যায় যে আপনার সমস্যা সমাধানের জন্য আমাদের একটি পুনঃপ্রয়োগ দরকার, আপনি একটি সংযোগ বাগ ফাইল করতে পারেন এবং সেই মাধ্যমটির মাধ্যমে সুরক্ষিতভাবে ফাইলগুলি আপলোড করতে পারেন।

হালনাগাদ:

আমরা এই সমস্যাটি অনুভব করা অন্যান্য ব্যবহারকারীদের http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=27543 থেকে ডেভেল 11 এর বিকাশকারী প্রাকদর্শন চেষ্টা করতে এবং কোনও প্রতিক্রিয়ার সাথে মন্তব্য করতে উত্সাহিত করছি । (অবশ্যই লক্ষ্যমাত্রা 4.5)

আপডেট 2:

কানেক্ট বাগটি https: //connect.mic Microsoft- র হিসাবে উল্লিখিত হিসাবে http://www.microsoft.com/visualstudio/11/en-us/downloads এ উপলব্ধ দেব 11 এর বিটা সংস্করণে লিপি তার জন্য কাজ করার জন্য যাচাইকরণটি যাচাই করেছেন । com / ভিজ্যুয়াল স্টুডিও / প্রতিক্রিয়া / বিশদ / 684089 /

ধন্যবাদ,

লুক


অনেক ধন্যবাদ. আমি প্রয়োজন হলে তিরস্কার করার চেষ্টা করব।
লেপি

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

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

আমি মনে করি ব্রেকআপপয়েন্টের বিষয়টি আমি আলাদা করে রেখেছি। সিএলআর 2 এর অধীনে চলার সময় ব্রেকপয়েন্টগুলি আবার কোড চালানোর সময় পুনরায় মূল্যায়ন করা বলে মনে হচ্ছে, নতুন কোড হলেও। সিএলআর 4 এ ব্রেকপয়েন্টগুলি কেবলমাত্র মূল কোডটিতে 'স্টিক' করে। আমি সিএলআর 4 আচরণের একটি ছোট স্ক্রিনকাস্ট তৈরি করেছি @ স্ক্রিনকাস্ট . com/t/eiSilNzL5Nr । লক্ষ করুন যে অনুরোধের মধ্যে টাইপের নাম পরিবর্তন হয়।
লেপি

আমি সংযোগে একটি বাগ দায়ের করেছি। Repro বেশ সহজ :) connect.microsoft.com/VisualStudio/feedback/details/684089
leppie

3

আমি শার্প ডেভেলপ ডিবাগার টিমে ইঞ্জিনিয়ার :-)

আপনি কি সমস্যার সমাধান করেছেন?

আপনি কি এটি শার্প ডেভেলপে ডিবাগ করার চেষ্টা করেছিলেন? .NET- এ যদি কোনও ত্রুটি থাকে তবে আমি ভাবছি যে আমাদের কিছুটা বাস্তবায়ন করা দরকার। আমি এই বিষয়টি সম্পর্কে সচেতন নই।

আপনি কি এটি আইপিএস-এ ডিবাগ করার চেষ্টা করেছিলেন? বিশেষত ডিবাগ প্রতীক ছাড়া। এটি সি # কোডটি ডিবাগ করবে, তবে আইএল নির্দেশাবলী সুন্দরভাবে ডিবাগযোগ্য কিনা তা আমাদের বলবে। (মনে রাখবেন যে আইএলএসপি ডিবাগারটি বিটা হলেও)

মূল আইএল কোডটিতে দ্রুত নোট:

  • .line 19,19: 6,15 '' দু'বার আসে?
  • .20 20,20: 7,14 '' অন্তর্নিহিত ক্রম বিন্দুতে শুরু হয় না (স্ট্যাকটি খালি নয়)। আমি চিন্তিত আছি
  • .20 20,20: 7,14 '' এ "কার এক্স" (ভাল) এর পাশাপাশি "# ফ নুও এক্স" (খারাপ?) এর কোড অন্তর্ভুক্ত রয়েছে
  • ret পরে nop সম্পর্কিত। স্টলোক, এলডলোক, রেট সম্পর্কে কী? আমি মনে করি সি # এই কৌশলটি একটি আলাদা সিকোয়েন্স পয়েন্ট রিট করার জন্য ব্যবহার করে।

ডেভিড


+1 প্রতিক্রিয়াটির জন্য ধন্যবাদ, প্রথম পয়েন্ট হিসাবে, কোড জেনারেটর থেকে দুর্ভাগ্যজনক পার্শ্ব-প্রতিক্রিয়া, তবে ক্ষতিহীন বলে মনে হচ্ছে। দ্বিতীয় বিষয়, এটি আমার প্রয়োজন ঠিক এটি তবে আমি আপনার পয়েন্টটি দেখতে পাচ্ছি এটি এটিকে দেখবে। আপনি শেষ পয়েন্টটি বলতে চাইছেন তা নিশ্চিত নন।
লেপি

তৃতীয় পয়েন্টটি ছিল। লাইন 22,22: 7,40 '' আইএল_0020 এর আগে হওয়া উচিত। বা আইএল_0020 এর আগে কিছু হওয়া উচিত, অন্যথায় কোডটি এখনও 20 ডাব্লু .20: 7,14 '' হিসাবে গণনা করে। চতুর্থ বিন্দুটি "ret, nop" এ "sloc, .line, ldloc, ret" দিয়ে প্রতিস্থাপন করা হতে পারে। আমি ইতিমধ্যে প্যাটার্নটি দেখেছি, সম্ভবত এটি অনর্থক ছিল, তবে সম্ভবত এটির কোনও কারণ ছিল।
dsrbecky

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