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()