Tim kami ingin dapat menjalankan debugger Visual Studio terhadap contoh aplikasi ASP.NET yang digunakan untuk kluster Kubernetes internal kami. Saya perlu mencari cara untuk menyelesaikan puzzle tapi saya tidak terlalu akrab dengan Visual Studio 2019.
- Gambar Docker dikompilasi dengan gambar .NET Core resmi dan telah / vsdbg diisi dengan versi terbaru (yang tidak mendukung --attach).
- Visual Studio berfungsi dengan Docker Desktop saya.
- Kubectl dikonfigurasi dengan benar. Saya bisa menggunakan cluster kubernet yang disertakan dengan Docker Desktop atau cluster kubernetes internal kami untuk pengujian.
- Azure saat ini bukan opsi. Saya mengerti dari dokumentasi bahwa inilah yang Microsoft inginkan untuk saya lakukan.
Bagaimana saya mengkonfigurasi Visual Studio untuk dapat melakukan ini?
c#
visual-studio
kubernetes
visual-studio-debugging
Thorbjørn Ravn Andersen
sumber
sumber
Jawaban:
Baik. Mari kita memulainya. Pertama-tama pastikan Anda telah menerbitkan aplikasi Anda dalam mode Debug! Saya lebih suka menggunakan fitur Docker multi-tahap build baru untuk membangun gambar saya jadi saya akan menulis sesuatu seperti ini di akhir tahap build di Dockerfile:
Untuk mendorong gambar ke Minikube saya menggunakan registry kontainer lokal seperti yang dijelaskan di sini. Tetapi Anda dapat melakukannya seperti biasanya. Ketika wadah Anda sudah siap dan berjalan, kami dapat mulai meretasnya. Saya akan menggunakan Powershell untuk tujuan itu tetapi hal yang sama dapat dengan mudah ditulis ulang dalam bahasa terminal lainnya. Anda dapat mengikuti tutorial langkah demi langkah dan menjalankan perintah di terminal Anda satu per satu memeriksa nilai var dengan perintah gema bila perlu. Dalam file * .yml Anda, Anda harus meminta pemilih memilih sesuatu seperti ini:
Raih dan gunakan untuk mendefinisikan $ Selector var di terminal Powershell Anda:
Anda perlu menemukan pod tempat aplikasi kemas Anda dijalankan oleh pemilihnya:
Dengan asumsi bahwa Anda hanya memiliki satu wadah di pod sekarang Anda dapat menjalankan perintah pada wadah itu. Secara default container tidak memiliki vsdbg, jadi silakan dan instal:
Selanjutnya, Anda perlu menemukan PID aplikasi Anda di dalam wadah:
Biasanya itu sama dengan 1 tetapi lebih baik membuat asumsi lebih sedikit. Itu dia. Sekarang Anda dapat memulai debugger:
Jangan lupa untuk menjalankan perintah berikut sebelum Anda menutup jendela, jika tidak aplikasi Anda akan macet selamanya:
Mari kita menggabungkan semuanya, membuat skrip yang dapat digunakan kembali dan menyimpannya di dekat akar karena Anda dapat menggunakannya dengan semua proyek Core ASP.NET Anda:
Sekarang Anda dapat menjalankan skrip ini seperti ini ketika terminal dijalankan dari folder skrip:
Tapi bukankah kita seharusnya debugging dari Visual Studio? Iya! Mari kita melangkah lebih jauh dan meluncurkan proses terminal kami dari Visual Studio MIEngine. Buka proyek Anda di Visual Studio. Tambahkan file XML baru dengan konten berikut dan beri nama kubedbg.xml:
Pada
-File
parameter Anda perlu menentukan path absolut ke file skrip yang kami buat sebelumnya. Kemudian tekan Ctrl + Alt + A untuk membuka Command Window dan jalankan perintah berikut:Debug.MIDebugLaunch /Executable:dotnet /OptionsFile:absolute_path_to_kubedbg_xml
Perintah ini akan memulai proses debugging di dalam Visual Studio dengan semua manfaat standar yang Anda harapkan. Tetapi jangan berhenti men-debug dengan cara lain selain dengan menekan Lepaskan Semua dari menu Debug! Meskipun perintah ini sangat tidak nyaman untuk menulis sepanjang waktu. Untungnya di Visual Studio, Anda dapat menentukan alias untuk perintah dengan parameter. Akhirnya, Anda akan memerlukankubedbg.xml
file baru untuk setiap proyek. Dengan pemikiran ini, lanjutkan dan buat alias pertama Anda dengan mengetik perintah berikut di Command Window:Setelah itu, Anda dapat mulai men-debug hanya dengan mengeksekusi kubedbg.mywebapp di Command Window. Bahkan lebih baik, Anda dapat menjalankan perintah yang sama dari Combobox Temukan toolbar tetapi dengan awalan:
>kubedbg.mywebapp.
Itu tidak sulit karena ada penyelesaian teks juga. Anda dapat membaca lebih lanjut tentang alias alias perintah di sini. Selamat men-debug! PS: Sebagai bonus, sama persis dengan cara Anda dapat men-debug aplikasi Anda bahkan ketika berjalan di dalam cloud publik. Ketika kubectl ditugaskan ke sebuah cluster di cloud publik, ia hanya bekerja dengan skrip yang sama dan membuat lebih sedikit asumsi dibayar kembali karena di dalam proses ID nyata cluster tidak sama dengan 1sumber
--attach
flag digunakan dalam perintah kubectl yang digunakan untuk melampirkan debugger, yang sedikit mengkhawatirkan saya. Bisakah Anda mengonfirmasi bahwa ini berhasil saat menyiapkan jawaban ini?