আমি জিডিবি ব্যবহার করে পাইথন স্ট্যাক ট্রেস সম্পর্কিত তথ্য কীভাবে পেতে পারি?


11

আমি কুবুন্টু 12.04-তে আমার পাইথন অ্যাপ্লিকেশনটিতে একটি সেগমেন্টেশন ফল্ট ডিবাগ করতে জিডিবি ব্যবহার করছি। মনে হয় জিডিবির 7 সংস্করণে পাইথন স্ট্যাক (http://docs.python.org/devguide/gdb.html) সম্পর্কিত তথ্য আহরণের জন্য অন্তর্নির্মিত ম্যাক্রোগুলি রয়েছে তবে এটি কাজ করতে আমার সমস্যা হচ্ছে। আমি পাইথন-ডিবিজি ইনস্টল করেছি।

আমি যখন জিডিবিতে অজগর স্ট্যাক ট্রেসের জন্য জিজ্ঞাসা করি, ফলাফলটি এরকম দেখাচ্ছে:

(gdb) py-bt
#5 (unable to read python frame information)
#16 (unable to read python frame information)
#26 (unable to read python frame information)
...

আমার জিডিবি সংস্করণটি 7.4-2012.04-0ubuntu2, পাইথনটি 2.7.3-0ubuntu3।

উত্তর:


16

সমস্যাটি এখানে: জিডিবিতে ডিবাগিং প্রতীকগুলি অ্যাক্সেস পেতে আপনার অবশ্যই একটি পৃথক বাইনারি উপস্থাপন করতে হবে: "পাইথন-ডিবিজি" "পাইথন" এর পরিবর্তে (এটি পাওয়া গেছে /usr/share/doc/python2.7-dbg/README.debug এ )।


1
ফেডোরাপ্রজেক্ট.আর / উইকি / ফিচারস / ইজিয়ার পাইথনডাবগিং বা অন্য কোথাও আমি কীভাবে এটি উল্লেখ করা হচ্ছে তা পর্যবেক্ষণ করছে । ধন্যবাদ লুক।
quimnuss

এটা সত্য নয়। আপনাকে কেবল ডিবাগিং প্রতীক পেতে হবে যা আপনি ব্যবহার করছেন অজগরটির সাথে মেলে। কোনও ভার্চুয়ালেনভের সাথে ডিল করার ক্ষেত্রে গ্যাটাচস থাকতে পারে কারণ পাইথনটি আপনার সিস্টেমের অজগরটির সাথে মেলে না। পডোলিয়াকা.আর.এ.
06/

6

উবুন্টু 16.04-তে আমি পাইথন 3.5 তে পাইথন স্ট্যাক ট্রেস পেতে সক্ষম হয়েছি:

  1. ইনস্টল করা python3-dbgএবং python3-dev:

    $ sudo apt install python3-dbg python3-dev

    python3-dbgপ্যাকেজটি এটি ব্যবহার করার জন্য সংক্ষিপ্ত ডকুমেন্টেশন সহ আসে /usr/share/doc/python3-dbg/README.debugযেখানে আমি পরবর্তী পদক্ষেপে ব্যবহার করব।

  2. আনপ্যাকড জিডিবি সহায়ক স্ক্রিপ্ট এতে যুক্ত /usr/share/doc/python3.5/gdbinit.gzকরা হচ্ছে ~/.gdbinit:

    zcat /usr/share/doc/python3.5/gdbinit.gz >> ~/.gdbinit

এখন জিডিবি পাইথন বাইনারিগুলির প্রতীক খুঁজে পেতে সক্ষম করবে এবং py-btজিডিবিতে পাইথন স্ট্যাক ট্রেস প্রদর্শন করার জন্য কাজ করবে:

$ gdb -p 4762
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.04) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
Attaching to process 4762
[New LWP 4852]
[New LWP 4853]
[New LWP 4854]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
0x00007f38e43deb5d in poll () at ../sysdeps/unix/syscall-template.S:84
84      ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb) py-bt
Traceback (most recent call first):
  File "/usr/bin/indicator-cpufreq", line 80, in <module>
    Gtk.main()
(gdb)

আমার gdbinit.gz উবুন্টু 16.04 এ অনেক কমান্ড রয়েছে pystackতবে এটি নেই py-bt। কোন ধারণা কি হচ্ছে?
আন্তন

python 3.5যদিও আমি ইতোমধ্যে ইনস্টল করেছি কেন python 3.6?
স্কাইট্রি

0

হতে পারে এটি কাউকে সহায়তা করে: প্যাকেজ python2.7-dbgথেকে আগত বাইনারিটির নাম দেওয়া হয়েছিল আমার ডেবিয়ান সিস্টেমে python2.7-dbg। আমি python2.7-devপ্যাকেজটি ইনস্টল করেছি এবং apt-get source python2.7-dbgতাই gdbপাইথন ইন্টারপ্রেটারের উত্স ফাইলগুলি খুঁজে পেতে পারি।

এই সমস্ত জায়গায়, আমি যে ডিবাগটি SIGSEGVচালাচ্ছিলাম সেটি ডিবাগ করতে সক্ষম হয়েছিল: https://bugs.python.org/issue34870

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