আমি কীভাবে ইমাস ক্রাশটি ডিবাগ করব?


17

প্যাকেজ 1 থেকে কোনও ফাংশন ব্যবহার করার সময় কেন ইমাস ক্রাশ হয় তা আমি ডিবাগ করছি । এই ডিবাগ প্রক্রিয়াটির উদ্দেশ্য হ'ল ব্যবহার করে জমা দেওয়ার জন্য দরকারী ডেটা পাওয়া M-x report-emacs-bug

ইম্যাকস ক্র্যাশগুলি কীভাবে ডিবাগ করা যায় তার জন্য সহায়তা পেতে, আমি ইতিমধ্যে ইমাक्स ম্যানুয়াল - ক্র্যাশিং এবং ইমাস ম্যানুয়াল - ক্র্যাশের পরে দেখেছি , তবে তারা সাহায্য করেনি।

পরে একটি ক্র্যাশ ম্যানুয়াল বোঝায় emacs-buffer.gdbকিন্তু আমি কোন ধারণা কিভাবে এটি ব্যবহার করতে হবে। গুগলকে সাহায্যের জন্য জিজ্ঞাসা করার সময়, আমি এই ইম্যাক্স.এসই প্রশ্নটি দেখতে পেয়েছি এবং আমি -ggdb3পতাকাগুলি ব্যবহার করে ইম্যাকগুলি পুনরায় কম্পাইল করেছি ।

আমার ব্যবহারের পূর্বের অভিজ্ঞতা নেই gdbএবং তাই আমি emacs-buffer.gbdফাইলটি ব্যবহারের জন্য কয়েকটি ব্যর্থ চেষ্টা করেছি ।

আমি যা চেষ্টা করেছি তা এখানে:

  • gdb -x /path/to/emacs-buffer.gdb
  • gdb -> file /path/to/emacs-buffer.gdb
  • gdb -> source /path/to/emacs-buffer.gdb
  • source /path/to/emacs-buffer.gdb

পার্শ্ব নোটে, -ggdb3পতাকা সহ সংকলিত ইম্যাকগুলি লোড হতে 10 সেকেন্ড বেশি সময় নেয়; আগে এটি 5-6 সেকেন্ড ছিল, এখন প্রায় 16-17 সেকেন্ড। আমার কোডটিতে আমার কোডটি গণনা করে এমন কোনও কোডের কারণে আমি সঠিক সেকেন্ড জানি। প্রারম্ভকালীন সময়ে এই বৃদ্ধি প্রত্যাশিত?


পাদটীকা 1: undo-treeকোনও নির্দিষ্ট .org ফাইলের জন্য পূর্বাবস্থায় ফিরতি ইতিহাস পুনরুদ্ধার করার চেষ্টা করার সময় ইম্যাক্স ক্রমাগত ক্র্যাশ হয়ে যায় (যা আমি প্রকাশ্যে ভাগ করতে পারি না)। আমি (setq undo-tree-auto-save-history t)এই ক্রাশটি কেবল ইম্যাক্স গিট মাস্টারে ঘটে, ইমাস 24.5-এ নয়। ইমাস 24.5-এ, undo-treeএকটি ত্রুটি নিক্ষেপ করে জানিয়েছে যে এটি পূর্বাবস্থায় ইতিহাস লোড করতে অক্ষম (এমনকি পূর্বাবস্থায় থাকা ইতিহাসের ফাইলটি উপস্থিত রয়েছে), তবে কমপক্ষে ইমাস্যাক সেশনটি সেই সংস্করণে ক্রাশ হয় না।


2
আমি ইমাক্স ব্যবহারের ক্ষেত্রে আরও দুই বছরের বেশি রয়েছি এবং এখনও এটি সত্যই খুঁজে পাইনি: stackoverflow.com/q/20891431/2112489 সত্য কথা বলতে কি, এটি কিছুটা রহস্যের এবং সেখানে একটি অনুমোদিত থ্রেড থাকা উচিত যা শেখায় যে কীভাবে করা যায় এটা।
আইনজীবি

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

আমি আপনার থ্রেড হাইজ্যাক করতে চাই না, তবে আমি একটি পরামর্শ দেব। যদি থ্রেডটি কোনও যুক্তিসঙ্গত সময়ের মধ্যে উপযুক্ত উত্তর আকর্ষণ না করে (যেমন, আপনি এর অর্থ কী তা স্থির করেন) তবে এই থ্রেডটিকে আরও সাধারণ করে তোলা সার্থক হতে পারে - উদাহরণস্বরূপ, ইমাসকে ডিবাগ করার জন্য কীভাবে জিডিবি ব্যবহার করতে হবে তার প্রামাণিক থ্রেড ক্র্যাশ করে, অর্থবহ ব্যাকট্রেস তৈরি করে যা ইমাকস ডেভলপমেন্ট টিমের গুরুদের এই সমস্যাগুলি সনাক্তকরণ / সমস্যা সমাধানের জন্য সহায়তা করবে যখন এতে বলা আছে যে তথ্য রয়েছে। আমি বুঝতে পারি undue-treeসমস্যাগুলির কারণে সমস্যাটি গুরুত্বপূর্ণ , তবে এর ব্যাপক সম্ভাবনা রয়েছে
আইনজীবি

@ লিওলিস্ট আমি এই থ্রেডটি আশা করি ঠিক এটিই। আমি একটি নির্দিষ্ট undo-treeউত্তর আশা করিনি কারণ আমি জানি যে অন্য কারও পক্ষে সেই সঠিক ক্র্যাশটি পুনরায় তৈরি করা কঠিন হবে। এছাড়াও আমি পুরো org ফাইলটি ভাগ করতে পারি না যা কেবলমাত্র এটিই এই ক্র্যাশটির কারণ বলে মনে হচ্ছে। সুতরাং আমি gdbএই প্রশ্নের জন্য শুধুমাত্র ট্যাগ প্রয়োগ । আমি সেই ব্যাক স্টোরি দিয়েছিলাম যাতে উত্তরগুলি আমাকে ইম্যাক ক্র্যাশটি সাধারণভাবে ডিবাগ করার জন্য গাইড করতে পারে যাতে আমি একটি দরকারী ইম্যাক্স বাগ রিপোর্ট ফাইল করতে পারি
দক্ষ মোদী

@ লিওলিস্ট আমি প্রশ্নটি পুনরায় জমা দিয়েছি যাতে এটি স্পষ্ট হয় যে এটি কোনও প্যাকেজের সাথে সুনির্দিষ্ট নয়।
দক্ষ মোদী

উত্তর:


15

ইমাস্যাক্স ক্র্যাশটি ডিবাগ করার সহজতম উপায় হ'ল ইম্যাক্সের আওতাভুক্ত করা gdbএবং তারপরে ক্রাশটির পুনরুত্পাদনকারী যা কিছু করুন।

ধরে নিই যে আপনি উত্স থেকে আপনার ইমাস তৈরি করছেন, আপনার স্ক্রিপ্টটি পাস CFLAGS="-O0 -g3"করা উচিত ./configure। এটি সি সংকলকটি অপ্টিমাইজেশন বন্ধ করে দেয় (যা ডিবাগ করার সময় জিনিসগুলি বিভ্রান্ত করতে পারে) এবং এক্সিকিউটেবলের মধ্যে সর্বাধিক ডিবাগ তথ্য সক্রিয় করে। চালান makeএ গিয়ে Emacs গড়ে তুলতে।

তারপরে আপনার ইমাস গাছের ডিরেক্টরি gdbথেকে শুরু করুন src:

$ cd ~/my-emacs-tree/src
$ gdb ./emacs

ওএসএক্স-এ, আপনি স্ক্রিপ্টে পাস --with-nsকরতে ./configureএবং তৈরি করা অ্যাপ্লিকেশনটির অভ্যন্তরে ইমাসে জিডিবি শুরু করতে চান :

$ cd ~/my-emacs-tree
$ make install
$ cd src
$ gdb nextstep/Emacs.app/Contents/MacOS/Emacs

srcডিরেক্টরি থেকে শুরু করার কারণটি হ'ল এমন একটি .gdbinitফাইল রয়েছে যা ইমাসকে ডিবাগ করার জন্য দরকারী জিডিবি ফাংশন সংজ্ঞা সেট করে। যদি সেই ফাইলটি লোড করা হয়, শুরু করার সময় আপনার এমন কিছু দেখা উচিত gdb:

DISPLAY = /private/tmp/com.apple.launchd.cNjhIdtUNd/org.macosforge.xquartz:0
TERM = xterm-256color
Breakpoint 1 at 0x1000ca444: file ../../src/emacs.c, line 353.
Breakpoint 2 at 0x1000e7e34: file ../../src/sysdep.c, line 926.

rইমাকস শুরু করতে টাইপ করুন । আপনি একই লাইনে অতিরিক্ত যুক্তিগুলি পাস করতে পারেন, যেমন r --debug-init

তারপরে ইমাকস ক্রাশ করার চেষ্টা করুন। যদি এটি ক্র্যাশ হয় তবে আপনার এটি সম্পর্কে একটি নোট দেখতে হবে gdbএবং আপনাকে (gdb)আবার প্রম্পটেই রেখে দেওয়া হবে । যদি ইমাসগুলি ক্রাশ না হয় তবে হিমশীতল হয়ে যায়, আপনি C-zযে টার্মিনালটিতে gdbপ্রম্পটে ফিরে যেতে চলেছেন সেখানে আঘাত করতে পারেন ।

প্রম্পটে একবার, btব্যাকট্র্যাস পেতে টাইপ করুন । বোনাস হিসাবে, যদি ইমাস .gdbinitফাইলটি সঠিকভাবে লোড করা থাকে, আপনি সি ব্যাকট্র্যাসের পরে একটি লিস্প ব্যাকট্রিজ দেখতে পাবেন। উভয় backtraces অন্তর্ভুক্ত করা খুব দরকারী জিনিস M-x report-emacs-bug


etc/DEBUGইমাসাস ট্রিতে ফাইলটিতে কীভাবে ভেরিয়েবল ইত্যাদির অবস্থা পরীক্ষা করা যায় সে সম্পর্কে আরও অনেক তথ্য রয়েছে । আপনি এটি C-h C-dইম্যাক্সের ভিতরে টাইপ করে খুলতে পারেন বা এটি অনলাইনে পড়তে পারেন


ধন্যবাদ। আমি আপনার সমাধান চেষ্টা করার জন্য আজ সময় খুঁজে পেতে হবে। আমি এখনও আগ্রহী যে emacs-buffer.gdbএটি কী করে এবং কীভাবে এটি ব্যবহার করবে।
कौशल মোদী

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

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

আহ, এটি একটি ভাল পয়েন্ট। আমি নিজেই এটি কখনও ব্যবহার করি নি, তাই এটি কীভাবে করবেন তা সম্পর্কে নিশ্চিত নই।
লেগোস্কিয়া

আপনি কীভাবে ইমডস্ক্লিয়েন্টে জিডিবি চালাতে জানেন? আমি এই বাইনারি খুঁজে পাচ্ছি না src/lib-src/যদিও আমি এটি পেয়েছি কিন্তু এটি কার্যকর হয়নি gdb ./emacsclient -a '' -c। তাই আমি আপনার সহায়তা চাই কিভাবে এই পাস -aএবং -cপরিবর্তে GDB করা emacsclient করার args।
कौशल মোদী
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.