প্রোগ্রাম রিডিং স্টিডিন এবং জিডিবিতে পরামিতিগুলি কীভাবে লোড করবেন?


103

আমার একটি প্রোগ্রাম রয়েছে যা স্টিডিন থেকে ইনপুট নেয় এবং কমান্ড লাইন থেকে কিছু পরামিতিও নেয়। দেখে মনে হচ্ছে:

cat input.txt > myprogram -path "/home/user/work"

আমি ইমাসের ভিতরে জিডিবি দিয়ে কোডটি ডিবাগ করার চেষ্টা করি, এমএক্স জিডিবি দ্বারা, আমি কমান্ডটি দিয়ে প্রোগ্রামটি লোড করার চেষ্টা করি:

gdb cat input.txt > myprogram -path "/home/user/work"

তবে জিডিবি এটি পছন্দ করে না।

এখান থেকে প্রশ্ন আঁকড়ে আছে । দুর্ভাগ্যক্রমে আমি সমাধানটি বুঝতে পারি না এবং -gবিকল্পটি সংকলন এবং এমএক্স জিডিবি কমান্ড চালানোর বাইরে কী করব তা নিশ্চিত নই ।

উত্তর:


133

আপনি যদি শেল থেকে এটি করছিলেন তবে আপনি এটির মতো করুন:

% gdb myprogram
gdb> run params ... < input.txt

এটি ইম্যাকের মধ্যেও কাজ করবে বলে মনে হচ্ছে।


পুনঃনির্দেশটি কাজ করছে বলে মনে হচ্ছে তবে আমি কিছু ত্রুটি পেয়েছি। মেমরি থেকে একটি বৈধ অবজেক্ট ফাইল চিত্র পড়তে ব্যর্থ। প্রোগ্রামটি 042 কোড সহ উপস্থিত হয়েছে। কোন ধারণা?
vinc456

সম্ভবত এটি একটি সাধারণ জিডিবি ত্রুটি, এবং সম্ভবত আপনি ইমাসের মধ্যে চলেছেন এর সাথে কিছুই করার নেই। প্রথমে শেল থেকে কীভাবে জিডিবি চালানো যায় তা শিখুন (প্রয়োজনে একটি নতুন প্রশ্ন সহ) এবং তারপরে ইমাসের মধ্যে এটি চালানোর বিষয়ে চিন্তা করুন।
Alnitak

4
আমি এটি বের করেছিলাম। কোনও কারণে আমি "ইনট মেইন ..." এর পরিবর্তে অকার্যকর মূল (ইন্ট আরজিসি, চর * আরগভি []) টাইপ করেছি এবং এটি আমার চোখ পিছলে যায়। যাইহোক সবকিছু এখন ঠিকঠাক কাজ করে; আপনার সাহায্যের জন্য ধন্যবাদ!
vinc456

4
একটি বিলেড ধন্যবাদ - জিডিবি ম্যানুয়ালটি ড্রেজ করার জন্য বাটের একটি ব্যথা।
মুছে ফেলা হয়েছে

4
উইন্ডোজ msys64 ব্যবহার করে আমি পেতে <এবং input.txtহিসাবে argvআমার প্রোগ্রাম আর্গুমেন্ট :( আমি আমার GDB 8.2.1 সঙ্গে এই উত্তরগুলো প্রায় খনন চালিয়ে যাব: stackoverflow.com/questions/3544325/...
ixe013

32

এটা করতে বিভিন্ন উপায় আছে:

$ gdb myprogram
(gdb) r -path /home/user/work < input.txt

বা

$ gdb myprogram
(gdb) set args -path /home/user/work < input.txt
(gdb) r

বা

$ gdb -ex 'set args -path /home/user/work < input.txt' myprogram
(gdb) r

যেখানে gdb runকমান্ড ( r) পূর্বনির্ধারিত হিসাবে আর্গুমেন্টগুলি ডিফল্টরূপে ব্যবহার করে set args


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

4
@ কার্ডিফস্পেসম্যান, ভাল, আমি এটি সাইগউইনের সাথে পরীক্ষা করতে পারছি না - সম্ভবত তাদের জিডিবি সংস্করণটি কিছুটা সীমাবদ্ধ
ম্যাক্সচলেপজিগ

কেবল gdb -ex 'r -path /home/user/work < input.txt' myprogramতৃতীয় রূপে কেন নয় ?
রুসলান

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

সত্য, তবে আপনি ব্রেক-পয়েন্টটি অ-ইন্টারেক্টিভভাবেও সেট করতে পারেন, যেমন gdb -ex 'b main' -ex 'r -path /home/user/work < input.txt' myprogram
রুসলান

6

ডিবাগিং সেশন শুরু করার পরে সম্পূর্ণতার জন্য --args বিকল্পও রয়েছে। অর্থাত্)

gdb gdbarg1 gdbarg2 --args yourprog arg1 arg2 -x arg3

14
এভাবে ডিবাগিং সেশন শুরু করার পরে আপনি কীভাবে ইনপুট.টেক্সটকে আপনার ইনপুট হিসাবে পুনর্নির্দেশ করবেন?
পিটার আজতাই

4
@ পিটার:gdb --args yourprog.out input.txt
বেন এলগার

4
এটি কেবল তখনই কাজ করে যদি "yourprog" কোনও ফাইলের নামটি ইনপুট নির্দিষ্ট করার জন্য ইনপুট পুনর্নির্দেশ নয়, প্রত্যাশা করে।
Alnitak

1

এবং যদি আপনাকে প্রথম থেকেই ডিবাগ করার দরকার না হয় তবে আপনি ইতিমধ্যে ব্যবহার করে একটি চলমান প্রক্রিয়াতে সংযুক্ত করতে পারেন:

$ gdb myprogram xxx

যেখানে এক্সএক্সএক্স প্রক্রিয়া আইডি। তারপরে আপনাকে জিডিবি শুরুর যুক্তিগুলি বলার দরকার নেই।


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