আপগ্রেড করার পরে জিডিবি প্রক্রিয়াতে সংযুক্ত হবে না


66

আমি সম্প্রতি 10.04 থেকে 11.04 এ আপগ্রেড করেছি এবং জিডিবি আমাকে আর প্রসেসের সাথে সংযুক্ত করার অনুমতি দেবে না আমি ত্রুটি পেয়েছি

প্রক্রিয়া সংযুক্ত 10144 প্রক্রিয়া সংযুক্ত করা যায়নি। যদি আপনার ইউইডি লক্ষ্য প্রক্রিয়ার uid এর সাথে মিলে যায়, / proc / sys / kernel / yama / ptrace_scope এর সেটিংস পরীক্ষা করে দেখুন বা রুট ব্যবহারকারী হিসাবে আবার চেষ্টা করুন। আরও তথ্যের জন্য, দেখুন /etc/sysctl.d/10-ptrace.conf ptrace: অপারেশন অনুমোদিত নয়।

আমি কীভাবে এটি ঠিক করব যাতে আমি sudo ছাড়াই আবার ডিবাগ করতে পারি?

উত্তর:


105

ম্যাভেরিক মেরকেট (১০.১০) -তে উবুন্টু একটি প্যাচ প্রবর্তন করেছিল যা নন-রুট ব্যবহারকারীদের দ্বারা নন-চাইল্ড প্রসেসের পেট্রাকিং নিষিদ্ধ করার জন্য - যেমন। কেবলমাত্র একটি প্রক্রিয়া যা অন্য প্রক্রিয়ার পিতা বা মাতা হয় এটি সাধারণ ব্যবহারকারীর জন্য এটি ptrace করতে পারে - যদিও রুট এখনও প্রতিটি প্রক্রিয়া ptrace করতে পারে। সুতরাং আপনি কেন sudo এর মাধ্যমে সংযুক্তি করতে জিডিবি ব্যবহার করতে পারেন।

আপনি এই নিষেধাজ্ঞাকে সাময়িকভাবে অক্ষম করতে পারেন (এবং আপনার ব্যবহারকারীর দ্বারা তাদের কোনও প্রক্রিয়া পিটিস (জিডিবি) করার অনুমতি দেওয়া পুরানো আচরণে প্রত্যাবর্তন করুন):

echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

স্থায়ীভাবে এটিকে /etc/sysctl.d/10-ptrace.conf সম্পাদনা করার অনুমতি দিন এবং লাইনটি পরিবর্তন করুন:

kernel.yama.ptrace_scope = 1

পড়তে

kernel.yama.ptrace_scope = 0

কেন এই পরিবর্তনটি করা হয়েছিল তার কিছু পটভূমির জন্য উবুন্টু উইকি দেখুন


4
ধন্যবাদ। আমি আমার ব্যবহারকারীর বিন ফাইলের একটি কমান্ডে অস্থায়ী যুক্ত করেছি যাতে আমি এটি চালু করতে এবং দুর্দান্ত কাজ করতে পারি।
অ্যান্ড্রু রেড

আমি /etc/sysctl.d/10-ptrace.confফাইল সম্পাদনা করি । এটা আমার জন্য পুরোপুরি কাজ করে। :)
soroosh

8
আপনি যদি /etc/sysctl.d ফাইলগুলিতে কিছু সম্পাদনা করে থাকেন, তবে আপনি সেগুলি "sudo
পরিষেবাদি

@ অ্যালেক্সমুররে - আপনার সহায়ক উত্তরের এছাড়াও উল্লেখ করা উচিত যে পরিবর্তনগুলি /etc/sysctl.dকার্যকর হওয়ার জন্য কোনও প্রকারের পুনঃসূচনা প্রয়োজন । আমার জন্য, সিস্টেম পুনঃসূচনা যথেষ্ট ছিল, তবে সম্ভবত ওভারকিল হতে পারে - উপরে ফ্র্যাঙ্কস্টার এর মন্তব্য দেখুন। পুনঃসূচনা করার পরে, থেকে মানটি /etc/sysctl.dঅনুলিপি করা হয় /proc/sys/kernel/yama/ptrace_scope। (এছাড়াও, আমার ক্ষেত্রে আমি সরাসরি, এমনকি সুডো দিয়েও পিট্রেস_স্কোপ সম্পাদনা করতে পারিনি))
অ্যান্ডি টমাস

কোনও পুনরায় বুট করার দরকার নেই। কেবল চালান: sysctl -pথেকে /etc/sysctl.confএবং পরিবর্তনগুলি প্রয়োগ করতে /etc/sysctl.d/*। এই সুনির্দিষ্ট পরিবর্তনের জন্য, উবুন্টু 15.04 /etc/sysctl.d/10-ptrace.conf
টিতে

3

আপনি যদি /proc/sys/kernel/yama/ptrace_scopeএর ডিফল্ট মানকে সেট করে ছেড়ে যেতে পছন্দ করেন 1, তবে কর্মপরিকল্পনা হিসাবে আপনি gdbযে প্রোগ্রামটি ডিবাগ করতে চান তা চালানোর জন্য আপনি বিবেচনা করতে পারেন। তারপরে আপনি কেবল টিপে ডিবাগারটি আনতে পারেন ^C। উদাহরণস্বরূপ, (বোরিং) প্রোগ্রামটি ডিবাগ করতে sleep 60নিম্নলিখিতগুলি করুন:

$ gdb -q sleep -ex 'run 60'

এখানে একটি সম্পূর্ণ উদাহরণ।

$ gdb -q sleep -ex 'run 60'
Reading symbols from sleep...(no debugging symbols found)...done.
Starting program: /bin/sleep 60
^C
Program received signal SIGINT, Interrupt.
0x00007ffff7ad5d60 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:81
81      ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb) backtrace
#0  0x00007ffff7ad5d60 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:81
#1  0x0000000000403cd7 in ?? ()
#2  0x0000000000403b88 in ?? ()
#3  0x00000000004016c9 in ?? ()
#4  0x00007ffff7a35ec5 in __libc_start_main (main=0x401540, argc=2, argv=0x7fffffffea08, init=<optimized out>, 
    fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe9f8) at libc-start.c:287
#5  0x00000000004017d5 in ?? ()
(gdb) continue
Continuing.
[Inferior 1 (process 3531) exited normally]
(gdb) quit

যেহেতু /bin/sleep(আশ্চর্যজনকভাবে) ডিবাগিং তথ্য ছাড়াই সংকলিত ছিল, তাই উপরের ব্যাকট্রিসে ন্যূনতম তথ্য রয়েছে।


2
আপনি সংযুক্ত করেননি , আপনি এটি শুরু করেছিলেন। এটি একেবারেই আলাদা, যেহেতু gdbএক্ষেত্রে ডিবাগির সরাসরি অভিভাবক এবং এমনকি এটির সাথে ডিবাগ করারও অধিকার রয়েছে ptrace_scope==1। আপনি যদি পরিবর্তে সংযুক্ত হন তবে এটি কাজ করবে না , অর্থাত্ এমন কিছু করেছিলsleep 60& gdb -ex "attach $!"
রুস্লান

রুস্লানের প্রস্তাবিত (পাল্টা?) উদাহরণটি, sleep 60& gdb -ex "attach $!""প্রোগ্রামটি চালানোর জন্য জিডিবি ব্যবহার করা" নয়, এবং তাই এটি আমার কাজের প্রতিফলন নয়। রুস্লানের উদাহরণটি প্রথমে চালানো এবং তারপরে চালানোর জন্য শেলটি ব্যবহার করা । আমার কর্মপরিকল্পনা কাজ করে , যা আমি যত্ন করি। আমি জানি না, না আমি সত্যিই যত্নশীল না , আসলে এটি তার সন্তানের সাথে সংযুক্ত হচ্ছে কিনা । আমি সন্তানের ডিবাগ করতে সক্ষম হওয়া সম্পর্কে যত্নশীল। আমার পরিশ্রমটি এটি সম্পাদন করে। তবুও, আমি আমার উত্তরটি স্পষ্টতার জন্য দিয়েছি। sleepgdbgdb
এমপিবি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.