كود التصحيح عن بعد مع VSCode دون التطوير عن بعد

في مرحلة ما ، تبدأ الحاجة إلى تصحيح أخطاء برنامج لا يمكن تصحيحه على جهاز كمبيوتر يعمل. في حالتي ، كنت بحاجة إلى تصحيح أخطاء برنامج يتصل عبر D-Bus مع iwd ، وهو برنامج خفي يدير اتصالات Wi-Fi ، على جهاز كمبيوتر محمول.



يحتوي VSCode على وظيفة إضافية للتطوير عن بُعد مصممة خصيصًا لمثل هذه الحالات. لم يناسبني لعدة أسباب:



  1. التوقيع التلقائي لالتزامات GnuPG من VSCode لم ينجح.
  2. لم يعمل وكيل SSH (ربما بسبب تعطيل إعادة توجيه الوكيل).
  3. يبدو أن فتح دليل محلي على جهاز بعيد ، والذي يبدو أنه موجود في RD ، لم ينجح (لم يتم تضمين بعض الملفات الضرورية في التحكم في الإصدار ، ولم أرغب في إجراء نسخ يدوي عبر الشبكة في كل مرة).


أنا أكتب في Go ، لذا فإن الاختراق الذي سأصفه هو لمصحح أخطاء Delve . النهج نفسه يتغير قليلاً بغض النظر عن لغة البرمجة ؛ يمكن عمل مماثل لـ VSCode المستخدم في Python ptvsd وأي مصحح أخطاء آخر يسمح بالاتصالات عن بُعد.



TL ؛ DR آخر
  1. نكتب نصًا يقوم ببناء ثنائي مع دعم التصحيح ، ونسخه إلى الجهاز الهدف عبر SCP وبدء Delve.
  2. قم بإنشاء ملف تعريف تصحيح أخطاء في VSCode والذي يتم إرفاقه بالجهاز الهدف.
  3. قم بإنشاء مهمة في VSCode تبدأ البرنامج النصي من الخطوة 1 وإضافته اعتمادًا على ملف تعريف التصحيح.


البرمجة النصية Delve Build and Run



يمكن أن يعمل Delve في وضع خادم التصحيح ، مما يسمح للعملاء بالاتصال عبر الشبكة.



لإكمال إجراء الإنشاء / التحميل / التشغيل بالكامل ، يمكنك كتابة برنامج نصي بسيط bash أو Makefile ، لكني أحب Taskfile أكثر لاستبدالها في مثل هذه الحالات ، لذلك سأقدم ملفي الخاص Taskfile.yml، والذي لا يختلف كثيرًا عن برنامج shell النصي وظيفيًا:



version: '2'

tasks:
  killall:
    cmds:
      #  Delve   ,
      #      ,
      #    
      - ssh target_machine killall dlv || true
  push:
    deps:
      - killall
    cmds:
      #    
      - go build -gcflags="all=-N -l" -o ./build/debug_binary ./cmd/program
      #     
      - scp ./build/debug_binary target_machine:/home/tdemin/Desktop/debug_binary
  delve:
    deps:
      - push
    cmds:
      #  dlv         64001;
      #   tmux    ,    
      #  dlv,  &  nohup   
      #  
      - ssh target_machine '(cd ~ && chmod +x Desktop/debug_binary && tmux new -d dlv --headless -l \[::\]:64001 exec ./Desktop/debug_binary)'


يمكن الآن بدء العملية برمتها بأمر task delve؛ الموضوعة في Taskfile.ymlالتبعيات تضمن إنهاء Delve (يجب أن يتم ذلك قبل SCP ، لأنه scpلن يسمح بالكتابة فوق الثنائي الذي يمكن قراءته بواسطة dlv في هذه اللحظة) ، وبناء / ملء وبدء عملية Delve جديدة في الخلفية على الجهاز الهدف.



إعداد ملف تعريف التصحيح



.vscode/launch.jsonسيبدو الملف الذي يحدد ملفات تعريف تصحيح الأخطاء كما يلي:



{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Attach to target",
            // dlv  API v1  ,
            //     --api-version
            "apiVersion": 1,
            "type": "go",
            "request": "attach",
            "mode": "remote",
            //       ; , 
            //  ,      ,
            //         
            "remotePath": "${workspaceFolder}",
            //   ,     
            //   
            "preLaunchTask": "Run Delve on target",
            "port": 64001,
            "host": "target_machine"
        }
    ]
}


.vscode/tasks.jsonستبدو مهمة التجميع المقابلة في الملف كما يلي:



{
    "version": "2.0.0",
    "tasks": [
        {
            //      preLaunchTask  launch.json
            "label": "Run Delve on target",
            "type": "shell",
            //  Taskfile
            "command": "task delve",
            "group": {
                "kind": "test",
                "isDefault": true
            },
            "presentation": {
                //       
                // ,   
                "reveal": "silent"
            }
        }
    ]
}


تصحيح



بعد تكوين كل شيء ، يمكنك الضغط على F5 ، ستبدأ جلسة تصحيح الأخطاء:



عملية التصحيح في VSCode



تعمل هذه الطريقة ، ولكن لها قيد كبير: لا يُظهر الجهاز المدمج في VSCode الإدخال / الإخراج القياسي للعملية التي يتم تصحيحها. إذا كنت في حاجة إليها ، بعد بدء التصحيح ، يمكنك SSH إلى جلسة tmux التي يعمل فيها البرنامج في الخلفية.



الروابط






All Articles