আপনি কি ভিমে সি ++ কোড ডিবাগ করেন? কিভাবে?


152

প্রশ্নটি আপনার সকলের কাছে, যারা সি ++ অ্যাপ্লিকেশন বিকাশ করতে ভিম ব্যবহার করেন।

আমার জীবনের একটি সময় ছিল, যা 'আমি ভিমকে ঘৃণা করি!' হিসাবে বর্ণনা করা যেতে পারে .. 'ভিম দুর্দান্ত!'

যাইহোক, বেশিরভাগ মাইক্রোসফ্ট ডেভলপমেন্ট আইডিই-তে বড় হয়েছি, আমি সেগুলি ব্যবহার করতে সক্ষম হয়েছি F5- F11কোড, ওয়াচ উইন্ডো, কল স্ট্যাক এবং মূল কোড - ডিবিগিংয়ের সময় শর্টকাট - কোনও জিডিবি কমান্ড টাইপ না করেই দৃশ্যমান।

তাই এখানে প্রশ্ন:

আপনি কি ডিবাগিংয়ের জন্য ভিম ব্যবহার করেন? অথবা আপনি এই উদ্দেশ্যে কিছু আইডিইতে স্যুইচ করেন? কোনটি?

কোডগুলি ডিবাগ করার জন্য যারা ভিম ব্যবহার করেন: সম্পাদকগুলিতে ব্রেকপয়েন্ট সেট করার জন্য কি প্লাগইন রয়েছে, আমরা বর্তমানে যে ডিফল্টটি ডিবাগ করছি তার লাইনটি হাইলাইট করুন, ধাপের সময় অটো-নেভিগেশন, পদক্ষেপে, পদক্ষেপে?

দয়া করে, আমাকে কমান্ড লাইন হিসাবে জিডিবি ব্যবহার করতে বলবেন না, কেবল একটি লাইন দেখুন যা ডিবাগ করা হয়েছে, ইত্যাদি etc.


1
আমি নিশ্চিত যে আপনি এখনও "এড" দিয়ে উন্নয়নশীল এবং ডিবাগ করা লোকগুলি খুঁজে পেতে পারেন।
e2-e4

55
ঈশ্বরের ওহ, তারা প্রশ্নের উত্তর "ডিবাগ আমার সি ++ কোড Plz", কিন্তু ঘনিষ্ঠ এই যেমন খুব স্থানীয় ... হাস্যকর!
পি Shved

17
ব্যবহার করে দেখুন gdb -tui
জয়েশ

1
আপনি কি ভিমে আটকে আছেন বা ইমা্যাক্সের মতো অন্যান্য সম্পাদকগুলিতে সন্ধান করতে ইচ্ছুক যা দুর্দান্ত জিডিবি ইন্টিগ্রেশন বিল্ট-ইন রয়েছে? জিডিবি সহ মূল সমস্যাটি কি ডিফল্টরূপে সিঙ্গেল লাইন আউটপুট বা l (ist) ক্রমাগত টাইপ করা এড়াতে কোন জিডিবি-টুই সাহায্য করে?
jla

1
সুপারসেট: স্ট্যাকওভারফ্লো / সেকশনস / ৪৩৩177817১/ / কনফিগারিং -ভিম- ফর- সি কিন্তু আমি আপনাকে অনুরোধ করছি ক্লাস সচেতনতার জন্য ভিম কীবাইন্ডাইন্ডের সাথে Eclipse ব্যবহার করুন।
সিরো সান্তিলি 郝海东 冠状 病 六四 事件

উত্তর:


76

অন্যান্য উত্তরের বিপরীতে, কমপক্ষে তিনটি বিকল্প রয়েছে যা আপনার প্রয়োজন অনুসারে করে: ক্লেন , পাইক্লান এবং ভিমজিডিবি

তিনটি প্রকল্পই সম্পর্কিত। vimgdb হ'ল ভিমের বিপরীতে একটি প্যাচ এবং ভিমের পুনরায় সংযোগ করা প্রয়োজন। ক্লিভেন হ'ল স্ট্যান্ডলোন প্রোগ্রাম যা নেটবিনস সকেট ইন্টারফেসের মাধ্যমে ভিমের সাথে যোগাযোগ করে। এটি +netbeansবিকল্পটি দিয়ে বিকল্পটি তৈরি করা প্রয়োজন (সাম্প্রতিক লিনাক্স ডিস্ট্রিবিউশনগুলির ক্ষেত্রে এটি এমন হয় যাতে এটি সমস্যা হওয়া উচিত নয়)।

চালকের ওয়েবসাইট থেকে উদ্ধৃতি দিতে:

ক্লাউন উইম এডিটরটিতে সম্পূর্ণ জিডিবি সমর্থন প্রয়োগ করে: ব্রেকপয়েন্টস, ওয়াচ ভেরিয়েবল, জিডিবি কমান্ড সমাপ্তি, সমাবেশ উইন্ডো ইত্যাদি in

আমি মনে করি আপনার অবশ্যই এটি যাওয়া উচিত।

পাইকলওয়ান ওয়েবসাইটের হোমপেজ তিনটি প্রকল্পের মধ্যে একটি তুলনা দেখায়।

কয়েক মাস আগে আমি পাইক্লাইনের চেষ্টা করেছি। এটি সেট আপ করা কিছুটা কঠিন ছিল তবে এটি বাহ্যিক এবং প্রতিশ্রুতিযুক্ত হলেও এটি দেখতে দুর্দান্ত দেখাচ্ছে। আমি সবেমাত্র কিছু পরীক্ষা করেছি এবং আপনি বুকমার্ক ইত্যাদি সেট করতে পারেন, গ্রাফিকাল ডিবাগার থেকে আপনি যে স্বাভাবিক জিনিসটি আশা করতে পারেন। আমি এটি আকস্মিক কারণে ব্যবহার না করে শেষ করেছি তবে আমি এটি আবার চেষ্টা করতে আগ্রহী।


6
কনক জিডিবি একটি দুর্দান্ত বিকল্প। ইনস্টল করা সহজ, সহজ এবং খুব পাওয়ারফুল।
ড্রুউসুক্কার

@ ইউঙ্কলেজিভ ভিমজিডিবি পুরানো। আমি এখানে একটি আপডেটের প্রয়োজনীয়তা প্রকাশ করেছি: github.com/larrupingpig/vimgdb-for-vim7.4/issues/4
hlin117

@ ড্রুউসুক্কার, আপনার উত্তরটি একটি আনুষ্ঠানিক উত্তরের দাবিদার!
solotim

@UncleZeiv আপনার লিঙ্কটি ভিমজিডিবিতে দেয় না। এটি github.com/larrupingpig/vimgdb- for-vim7.4 এ যাওয়া উচিত , আমার ধারণা
mcepl


24

ভিম আনুষ্ঠানিকভাবে 8.1 সংস্করণে বিল্ট-ইন ডিবাগার যুক্ত করেছেন, যা মে 2018 এ প্রকাশিত হয়েছিল The আগস্ট 2017 এর প্রথমদিকে, বৈশিষ্ট্যটি 8.0 প্রকাশের কয়েকটি সংস্করণে উপস্থিত ছিল।

নিম্নলিখিত ভিএম কমান্ডগুলি প্লাগইন লোড করে এবং ডিবাগারটি শুরু করে।

:packadd termdebug
:Termdebug

পরবর্তী কমান্ডটি একটি প্রোগ্রামকে anচ্ছিক আর্গুমেন্ট হিসাবে গ্রহণ করে বা বিকল্পভাবে একটি প্রোগ্রাম gdbউইন্ডো থেকে fileকমান্ডের সাহায্যে লোড করা যায় ।

প্লাগ ইন লোড gdbহওয়ার সাথে সম্পর্কিত উইন্ডোটিতে ইন্টারেক্টিভভাবে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, ব্রেকপয়েন্টগুলি সেট করা যায়, কোড দিয়ে পদক্ষেপ নেওয়া যায় এবং ভেরিয়েবলগুলি পরিদর্শন করা যায়।

ইন্টারফেস করার জন্য ভিম কমান্ড জারি করা যেতে পারে gdb। কিছু প্রাসঙ্গিক কমান্ড অন্তর্ভুক্ত :Step, :Over, :Finish, :Continue, :Stop, :Break, :Clear, এবং :Evaluate

অতিরিক্তভাবে, কথোপকথনের জন্য সম্পাদক উইন্ডোর শীর্ষে ক্লিকযোগ্য বাটন রয়েছে gdb

ডিবাগিংয়ের অবস্থা প্রতিফলিত করতে সম্পাদক উইন্ডো আপডেট করা হয়েছে। ব্রেকপয়েন্টগুলি নির্দেশিত হয় >>এবং বর্তমান লাইনটি হাইলাইট করা হয়।

অন্তর্নির্মিত সহায়তা পৃষ্ঠায় পুরো ডকুমেন্টেশন অন্তর্ভুক্ত রয়েছে।

:help terminal-debug

আমি সম্প্রতি একটি ব্লগ পোস্ট লিখেছি যা উদাহরণ সেশনের মধ্য দিয়ে যায়।

https://www.dannyadam.com/blog/2019/05/debugging-in-vim/


14

ভিম একটি দুর্দান্ত সম্পাদক, তবে ডিবাগিং করতে আমি একটি ডিবাগার (জিডিবির মতো) ব্যবহার করি।

তবে আপনাকে পাঠ্য মোডে জিডিবি ব্যবহার করতে হবে না; আপনি কেডিবিজি , ডিডিডি বা ইনসাইটের মতো গ্রাফিকাল ফ্রন্ট্যান্ড ব্যবহার করতে পারেন

ভিমের মধ্যে জিডিবি পাওয়ার বিভিন্ন উপায় রয়েছে (তবে তারপরে আপনি পাঠ্য ভিত্তিক ডিবাগিং পাবেন)।


10

জিডিবি editকমান্ড

কমান্ডটি ব্যবহার করে বর্তমান লাইনে একটি সম্পাদক খোলে:

$EDITOR +<current-line> <current-file>

ডিফল্টটি editorহ'ল ex, তবে vimএটি +<current-line>ফর্ম্যাটটিও বোঝে ।

আপনি সম্পাদকটি ছেড়ে দিলে আপনি আবার প্রবেশ করতে পারেন gdb

এটি আপনাকে উত্স অবাধে ব্রাউজ করতে দেয় এবং আপনার ctagsএকীকরণ থাকলে বিশেষত পাওয়ারফুল ।

এটি একটি গরীব লোকের অন্তর্নির্মিত এক উপায় জিডিবি যা ভিএম সংহতকরণের জন্য: মূল অনুপস্থিত জিনিসটি ভিম থেকে ব্রেকপয়েন্ট নির্ধারণ করছে।

edit এবং কেন্দ্র

editউত্সটিকে চারপাশে ডিফল্টরূপে ভিমকে কেন্দ্র করে না, তাই আমি পাইথন স্ক্রিপ্ট তৈরি করেছি যা এটি করে: জিডিবি থেকে কোনও পাঠ্য সম্পাদককে বর্তমান লাইনে বর্তমান ফাইলটি কীভাবে খুলব?

ক্লিপবোর্ড সহায়ককে ব্রেকপয়েন্ট কমান্ড

এই ভিএম কমান্ড টাইপের একটি ব্রেকপয়েন্ট স্পেসিফায়ার অনুলিপি করে:

b <file-path>:<line-number>

ক্লিপবোর্ডে:

command! Xg :let @+ = 'b ' . expand('%:p') . ':' . line('.')

তারপরে আপনি কেবল এটিতে পেস্ট করতে পারেন gdb

ব্রেকপয়েন্টগুলি নির্ধারণ করতে স্বাচ্ছন্দ্যে gdb ইন্টিগ্রেশনতে এটি একজন দরিদ্র ব্যক্তির ভিম।

জিডিবি ড্যাশবোর্ড

https://github.com/cyrus-and/gdb-dashboard

ভিমের সাথে এর কোনও যোগসূত্র নেই, তবে এটি একটি হালকা ওজনের সমাধান যা অনেক কিছু অর্জন করে এবং সেখানে অন্যান্য ভিমারদের উপযোগী হতে পারে।

অন্যরা জিডিবি টিইউআইয়ের কথা উল্লেখ করেছেন, তবে আমি এটি দেখতে পেয়েছি যে খুব বেশি ভাঙা এবং ভার বহনযোগ্য powerful

সুতরাং আমি জিডিবি ড্যাশবোর্ডের মতো পাইথন এপিআই ভিত্তিক সমাধানগুলিতে চলে এসেছি।

আমি ব্যবহার এবং যুক্তি সম্পর্কিত আরও বিশদে এখানে বর্ণনা করেছি: কোড সহ জিডিবি বিভক্ত দেখুন

এটি আপনাকে যা দেয় তার একটি স্ক্রিনশট এখানে:

এখানে চিত্র বর্ণনা লিখুন

আরও দেখুন: /vi/2046/how-can-i-integrate-gdb-with-vim

ছেড়ে দিন এবং একটি বাস্তব আইডিই ব্যবহার করুন

যা যা বলেছিল তার সাথে, এটি আমাকে সহ বেশিরভাগ মানুষের পক্ষে সেরা সমাধান। বেশিরভাগ লোকেরা কেবলমাত্র অনেকগুলি প্লাগইন নির্বাচন না করে এবং সিলেক্ট না করে সি ++ শ্রেণির সচেতন পদ্ধতিতে সংজ্ঞা নির্ধারণ করতে সক্ষম হন এবং স্টেপ ডিবাগিংয়ের সময় এটি অন্তর্ভুক্ত রয়েছে। ২০২০ সালের মধ্যে আমার কাছে সবচেয়ে কম খারাপটি ছিল গ্রহন: https://www.slant.co/topics/1411/~best-ides-for-c-on-linux


4

ত্রুটিযুক্ত প্রোগ্রামের আচরণ নির্ণয়ের বেশ কয়েকটি উপায়ের মধ্যে সোর্স লেভেল ডিবাগারটি ব্যবহার করা খুব সহজ is এই বিষয়টি সত্ত্বেও আমি খুব কমই নিজেকে একটি চালু করতে দেখি।

সুতরাং আমার জন্য, কোনও পাঠ্য সম্পাদক ব্যবহার করার কোনও সহজ অন্তর্নিহিত সুবিধা নেই যা কোনও ডিবাগার হিসাবে ঘটে । পরিবর্তে, আমি পছন্দ করি এমন পাঠ্য সম্পাদকটি ব্যবহার করি - আমি যে ডিবাগারটি ব্যবহার করতে চাই তার থেকে আলাদা। এই মুহুর্তে, আমি বেশিরভাগ ক্ষেত্রে এই উদ্দেশ্যে gedit এবং kdbg ব্যবহার করি তবে সময়ের সাথে সাথে এই পছন্দগুলি স্বাধীনভাবে বিকশিত হয়।


1
আপনি যদি কোনও কেডি / জিনোম-মুক্ত বিকাশের হোস্টে রিমোট বিকাশ না করে।
ব্যবহারকারী 826955

3

আপডেট 2020: ডিবাগ অ্যাডাপ্টার প্রোটোকল ব্যবহার করে একটি নতুন প্লাগইন ভিমস্পেক্টর রয়েছে

  1. Https://github.com/puremourning/vimspector#installation প্লাগইন ইনস্টল করুন

  2. কনফিগার (লিখুন .vimspector.json)

  3. ডিবাগ প্রতীক নিয়ে সংকলন করুন g++ cpp.cpp -ggdb -o cpp

  4. F4ডিবাগ শুরু করতে টিপুন

এখানে চিত্র বর্ণনা লিখুন

  • .vimspector.jsonআমার হোম ডিরেক্টরিতে আমার নোট করুন (সুতরাং কোনও সাবডিরে কাজ করুন)
{
"configurations": {
  "Python - Launch": {
    "adapter": "vscode-python",
    "configuration": {
      "name": "Python: Launch current file",
      "type": "python",
      "request": "launch",
      "stopOnEntry": true,
      "stopAtEntry": true,
      "console": "externalTerminal",
      "debugOptions": [],
      "cwd": "${cwd}",
      "program": "${file}"
    }
  },
  "Perl - Launch": {
    "adapter": "vscode-perl-debug",
    "configuration": {
      "name": "Perl: Launch current file",
      "type": "perl",
      "request": "launch",
      "exec": "/usr/bin/env perl",
      "execArgs": [],
      "stopOnEntry": true,
      "stopAtEntry": true,
      "console": "externalTerminal",
      "sessions": "single",
      "debugOptions": [],
      "cwd": "${cwd}",
      "program": "${file}"
    }
  },
  "C - Launch": {
    "adapter": "vscode-cpptools",
    "configuration": {
      "name": "Cpp: Launch current file",
      "type": "cppdbg",
      "request": "launch",
      "externalConsole": true,
      "logging": {
        "engineLogging": true
      },
      "stopOnEntry": true,
      "stopAtEntry": true,
      "debugOptions": [],
      "MIMode": "gdb",
      "cwd": "${cwd}",
      "program": "${fileDirname}/${fileBasenameNoExtension}"
    }
  },
  "Java - Launch": {
    "adapter": "vscode-java",
    "configuration": {
      "name": "Java: Launch current file",
      "request": "launch",
      "mainClass": "com.vimspector.test.TestApplication",
      "sourcePaths": [ "${workspaceRoot}/src/main/java" ],
      "classPaths": [ "${workspaceRoot}/target/classes" ],
      "args": "hello world!",
      "stopOnEntry": true,
      "console": "integratedTerminal"
    }
  }
} }

1

সম্প্রতি একটি অ্যাপ্লিকেশনটিতে দীর্ঘদিন ধরে কাজ করার জন্য যে বাক্সটি চলছে তার উপর একটি গুচ্ছ জিনিস রাখার প্রয়োজন ছিল (অ্যাপ্লায়েন্স সেটআপ), আমি ভিমে কোড লিখেছিলাম, স্ক্রিপ্টগুলি ছিল যা বিল্ডিং স্বয়ংক্রিয়ভাবে তৈরি হয়েছিল, এটি একটি সার্ভারে ঠেলে দিয়েছিল , সেখানে বাইনারি সহ প্রেরিত সেন্ডিনেল ফাইলটি লক্ষ্য করার জন্য সেখানে স্ক্রিপ্ট ছিল। এটি তখন বাক্সে উপযুক্ত পরিষেবাগুলি পুনরায় চালু করবে এবং অন্য একটি এসএসএস উইন্ডোতে আমার একটি ছিলtail -f আমার লগ ফাইলটিতে আমার ।

দীর্ঘ গল্প সংক্ষিপ্ত, আমি কোনও ডিবাগার মোটেও ব্যবহার করি নি। যদি আমার কিছু অপ্রত্যাশিতভাবে মারা যায় তবে আমি কেবল লগিংয়ের স্তরগুলি ছিঁড়ে ফেলি, এটি পুনরায় করতাম এবং এটি মারা যাওয়ার আগে লগ করা শেষ জিনিসটি কী তা দেখতাম, তারপরে বিশ্লেষণ করে সমস্যাটি সমাধান করুন।

সুন্দর জিনিসটি হ'ল যখন কোনও গ্রাহকের পরিবেশে কোনও সমস্যা ছিল, আমি কেবল একটি ডিবাগ-স্তরের লগ চাইব এবং তাদের সার্ভারে অ্যাক্সেসের প্রয়োজন ছাড়াই সমস্যাটি সনাক্ত করতে পারতাম।

... তবে হ্যাঁ, এমন সময় ছিল যখন একটি ডিবাগারটি ভাল লাগত।


0

কেবল উপরেরটি যুক্ত করতে:

আইএমও ভিমে বেশ হালকা সম্পাদক হতে থাকে এবং ডিবাগিং ওজনকে বাড়িয়ে তোলে। এটি করার উপায় রয়েছে যেমন vim7.4 + ব্যবহার করে

:terminal

এবং নিম্নলিখিত কমান্ডলাইন (অভিশাপ) ডিবাগারগুলির মধ্যে একটি চলছে। কয়েকটি আইডিইগুলির জন্য ডিফল্টরূপে ব্যবহৃত হয় যা আপনি কখনও জানতেন না। অর্থাত্ lldb = xcode।

স্পষ্টতই আরও ক্লাইম ভিত্তিক রয়েছে; @ সমস্ত নির্দ্বিধায় পরামর্শ দিতে এবং তালিকায় যুক্ত করুন। ধন্যবাদ!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.