Neovim เคยเจอปัญหาช้าๆ ค้างๆ งงๆ มั้ย เราจะ Debug มันอย่างไร ?
2024-10-13
เปิดไฟล์ที่ต้องการตรวจสอบ เช่น main.zig จากนั้นรันคำสั่งด้านล่าง
nvim main.zig
:profile start profile.log
:profile func *
:profile file *.
ทดสอบคำสั่ง เช่น เจอปัญหาว่า save
:wแล้วค้าง จากนั้น pause profile และออกจาก Neovim
:profile pause
ปิด Neovim
:wq!เมื่อปิดแล้วจะพบไฟล์ใหม่ชื่อprofile.logโดยตัวอย่างจะแสดงให้เห็นว่าเวลา zig จะ format on save โดยกินเวลาไป 8 วินาที กว่า OMG!
cat profile.log | grep Total
# output
Total time: 0.016602
Total time: 0.000170
Total time: 0.000007
Total time: 0.003620
Total time: 0.000040
Total time: 0.001967
Total time: 0.000063
Total time: 0.000077
Total time: 0.000048
Total time: 0.000023
Total time: 0.000054
Total time: 8.518207 <----- THIS PROBLEM !!!
Total time: 0.000656
Total time: 0.000189
Total time: 0.007302
Total time: 0.000011
Total time: 0.000012
Total time: 0.005026
Total time: 0.000020
Total time: 0.000009
Total time: 0.004519
Total time: 0.004556
Total time: 0.001258
Total time: 0.001064
Total time: 0.000029
Total time: 0.000128
หรือจริงๆแล้วหากลองเปิดไฟล์ profile.log เลื่อนมาด้านล่างสุดจะพบกับ TEXT “FUNCTIONS SORTED ON TOTAL TIME”
ซึ่งจะเห็นได้ชัดว่าจริงๆแล้ว function ไหนที่ทำให้ช้า !
FUNCTIONS SORTED ON TOTAL TIME
count total (s) self (s) function
1 8.518207 0.000454 zig#fmt#Format()
12 0.016602 0.001915 <SNR>39_HandleActivity()
12 0.007302 <SNR>39_GetCurrentFile()
1 0.005026 0.004977 <SNR>1_LoadFTPlugin()