Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Azure Functions memungkinkan Anda mengembangkan fungsi Anda sebagai skrip PowerShell.
Anda dapat men-debug fungsi PowerShell secara lokal seperti yang Anda lakukan pada skrip PowerShell menggunakan alat pengembangan standar berikut:
- Visual Studio Code: Editor teks gratis, ringan, dan sumber terbuka Microsoft dengan ekstensi PowerShell yang menawarkan pengalaman pengembangan PowerShell penuh.
- Konsol PowerShell: Debug menggunakan perintah yang sama dengan yang akan Anda gunakan untuk men-debug proses PowerShell lainnya.
Azure Functions Core Tools mendukung debugging lokal untuk Azure Functions, termasuk fungsi PowerShell.
Contoh aplikasi fungsi
Aplikasi fungsi yang digunakan dalam artikel ini memiliki satu fungsi yang dipicu HTTP dan memiliki file berikut:
PSFunctionApp
| - HttpTriggerFunction
| | - run.ps1
| | - function.json
| - local.settings.json
| - host.json
| - profile.ps1
Aplikasi fungsi ini mirip dengan yang Anda dapatkan saat menyelesaikan quickstart PowerShell.
Kode fungsi dalam run.ps1 terlihat seperti skrip berikut:
param($Request)
$name = $Request.Query.Name
if($name) {
$status = 200
$body = "Hello $name"
}
else {
$status = 400
$body = "Please pass a name on the query string or in the request body."
}
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = $status
Body = $body
})
Mengatur titik lampirkan
Untuk melakukan debug fungsi PowerShell apa pun, fungsi tersebut perlu berhenti agar dapat melampirkan debugger.
Wait-Debugger Cmdlet menghentikan eksekusi dan menunggu debugger.
Nota
Saat menggunakan PowerShell 7, Anda tidak perlu menambahkan pemanggilan Wait-Debugger di dalam kode Anda.
Yang perlu Anda lakukan adalah menambahkan panggilan ke cmdlet Wait-Debugger tepat di atas instruksi if, sebagai berikut:
param($Request)
$name = $Request.Query.Name
# This is where we will wait for the debugger to attach
Wait-Debugger
if($name) {
$status = 200
$body = "Hello $name"
}
# ...
Pemecahan masalah dimulai pada pernyataan if.
Dengan Wait-Debugger di tempat, Anda sekarang dapat men-debug fungsi menggunakan Visual Studio Code atau konsol PowerShell.
Debug di Visual Studio Code
Untuk men-debug fungsi PowerShell di Visual Studio Code, Anda harus menginstal hal berikut:
- Ekstensi PowerShell untuk Visual Studio Code
- ekstensi Azure Functions untuk Visual Studio Code
- PowerShell Core 6.2 atau yang lebih tinggi
Setelah menginstal dependensi ini, muat proyek PowerShell Functions yang ada, atau buat proyek PowerShell Functions pertama Anda.
Nota
Jika proyek Anda tidak memiliki file konfigurasi yang diperlukan, Anda akan diminta untuk menambahkannya.
Mengatur versi PowerShell
PowerShell Core diinstal berdampingan dengan Windows PowerShell. Atur PowerShell Core sebagai versi PowerShell untuk digunakan dengan ekstensi PowerShell untuk Visual Studio Code.
Tekan F1 untuk menampilkan palet perintah, lalu cari
Session.Pilih PowerShell: Perlihatkan Menu Sesi.
Jika sesi Saat ini bukan PowerShell Core 6, pilih Beralih ke: PowerShell Core 6.
Saat File PowerShell terbuka, Anda akan melihat versi yang ditampilkan berwarna hijau di kanan bawah jendela. Memilih teks ini juga menampilkan menu sesi. Untuk mempelajari selengkapnya, lihat Memilih versi PowerShell untuk digunakan dengan ekstensi.
Mulai aplikasi fungsi
Verifikasi bahwa Wait-Debugger diatur dalam fungsi tempat Anda ingin melampirkan debugger. Dengan Wait-Debugger ditambahkan, Anda dapat men-debug aplikasi fungsi menggunakan Visual Studio Code.
Pilih panel Debug lalu Lampirkan ke fungsi PowerShell.
Anda juga dapat menekan tombol F5 untuk memulai debugging.
Operasi memulai debug menjalankan tugas-tugas berikut:
- Jalankan
func extensions installdi terminal untuk menginstal ekstensi Azure Functions apa pun yang diperlukan oleh aplikasi fungsi Anda. - Jalankan
func host startdi terminal untuk memulai aplikasi fungsi pada Functions host. - Lampirkan debugger PowerShell ke runspace PowerShell dalam runtime Functions.
Nota
Anda perlu memastikan PSWorkerInProcConcurrencyUpperBound diatur ke 1 untuk memastikan pengalaman penelusuran kesalahan yang benar di Visual Studio Code. Ini adalah default.
Dengan aplikasi fungsi Anda berjalan, Anda memerlukan konsol PowerShell terpisah untuk memanggil fungsi yang dipicu HTTP.
Dalam hal ini, konsol PowerShell adalah klien.
Invoke-RestMethod digunakan untuk memicu fungsi.
Di konsol PowerShell, jalankan perintah berikut:
Invoke-RestMethod "http://localhost:7071/api/HttpTrigger?Name=Functions"
Anda akan melihat bahwa respons tidak segera dikembalikan. Itu karena Wait-Debugger telah melampirkan debugger dan eksekusi PowerShell masuk ke mode istirahat sesegera mungkin. Ini karena konsep BreakAll, yang dijelaskan kemudian. Setelah Anda menekan tombol continue , debugger sekarang berhenti di baris tepat setelah Wait-Debugger.
Pada titik ini, debugger sudah terlampir dan Anda dapat melakukan semua operasi debugger seperti biasa. Untuk informasi selengkapnya tentang menggunakan debugger di Visual Studio Code, lihat dokumentasi resmi.
Setelah Anda melanjutkan dan menjalankan skrip sepenuhnya, Anda akan melihat bahwa:
- Konsol PowerShell yang melakukan
Invoke-RestMethodtelah mengembalikan hasil - Konsol Terintegrasi PowerShell di Visual Studio Code sedang menunggu skrip dijalankan
Kemudian ketika Anda memanggil fungsi yang sama, debugger di ekstensi PowerShell berhenti tepat setelah Wait-Debugger.
Penelusuran kesalahan di Konsol PowerShell
Nota
Bagian ini mengasumsikan Anda telah membaca dokumen Azure Functions Core Tools dan tahu cara menggunakan func host start perintah untuk memulai aplikasi fungsi Anda.
Buka konsol, cd ke direktori aplikasi fungsi Anda, dan jalankan perintah berikut:
func host start
Dengan aplikasi fungsi berjalan dan Wait-Debugger siap, Anda dapat menyambungkan ke proses. Anda memerlukan dua konsol PowerShell lagi.
Salah satu konsol bertindak sebagai klien. Dari ini, Anda memanggil Invoke-RestMethod untuk memicu fungsi. Misalnya, Anda dapat menjalankan perintah berikut:
Invoke-RestMethod "http://localhost:7071/api/HttpTrigger?Name=Functions"
Anda akan menyadari bahwa tidak ada respons yang dikembalikan, yang merupakan akibat dari Wait-Debugger. Runspace PowerShell kini sedang menunggu agar debugger terpasang. Ayo kita lampirkan itu.
Di konsol PowerShell lainnya, jalankan perintah berikut:
Get-PSHostProcessInfo
Cmdlet ini mengembalikan tabel yang terlihat seperti output berikut:
ProcessName ProcessId AppDomainName
----------- --------- -------------
dotnet 49988 None
pwsh 43796 None
pwsh 49970 None
pwsh 3533 None
pwsh 79544 None
pwsh 34881 None
pwsh 32071 None
pwsh 88785 None
Catat ProcessId untuk item dalam tabel dengan ProcessName sebagai dotnet. Proses ini adalah aplikasi fungsi Anda.
Selanjutnya, jalankan cuplikan berikut:
# This enters into the Azure Functions PowerShell process.
# Put your value of `ProcessId` here.
Enter-PSHostProcess -Id $ProcessId
# This triggers the debugger.
Debug-Runspace 1
Setelah dimulai, debugger berhenti dan menampilkan sesuatu seperti output berikut:
Debugging Runspace: Runspace1
To end the debugging session type the 'Detach' command at the debugger prompt, or type 'Ctrl+C' otherwise.
At /Path/To/PSFunctionApp/HttpTriggerFunction/run.ps1:13 char:1
+ if($name) { ...
+ ~~~~~~~~~~~
[DBG]: [Process:49988]: [Runspace1]: PS /Path/To/PSFunctionApp>>
Pada titik ini, Anda dihentikan di titik henti di debugger PowerShell. Dari sini, Anda dapat melakukan semua operasi debug biasa, melangkahi, melangkah ke, melanjutkan, keluar, dan lainnya. Untuk melihat kumpulan lengkap perintah debug yang tersedia di konsol, jalankan h perintah atau ? .
Anda juga dapat mengatur titik henti pada tingkat ini dengan Set-PSBreakpoint cmdlet.
Ketika Anda melanjutkan dan sepenuhnya memanggil skrip Anda, Anda akan melihat bahwa:
- Konsol PowerShell tempat Anda menjalankan
Invoke-RestMethodsekarang telah mengembalikan hasilnya. - Konsol PowerShell tempat Anda menjalankan
Debug-Runspacesedang menunggu skrip dijalankan.
Anda dapat memanggil fungsi yang sama lagi (menggunakan Invoke-RestMethod misalnya) dan debugger berhenti tepat setelah Wait-Debugger perintah.
Hal-hal yang harus diperhatikan dalam penelusuran kesalahan
Perlu diingat masalah berikut saat men-debug kode Functions Anda.
BreakAll dapat menyebabkan debugger Anda rusak di tempat yang tidak terduga
Ekstensi PowerShell menggunakan Debug-Runspace, yang pada gilirannya bergantung pada fitur PowerShell BreakAll . Fitur ini memberi tahu PowerShell untuk berhenti pada perintah pertama yang dijalankan. Perilaku ini memberi Anda kesempatan untuk mengatur titik henti dalam runspace yang di-debug.
Runtime dari Azure Functions menjalankan beberapa perintah tertentu sebelum benar-benar memanggil skrip Anda run.ps1, jadi ada kemungkinan debugger akhirnya akan berhenti pada Microsoft.Azure.Functions.PowerShellWorker.psm1 atau Microsoft.Azure.Functions.PowerShellWorker.psd1.
Jika terjadi jeda ini, jalankan perintah continue atau c untuk melewatkan breakpoint ini. Anda kemudian berhenti di titik henti yang diharapkan.
Penyelesaian Masalah
Jika Anda mengalami kesulitan selama penelusuran kesalahan, Anda harus memeriksa hal-hal berikut ini:
| Periksa | Tindakan |
|---|---|
Jalankan func --version dari terminal. Jika Anda mendapatkan kesalahan yang func tidak dapat ditemukan, Core Tools (func.exe) mungkin hilang dari variabel lokal path . |
Instal ulang Core Tools. |
| Di Visual Studio Code, terminal default harus memiliki akses ke func.exe. Pastikan Anda tidak menggunakan terminal default yang tidak menginstal Core Tools, seperti Subsistem Windows untuk Linux (WSL). | Atur shell default di Visual Studio Code ke PowerShell 7 (disarankan) atau Windows PowerShell 5.1. |
Langkah selanjutnya
Untuk mempelajari selengkapnya tentang mengembangkan Functions menggunakan PowerShell, lihat Panduan pengembang Azure Functions PowerShell.