কুবারনেটসে চলমান ASP.NET কোর ওয়েব অ্যাপের সাথে ভিজ্যুয়াল স্টুডিও ডিবাগারটি ব্যবহার করবেন?


9

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

  • ডকার চিত্রটি অফিসিয়াল .NET কোর চিত্রগুলির সাথে সংকলিত এবং / vsdbg সর্বশেষ সংস্করণ (যা --attach সমর্থন করে না) দিয়ে জনবহুল।
  • ভিজ্যুয়াল স্টুডিও আমার ডকার ডেস্কটপের সাথে কাজ করে।
  • কুবেক্টেল সঠিকভাবে কনফিগার করা হয়েছে। আমি পরীক্ষার জন্য ডকার ডেস্কটপের সাথে অন্তর্ভুক্ত কুবেরনেটস ক্লাস্টার বা আমাদের অভ্যন্তরীণ কুবেরনেটস ক্লাস্টারটি ব্যবহার করতে পারি।
  • অ্যাজুরে বর্তমানে কোনও বিকল্প নয়। আমি ডকুমেন্টেশন থেকে বুঝতে পারি যে মাইক্রোসফ্ট আমাকে এটি করতে পছন্দ করে।

এটি করতে সক্ষম হতে আমার কীভাবে ভিজ্যুয়াল স্টুডিও কনফিগার করা উচিত?


ওহে. আমি জিজ্ঞাসা করতে চাই যে আপনি কেন প্রথম তালিকা আইটেমে "... / vsdbg সর্বশেষ সংস্করণ (যা --attach সমর্থন করে না) দিয়ে জনবহুল হয়েছে" হিসাবে বলেছেন? " ? আপনার যদি vsdbg থাকে; এটি সংযুক্তি সমর্থন করা উচিত।
সাফাক উলুসয়

@ সাফাকউলসয় আমি যে ভার্সডবিজি ইনস্টল করেছি তা - আটাচ পতাকা সমর্থন করে না।
থরবজর্ন রাভন অ্যান্ডারসন

উত্তর:


4

ঠিক আছে. এটা শুরু করা যাক. প্রথমে নিশ্চিত হয়ে নিন যে আপনি নিজের অ্যাপটি ডিবাগ মোডে প্রকাশ করেছেন! আমি আমার চিত্রগুলি তৈরি করার জন্য একটি নতুন ডকার বৈশিষ্ট্য মাল্টি-স্টেজ বিল্ড ব্যবহার করতে পছন্দ করি যাতে আমি ডকফাইফিলের একটি বিল্ড স্টেজের শেষে এই জাতীয় কিছু লিখতে পারি:

RUN dotnet publish -c Debug -o ./results

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

selector:
  matchLabels:
    app: mywebapp

এটি গ্র্যাব করুন এবং আপনার পাওয়ারশেল টার্মিনালটিতে একটি var নির্বাচক ভার সংজ্ঞায়িত করতে ব্যবহার করুন:

$Selector = 'app=mywebapp'

আপনার ধারকযুক্ত অ্যাপ্লিকেশনটি এর নির্বাচক দ্বারা চালিত হচ্ছে এমন একটি পড আপনাকে খুঁজে বের করতে হবে:

$pod = kubectl get pods --selector=$Selector -o jsonpath='{.items[0].metadata.name}';

ধরে নিচ্ছি যে পডে আপনার কাছে কেবল একটি ধারক রয়েছে আপনি এখন সেই ধারকটিতে আদেশগুলি চালিত করতে পারেন। ডিফল্ট কনটেইনার দ্বারা vsdbg ইনস্টল করা নেই তাই এগিয়ে যান এবং এটি ইনস্টল করুন:

kubectl exec $pod -i -- apt-get update;
kubectl exec $pod -i -- apt-get install -y unzip;
kubectl exec $pod -i -- curl -sSL https://aka.ms/getvsdbgsh -o '/root/getvsdbg.sh';
kubectl exec $pod -i -- bash /root/getvsdbg.sh -v latest -l /vsdbg;

এরপরে, আপনাকে ধারকটির ভিতরে আপনার অ্যাপের পিআইডি সন্ধান করতে হবে:

$prid = kubectl exec $pod -i -- pidof -s dotnet;

সাধারণত এটি 1 এর সমান তবে কম অনুমান করা ভাল। এটাই. এখন আপনি একটি ডিবাগার শুরু করতে পারেন:

kubectl exec $pod -i -- /vsdbg/vsdbg --interpreter=mi --attach $prid;

উইন্ডোটি বন্ধ করার আগে নিম্নলিখিত কমান্ডগুলি কার্যকর করতে ভুলবেন না অন্যথায় আপনার অ্যাপ চিরতরে আটকে থাকবে:

-target-detach
-gdb-exit

আসুন সমস্ত কিছু একসাথে রেখে, পুনরায় ব্যবহারযোগ্য স্ক্রিপ্ট তৈরি করুন এবং এটিকে মূলের কাছাকাছি কোথাও সংরক্ষণ করুন যেহেতু আপনি এটি আপনার সমস্ত এএসপি.নেট কোর প্রকল্পগুলির সাথে ব্যবহার করতে পারেন:

param(
    # the selector from your yml file
    #  selector:
    #    matchLabels:
    #      app: myweb
    # -Selector app=myweb
    [Parameter(Mandatory=$true)][string]$Selector
)

Write-Host '1. searching pod by selector:' $Selector '...';
$pod = kubectl get pods --selector=$Selector -o jsonpath='{.items[0].metadata.name}';

Write-Host '2. installing updates ...';
kubectl exec $pod -i -- apt-get update;

Write-Host '3. installing unzip ...';
kubectl exec $pod -i -- apt-get install -y --no-install-recommends unzip;

Write-Host '4. downloading getvsdbgsh ...';
kubectl exec $pod -i -- curl -sSL https://aka.ms/getvsdbgsh -o '/root/getvsdbg.sh';

Write-Host '5. installing vsdbg ...';
kubectl exec $pod -i -- bash /root/getvsdbg.sh -v latest -l /vsdbg;

$cmd = 'dotnet';
Write-Host '6. seaching for' $cmd 'process PID in pod:' $pod '...';
$prid = kubectl exec $pod -i -- pidof -s $cmd;

Write-Host '7. attaching debugger to process with PID:' $pid 'in pod:' $pod '...';
kubectl exec $pod -i -- /vsdbg/vsdbg --interpreter=mi --attach $prid;

টার্মিনালটি স্ক্রিপ্ট ফোল্ডার থেকে চলার সময় আপনি এই স্ক্রিপ্টটি এভাবে চালিত করতে পারেন:

powershell -ExecutionPolicy Bypass -File kubedbg.ps1 -Selector app=mywebapp

তবে আমাদের কি ভিজ্যুয়াল স্টুডিও থেকে ডিবাগ করার কথা নয়? হ্যাঁ! আসুন আরও এগিয়ে যান এবং ভিজ্যুয়াল স্টুডিও এমআইইজাইন থেকে আমাদের টার্মিনাল প্রক্রিয়া চালু করুন। আপনার প্রকল্পটি ভিজ্যুয়াল স্টুডিওতে খুলুন। নিম্নলিখিত কন্টেন্ট সহ নতুন এক্সএমএল ফাইল যুক্ত করুন এবং এর নাম রাখুন kubedbg.xML:


<PipeLaunchOptions xmlns="http://schemas.microsoft.com/vstudio/MDDDebuggerOptions/2014"
    PipePath="powershell" TargetArchitecture="x64" MIMode="clrdbg"
    PipeArguments="
      -ExecutionPolicy Bypass
      -File C:\kube\kubedbg.ps1
      -Selector app=mywebapp">
  <LaunchCompleteCommand>None</LaunchCompleteCommand>
</PipeLaunchOptions>

ইন -Fileপ্যারামিটার আপনি স্ক্রিপ্ট ফাইল আমরা আগে নির্মিত সঠিক পথটি নির্দিষ্ট করতে হবে। তারপরে কমান্ড উইন্ডোটি খুলতে এবং নিম্নলিখিত কমান্ডটি চালনার জন্য Ctrl + Alt + A টিপুন: Debug.MIDebugLaunch /Executable:dotnet /OptionsFile:absolute_path_to_kubedbg_xml এই কমান্ডটি আপনার প্রত্যাশিত সমস্ত স্ট্যান্ডার্ড সুবিধাগুলি দিয়ে ভিজ্যুয়াল স্টুডিওতে ডিবাগিং প্রক্রিয়া শুরু করবে। তবে ডিবাগ মেনু থেকে ডিটাচ অল টিপে অন্য কোনও উপায়ে ডিবাগিং বন্ধ করবেন না! যদিও এই আদেশটি সর্বদা লেখার পক্ষে খুব সুবিধাজনক নয়। ভাগ্যক্রমে ভিজ্যুয়াল স্টুডিওতে, আপনি পরামিতিগুলির সাথে আদেশের জন্য উপকরণ নির্দিষ্ট করতে পারেন। শেষ পর্যন্ত, আপনার kubedbg.xmlপ্রতিটি প্রকল্পের জন্য একটি নতুন ফাইলের প্রয়োজন হবে । এটিকে সামনে রেখে কমান্ড উইন্ডোতে নিম্নলিখিত কমান্ডটি টাইপ করে আপনার প্রথম উপন্যাসটি তৈরি করুন:

alias kubedbg.mywebapp Debug.MIDebugLaunch /Executable:dotnet 
/OptionsFile:absolute_path_to_kubedbg.xml

এর পরে, আপনি কেবল কমান্ড উইন্ডোতে kubedbg.mywebapp চালিয়ে ডিবাগিং শুরু করতে পারেন। আরও ভাল আপনি একই কমান্ডটি সন্ধান করুন টুলবার কম্বোবক্স থেকে কিন্তু উপসর্গ সহ চালনা করতে পারেন: >kubedbg.mywebapp.এটি কোনও পাঠ্য সমাপ্তিও না হওয়ায় এটি কঠিন নয়। আপনি এখানে কমান্ড এলিয়াস সম্পর্কে আরও পড়তে পারেন। শুভ ডিবাগিং! PS: বোনাস হিসাবে একেবারে ঠিক একইভাবে আপনি কোনও পাবলিক মেঘের অভ্যন্তরে চলার পরেও আপনার অ্যাপ্লিকেশনটি ডিবাগ করতে পারেন। যখন কুবেকেটেলকে জনসাধারণের মেঘে একটি ক্লাস্টারে নির্ধারিত করা হয় তখন এটি ঠিক একই স্ক্রিপ্টের সাথে কাজ করে এবং কম অনুমান করা যায় যেহেতু বাস্তব ক্লাস্টার প্রক্রিয়া আইডি 1 এর সমান নয়


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

হ্যাঁ, সত্যই আমার পক্ষে কাজ করেছেন! তবে কেন জানি আপনার পক্ষে কাজ করে না।
বিভ্রান্ত করুন

এটি আপনার জন্য কাজ করার জন্য নিশ্চিত করার জন্য আপনাকে ধন্যবাদ। আমি আগামীকাল এটি চেষ্টা করব।
থরবজর্ন রাভন অ্যান্ডারসন

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