Gcc -ggdb এবং gcc -g এর মধ্যে পার্থক্য কী


90

আমি যখন সি সি প্রোগ্রামগুলি সংকলন করতে জিসিসি ব্যবহার করি তখন আমি সাধারণত -gএলফ ফাইলটিতে কিছু ডিবাগের তথ্য পেতে ব্যবহার করি যাতে প্রয়োজনে জিডিবি আমাকে সহায়তা করতে পারে।

তবে, আমি লক্ষ্য করেছি যে কিছু প্রোগ্রাম ব্যবহার করে -ggdb, যেহেতু এটি ডিবাগ তথ্যটিকে আরও জিডিবি বান্ধব করে তোলার কথা।

তারা কীভাবে আলাদা হয় এবং কোনটি ব্যবহারের জন্য প্রস্তাবিত হয়?


দ্রষ্টব্য: আপনার প্রোগ্রামটি ডিবাগ করার জন্য বিকল্পগুলির একটি লিঙ্ক বা জিসিসি, http://gcc.gnu.org/onlinesocs/gcc/Debugging-Options.html#Debugging-Options

উত্তর:


38

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


লিঙ্ক বিবেচনা করতে পারেন বর্তমান যেমন এই আছে?
1737973

60

-gএবং -ggdbকিছুটা সামান্য পার্থক্যের সাথে সমান , আমি এটি এখানে পড়ছি :

-g ওএসের নেটিভ ফর্ম্যাট (ছুরিকাঘাত, সিওএফএফ, এক্সসিএফএফ, বা ডিয়ারএফ 2) এ ডিবাগিংয়ের তথ্য উত্পাদন করে।

-ggdb ডিবিগিংয়ের তথ্য নির্দিষ্ট করে জিডিবির উদ্দেশ্যে তৈরি করে।

-ggdb3 অতিরিক্ত ডিবাগিং তথ্য উত্পন্ন করে, উদাহরণস্বরূপ: ম্যাক্রো সংজ্ঞা সহ।

-ggdbনিজেই স্তরের ডিফল্টগুলি নির্দিষ্ট না করে -ggdb2(অর্থাত্ স্তর 2 এর জন্য জিডিবি)।


12

আমি সর্বনিম্ন একটি উদাহরণ পেয়েছি যেখানে -ggdb আমার জন্য অন্য ডিবাগ অপশনটি ব্যবহার করছিলাম যা আমরা ব্যবহার করছিলাম তার চেয়ে ভাল কাজ করেছে:

amitkar@lohgad:~> cat > main.c
#include <stdio.h>

int main(int argc, char **argv)
{
        printf("Args :%d\n", argc);
        for ( ;argc > 0;)
                printf("%s\n", argv[--argc]);

        return 0;
}
amitkar@lohgad:~> gcc -gstabs+ main.c -o main

amitkar@lohgad:~> file main
main: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.4, dynamically linked (uses shared libs), not stripped
amitkar@lohgad:~> /usr/bin/gdb ./main
GNU gdb 6.6.50.20070726-cvs
Copyright (C) 2007 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-suse-linux"...
Using host libthread_db library "/lib64/libthread_db.so.1".
(gdb) break main
Breakpoint 1 at 0x400577: file main.c, line 5.
(gdb) run
Starting program: /home/amitkar/main

Breakpoint 1, main (argc=Cannot access memory at address 0x8000df37d57c
) at main.c:5
5               printf("Args :%d\n", argc);
(gdb) print argc
Cannot access memory at address 0x8000df37d57c
(gdb)

দ্রষ্টব্য: এটি কেবল x86-64 বাক্সে ঘটে এবং -ggdb দিয়ে সংকলিত হলে চলে যায়। তবে ডিবাগারের নতুন সংস্করণগুলি -gstabs + দিয়েও কাজ করে


7

একটি জিনিস হ'ল "-জি" বহনযোগ্য (যেমন মেকফাইলে নন-জিএনইউ প্ল্যাটফর্মগুলিতে মৃত্যুদন্ড কার্যকর করা হবে)। সম্প্রতি একটি এআইএক্স মেশিনে -g বনাম -জিজিডিবি সম্পর্কিত আমার একটি বহনযোগ্যতার সমস্যা ছিল, সে কারণেই আমি এটিকে সামনে এনেছি।

-গিজিডিবি ব্যবহারের ক্ষেত্রে কী যুক্ত করে তা সম্পর্কে কোনও ধারণা নেই।


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