আমি বাশ স্ক্রিপ্টের মধ্যে জিডিবি ব্যবহার করে কমান্ডলাইন আর্গুমেন্ট সহ একটি প্রোগ্রাম কীভাবে চালাব?


428

জিডিবিতে একটি প্রোগ্রাম চলাকালীন, সাধারণত, প্রোগ্রামটির জন্য আর্গুমেন্ট runকমান্ডে দেওয়া হয় । জিডিবি ব্যবহার করে প্রোগ্রামটি চালাওয়ার পাশাপাশি শেল স্ক্রিপ্টের মধ্যে যুক্তি দেওয়ার কি কোনও উপায় আছে?

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

এই কাজ করার জন্য অন্য উপায় আছে কি?


উত্তর:


612

আপনি --args প্যারামিটার দিয়ে জিডিবি চালাতে পারেন,

gdb --args executablename arg1 arg2 arg3

আপনি যদি এটি স্বয়ংক্রিয়ভাবে চালিত হতে চান তবে কোনও ফাইলের মধ্যে কয়েকটি কমান্ড রাখুন (যেমন 'রান') এবং এটি আর্গুমেন্ট হিসাবে দিন: -x / tmp / cmds। Ptionচ্ছিকভাবে আপনি ব্যাচ মোড দিয়ে চালাতে পারেন।

gdb -batch -x /tmp/cmds --args executablename arg1 arg2 arg3

53
আরগ, এতে man gdbথাকে না --args, এজন্য আমি এটি খুঁজে পাইনি। gdb --helpআছে।
সিরো সান্তিলি 郝海东 冠状 病 六四 事件

1
@CiroSantilli 新疆 改造 中心 法轮功 六四 事件 GDB হ'ল জিএনইউ। জিএনইউ সরঞ্জামগুলির সম্পূর্ণ ডকুমেন্টেশনটি দেখতে, info gdbপরবর্তী সময় :-) ব্যবহার করতে ভুলবেন না ।
Apteryx

1
@ অ্যাপটারিক্স সম্ভবত একদিন আমি শিখব info। যদি গুগল বা স্ট্যাক ওভারফ্লো এক্সডি কাজ করা বন্ধ করে দেয়
সিরো সান্তিলি 郝海东 冠状 病 六四 六四 事件

1
@ সিরোস্যান্টিলি 新疆 改造 中心 法轮功 六四 '' আমি 'কী ( index-search) আবিষ্কার করার পরে আমি তথ্যের প্রতি আকৃষ্ট হই । চেষ্টা করুন info gdb:, তারপরে 'আমি', তারপরে '--আরগস'। এটি আপনাকে সরাসরি এনে দেবে।
Apteryx

138
gdb -ex=r --args myprogram arg1 arg2

-ex=rসংক্ষিপ্ত -ex=runএবং জিডিবি কে আপনার প্রোগ্রামটি তত্ক্ষণাত্ চালানোর জন্য বলে, প্রম্পটে আপনার "রান" টাইপ করার অপেক্ষা না করে। তারপরে --argsবলেছে যে অনুসরণ করা সমস্ত কিছু হ'ল আদেশ এবং আর্গুমেন্ট, ঠিক যেমন আপনি কমান্ডলাইন প্রম্পটে সাধারণত এগুলি টাইপ করেন।


-exe=rখুব দরকারী সম্পর্কে জানেন না !
জিফ

46

এটি করার আরেকটি উপায়, যা আমি ব্যক্তিগতভাবে কিছুটা সুবিধাজনক এবং স্বজ্ঞাত মনে করি ( --argsপ্যারামিটারটি মনে না রেখে ) সাধারণভাবে সংকলন করা হয় এবং এর r arg1 arg2 arg3মধ্যে থেকে সরাসরি ব্যবহার করা হয় gdb:

$ gcc -g *.c *.h
$ gdb ./a.out
(gdb) r arg1 arg2 arg3

23
এটি হ'ল ওপি যা করতে হবে তা এড়াতে আশা করছে।
কারাটস্নোম্যাচাইন

6
হুঁ, হ্যাঁ, ধন্যবাদ, ফর্সা পয়েন্ট। আমি নিশ্চিত নই যে কীভাবে এত দিন আমার নোটিশ এড়ানো গেল। আমি মনে করি আমি উত্তরটি এখানে রেখে যাব, কারণ আমি "জিডিবি ব্যবহার করে কমান্ড লাইন কীভাবে উপস্থাপন করব" এর মতো কিছু গুগল করেছিলাম এবং উত্তরটি অনুপস্থিত খুঁজে পেয়েছি, আমি এই প্রশ্নটিতে হোঁচট খেয়েছি , না বুঝে (প্রায় এক বছরের জন্য!) যে আমার উত্তরটি হাতে থাকা প্রশ্নের সমাধান করে না।
উচ্চাকাঙ্ক্ষী_সার্জ

2
@ কারাটস্নোম্যাচাইন যেমন গুগল থেকেও কেউ আগত, এই উত্তরটি আমি যা খুঁজছিলাম তার পাতায় আরও বেশি more সম্ভবত আমাদের প্রশ্নটি আরও সাধারণ হতে সংশোধন করা উচিত কারণ এটির একটি সাধারণ শিরোনাম রয়েছে, বা আমাদের শিরোনামটি সংকীর্ণ করা উচিত। এটিকে কম সীমাবদ্ধ করা আরও বেশি সংখ্যক পাঠকের পক্ষে আরও কার্যকর হবে।
jpmc26


4

জিডিবিতে --init-command <somefile>যেখানে কোনও কোনও ফাইল চালনার জন্য জিডিবি কমান্ডের একটি তালিকা রয়েছে, আমি আমার কোডটিতে //GDBমন্তব্য রাখতে এটি ব্যবহার করি, তারপরে `

echo "file ./a.out" > run
grep -nrIH "//GDB"|
    sed "s/\(^[^:]\+:[^:]\+\):.*$/\1/g" |
    awk '{print "b" " " $1}'|
    grep -v $(echo $0|sed "s/.*\///g") >> run
gdb --init-command ./run -ex=r

স্ক্রিপ্ট হিসাবে, যা ডিবাগ প্রতীকগুলি লোড করার জন্য কমান্ড রাখে এবং তারপরে প্রতিটি //GDBমন্তব্যের জন্য ব্রেক পয়েন্ট রাখার জন্য ব্রেক কমান্ডের একটি তালিকা তৈরি করে এবং এটি চলমান শুরু করে


4

যদি --argsপ্যারামিটারটি আপনার মেশিনে কাজ না করে (অর্থাত সোলারিস 8), আপনি জিডিবি পছন্দ করতে পারেন

gdb -ex "set args <arg 1> <arg 2> ... <arg n>"

এবং আপনি এটি স্টিডিনে একটি ফাইল ইনপুট এবং "অবিলম্বে চলমান" এর সাথে একত্রিত করতে পারেন:

gdb -ex "set args <arg 1> <arg 2> ... <arg n> < <input file>" -ex "r"

2

হুগো ইডেলারের উত্তর ছাড়াও। তাদের নিজের মতো উপসর্গ যুক্তি ব্যবহার করার সময় --বা যখন -, আমি জিডিবি-র সাথে বিরোধের বিষয়ে নিশ্চিত ছিলাম না।

দেখে মনে হচ্ছে জিডিবি সমস্ত ক্ষেত্রে argsবিকল্প হিসাবে আর্গুমেন্ট হিসাবে গ্রহণ করবে।

প্রথমে আমি নিশ্চিত হতে চেয়েছিলাম, আমি আপনার আরগসের চারপাশে উদ্ধৃতি দিয়ে জিডিবি চালিয়েছিলাম, এটি লঞ্চে সরানো হবে।

এটি খুব কার্যকর, তবে optionচ্ছিক:

gdb --args executablename "--arg1" "--arg2" "--arg3"

এটি কাজ করে না:

gdb --args executablename "--arg1" "--arg2" "--arg3" -tui

সেক্ষেত্রে, -tuiআমার প্রোগ্রাম পরামিতি GDB এক হিসাবে হিসাবে ব্যবহার করা হয়।


1

অনেক দেরীতে, তবে এখানে একটি পদ্ধতি যা gdbসেশনের সময় কাজ করে ।

gdb <executable>

তারপর

(gdb) apropos argument

এটি প্রচুর ম্যাচ ফিরিয়ে দেবে, এটি দরকারী set args

set args -- Set argument list to give program being debugged when it is started.

set args arg1 arg2 ...

তারপর

r

এটি প্রোগ্রামটি চালাবে, আর্গুমেন্ট এবং আর্গুমেন্টের গণনায় প্রধান (আরজিসি, আরজিভি) এ চলে।

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