জিডিবিতে বর্তমান সমাবেশ নির্দেশাবলী দেখান


179

আমি জিডিবিতে কিছু সমাবেশ-স্তরের ডিবাগ করছি। এটি বর্তমান উত্স রেখাটি দেখায় ঠিক তেমনভাবে বর্তমান সমাবেশ নির্দেশ আমাকে প্রদর্শন করার জন্য জিডিবি পাওয়ার কোনও উপায় আছে কি? প্রতিটি কমান্ডের পরে ডিফল্ট আউটপুট এর মতো দেখায়:

0x0001433f      990         Foo::bar(p);

এটি আমাকে বর্তমান নির্দেশের ঠিকানা দেয়, তবে আমি disassembleবর্তমানে কোন নির্দেশনাটি চালাচ্ছি তা দেখতে আমাকে আউটপুটটিতে ফিরে উল্লেখ করতে হবে ।


উত্তর:


314

আপনি জিডিবিতে সমাবেশ লেআউটে স্যুইচ করতে পারেন:

(gdb) layout asm

আরও তথ্যের জন্য এখানে দেখুন । বর্তমান সমাবেশ নির্দেশাবলী এসেম্বলারের উইন্ডোতে প্রদর্শিত হবে।

   ┌───────────────────────────────────────────────────────────────────────────┐
   │0x7ffff740d756 <__libc_start_main+214>  mov    0x39670b(%rip),%rax        #│
   │0x7ffff740d75d <__libc_start_main+221>  mov    0x8(%rsp),%rsi              │
   │0x7ffff740d762 <__libc_start_main+226>  mov    0x14(%rsp),%edi             │
   │0x7ffff740d766 <__libc_start_main+230>  mov    (%rax),%rdx                 │
   │0x7ffff740d769 <__libc_start_main+233>  callq  *0x18(%rsp)                 │
  >│0x7ffff740d76d <__libc_start_main+237>  mov    %eax,%edi                   │
   │0x7ffff740d76f <__libc_start_main+239>  callq  0x7ffff7427970 <exit>       │
   │0x7ffff740d774 <__libc_start_main+244>  xor    %edx,%edx                   │
   │0x7ffff740d776 <__libc_start_main+246>  jmpq   0x7ffff740d6b9 <__libc_start│
   │0x7ffff740d77b <__libc_start_main+251>  mov    0x39ca2e(%rip),%rax        #│
   │0x7ffff740d782 <__libc_start_main+258>  ror    $0x11,%rax                  │
   │0x7ffff740d786 <__libc_start_main+262>  xor    %fs:0x30,%rax               │
   │0x7ffff740d78f <__libc_start_main+271>  callq  *%rax                       │
   └───────────────────────────────────────────────────────────────────────────┘
multi-thre process 3718 In: __libc_start_main     Line: ??   PC: 0x7ffff740d76d
#3  0x00007ffff7466eb5 in _IO_do_write () from /lib/x86_64-linux-gnu/libc.so.6
#4  0x00007ffff74671ff in _IO_file_overflow ()
   from /lib/x86_64-linux-gnu/libc.so.6
#5  0x0000000000408756 in ?? ()
#6  0x0000000000403980 in ?? ()
#7  0x00007ffff740d76d in __libc_start_main ()
   from /lib/x86_64-linux-gnu/libc.so.6
(gdb)

1
@ গ্রেটওয়ালফ, দেখে মনে হচ্ছে আপনার জিডিবিতে আপনার কোনও টুই সমর্থন নেই। আরও তথ্যের জন্য এই প্রশ্নটি দেখুন: stackoverflow.com/q/6706838/72178
ks1322

9
ঝরঝরে! এখন আমি কি রেজিস্টারগুলির জন্য অনুরূপ উইন্ডো পেতে পারি? প্রকৃতপক্ষে আমি করতে পারি:layout regs
জেনস

অন্যান্য টিইউআই কমান্ডের জন্য জিডিবি ডকসও দেখুন , যেমন tui reg vectorপূর্ণসংখ্যার রেগের পরিবর্তে ভেক্টর আরজিগুলি প্রদর্শন করতে চান । (যদিও সবসময় খুব ব্যবহারযোগ্য হয় না, কারণ এটি আপনাকে কেবল .v8_int16কিছু বা কিছু বাছাই করতে দেয় না , সুতরাং প্রদর্শনটি একটি বড় জগাখিচুড়ি)) এসএমএস ডিবাগিংয়ের দ্রুত টিউটোরিয়ালের জন্য x86 ট্যাগ উইকি দেখুন ।
পিটার কর্ডেস

এটি একটি অকেজো বৈশিষ্ট্য এবং আউটপুট সম্পর্কে। সি ++ ম্যানডযুক্ত নামগুলি দীর্ঘ। এবং আমি যা দেখতে চেষ্টা করছি তা ডানদিকে স্ক্রিনের বাইরে। কী বোকামি সিদ্ধান্ত (যখন ডিফল্ট হিসাবে ASM প্রদর্শন করা হয় না si), এবং কি একটি অকেজো বৈশিষ্ট্য (ভিউপোর্ট যা প্রয়োজনীয় তথ্য প্রদর্শন করে না)। আপনি কেবল মেসেঞ্জার হওয়ায় এই উত্তরটি ভোট দেওয়ার কোনও বুদ্ধি নেই ...
jww

1
একইভাবে, ·layout srcডিবাগ করার সময় উত্স কোডটি দেখতে, এবং এই মোডে প্রস্থান করার বিষয়টি মনে রাখার মতো কিছুই রয়েছেCTRL+x+a
বাইয়ান হুয়াং

149

আপনি করতে পারেন

display/i $pc

এবং প্রতিবার জিডিবি বন্ধ হয়ে গেলে, এটি পরবর্তী নির্দেশের বিচ্ছিন্নতা প্রদর্শন করবে।

GDB-7.0এছাড়াও সমর্থন করে set disassemble-next-line on, যা পুরো পরবর্তী লাইনকে বিচ্ছিন্ন করে দেবে, এবং আপনাকে বিচ্ছিন্ন প্রসঙ্গটি আরও দেবে।


1
si(তবে না s) ব্যবহার করার সময় আমরা কীভাবে এই বৈশিষ্ট্যটি সক্ষম করব ?
jww

54

আদেশ

x/i $pc

সাধারণ কনফিগারেশন প্রক্রিয়াটি ব্যবহার করে সর্বদা চালানোর জন্য সেট করা যায়।


29
এবং x/ni $pcপরবর্তী এন নির্দেশাবলী দেখতে, যা প্রায়শই বেশ কার্যকর।
স্টিফেন ক্যানন

48

নিম্নলিখিত বিকল্প সেট করা হচ্ছে:

set  disassemble-next-line on
show disassemble-next-line

আপনাকে এর মতো দেখতে এমন ফলাফল দেবে:

(gdb) stepi
0x000002ce in ResetISR () at startup_gcc.c:245
245 {
   0x000002cc <ResetISR+0>: 80 b5   push    {r7, lr}
=> 0x000002ce <ResetISR+2>: 82 b0   sub sp, #8
   0x000002d0 <ResetISR+4>: 00 af   add r7, sp, #0
(gdb) stepi
0x000002d0  245 {
   0x000002cc <ResetISR+0>: 80 b5   push    {r7, lr}
   0x000002ce <ResetISR+2>: 82 b0   sub sp, #8
=> 0x000002d0 <ResetISR+4>: 00 af   add r7, sp, #0

এই বিকল্পটি আমার ইনস্টলেশনটিতে বিদ্যমান বলে মনে হচ্ছে না। এটি সরানো হয়েছে?
ফুজ

2
@fuz আরো সম্ভবত, আপনার GDB বয়স
tbodt

@ ফুজ কমপক্ষে জিডিবি 8.1 তে উবুন্টু 18.04 এ উপস্থিত রয়েছে।
সিরো সান্তিলি 19 冠状 病 六四 事件 法轮功

খুব দরকারী দক্ষতা
DaSqy Stc

1
প্রদর্শন বিচ্ছিন্ন-পরবর্তী-লাইনটি পরীক্ষার জন্য, পতাকাটির স্থিতি মুদ্রণের জন্য, চালু বা বন্ধ
স্যাম

30

আপনি যদি প্রোগ্রামের পদক্ষেপের সময় পরবর্তী কয়েকটি নির্দেশাবলী স্বয়ংক্রিয়ভাবে প্রদর্শন করতে চান তবে আপনি প্রদর্শন কমান্ডটি নিম্নরূপ ব্যবহার করতে পারেন -

display /3i $pc

যখন কোনও ব্রেকপয়েন্টে আঘাত হানা হয় বা আপনি যখন প্রোগ্রামটি একক পদক্ষেপ নেন তখন উপরোক্ত 3 টি নির্দেশাবলী প্রদর্শন করবে।

এখানে ব্লগ এন্ট্রি আরও বিশদ ।


23

Gdb টির মধ্যে থেকে Ctrl x 2স্ক্রিনটি 3 ভাগে বিভক্ত হবে।

প্রথম অংশটি আপনাকে উচ্চ স্তরের ভাষায় সাধারণ কোডটি দেখায়।

দ্বিতীয়টি আপনাকে বিধানসভার সমতুল্য এবং আনুষঙ্গিক দেখায় instruction Pointer

তৃতীয়টি আপনাকে gdbকমান্ডগুলি প্রবেশের স্বাভাবিক প্রম্পট উপস্থাপন করবে ।

স্ক্রিন শট দেখুন


আমি এটি দিয়ে চালু করতে পারি না Ctrl-X 2, তবে এটি দেখতে gdb -tuiমোডের মতো লাগে যা দুর্দান্ত।
সিরো সান্তিলি 郝海东 冠状 病 六四 事件

7
এই সঙ্গে যোগাযোগ করা যাবে layout splitGDB প্রম্পট থেকে।
চকসম্যাশ

22

জিডিবি ড্যাশবোর্ড

https://github.com/cyrus-and/gdb-dashboard

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

তবে আমি দেখতে পেয়েছি যে বিল্ট-ইন জিডিবি টিইউআই মোডটিতে বর্ণিত হিসাবে এই বাস্তবায়নটি আরও দৃust় এবং কনফিগারযোগ্য বিকল্প: কোড সহ জিডিবি বিভক্ত ভিউ

উদাহরণস্বরূপ, আমরা বিচ্ছিন্নতা, উত্স, রেজিস্টার এবং স্ট্যাক সহ জিডিবি ড্যাশবোর্ড কনফিগার করতে পারি:

dashboard -layout source assembly registers stack

আপনি যদি এর পরিবর্তে সমস্ত উপলভ্য দর্শন সক্ষম করেন তবে দেখতে দেখতে এটি দেখতে কেমন:

এখানে চিত্র বর্ণনা লিখুন

সম্পর্কিত প্রশ্নগুলি:


1
@ ডাউনভোটার্স: দয়া করে ব্যাখ্যা করুন যাতে আমি তথ্য শিখতে এবং উন্নত করতে পারি। আমি বিশ্বাস করি যে এই Tui বর্তমানে গৃহীত উত্তরের জন্য একটি উচ্চতর বিকল্প নেই: stackoverflow.com/a/2015523/895245
সিরো Santilli郝海东冠状病六四事件法轮功
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.