كيفية تجنب إدخال ملفات المصدر للمكتبة أثناء تصحيح الأخطاء في Creator QT مع GDB؟

StackOverflow https://stackoverflow.com/questions/1448426

سؤال

كيف يمكنني تكوين QT Creator و / أو GDB بحيث أثناء تصحيح تصحيح برنامجي باستخدام مكتبات QT، سيتجنب مصحح الأخطاء على ملفات QT المصدر؟

هل كانت مفيدة؟

المحلول

تحتاج إلى إيقاف تشغيل Auto-Solib - إضافة. من مطالبة GDB العادية، ستكتب:

(gdb) set auto-solib-add off

في كيو تي الخالق، تحت الخيارات-> Debugger-> GDB، يمكنك تحديد برنامج نصي بدء تشغيل GDB. قم بإنشاء ملف مع أمر "تعيين Auto-Solib-add Off" في ذلك، ثم قم بتعيين البرنامج النصي لبدء التشغيل GDB الخاص بك إلى هذا الملف.

نصائح أخرى

الميزة التي تريدها (كما هو موضح بواسطة RPG) غير متوفر من GDB, ، سيكون من الصعب استخدام IMHO إذا تم تنفيذها.

مماثلة، ولكن أبسط استخدام fstep مقترح الميزة GDB. وبعد منح:

foo((string("Hello") + string(" World!)).c_str());

ال fstep سوف تخطي جميع المكالمات على السطر الحالي، باستثناء آخر واحد (وبالتالي تخطي منشئ السلسلة، operator+(), ، و c_str(), ، والخطوة فقط في foo).

لم يتم تنفيذ هذا أيضا، ولكن من المحتمل أن يكون في غضون شهرين (إنه مفيد للغاية ل C++ تصحيح الأخطاء).

في الوقت نفسه، يمكنك تقريب الميزة عن طريق تعيين نقطة توقف مؤقت:

(gdb) list
1       #include <string>
2       #include <iostream>
3       using namespace std;
4
5       void foo(const char *s)
6       {
7         cout << s << endl;
8       }
9
10      int main()
11      {
12        foo((string("Hello") + string(" World!")).c_str());
13        return 0;
14      }
(gdb) b main
Breakpoint 2 at 0x8048901: file t.cc, line 12.
(gdb) run

Breakpoint 1, main () at t.cc:12
12        foo((string("Hello") + string(" World!")).c_str());
(gdb) tb foo
Breakpoint 3 at 0x80488ca: file t.cc, line 7.
(gdb) c
foo (s=0x804a1f4 "Hello World!") at t.cc:7
7         cout << s << endl;
(gdb) q

تحديث بعد التوضيح

في GDB يمكنك تحديد أي يتم البحث عن الدلائل المصدر - إذا لم تتمكن من العثور عليها، فلن تتمكن من الدخول إليها.

بالنسبة ل GDB إلى إدخال ملفات المصدر لمكتبات QT، يجب أن تعرف أين هي - من المحتمل أن يقوم QT-Creator بإخبار GDB حيث تكون عندما تطلق المصحح. انظر حول Qt-Creator للحصول على البرنامج النصي لبدء التشغيل GDB - قد يتم تحديدها هناك.

إذا لم يتم تحديدها في البرنامج النصي لبدء التشغيل، فهي GDB العثور على الملفات المصدر عليها، يجب أن تكون قادرا على تعديل البرنامج النصي لبدء التشغيل GDB لمسح أي دلائل مع directory أمر (انظر الرابط أعلاه لبناء الجملة إلخ)

قد تتمكن أيضا من عرض وحدة التحكم GDB من خلال الذهاب إلى "Debug -> المشاهدات -> GDB" للحصول على معلومات حول الأدلة المصدر التي تستخدمها حاليا مع show directories أمر في GDB، وإزالة أي إيقاف يدويا إذا كنت ترغب في القيام بذلك على أساس كل حالة على حدة.

ربما ليس بالضبط حل مثالي لهذا السؤال، ولكن ربما سيساعد ذلك استبعاد الدلائل التي يكون فيها مشروعك ليس (أي مكتبات الطرف الثالث، رؤوس النظام (مثل STL)، إلخ). إذا كان الأمر كذلك، نلقي نظرة على https://stackoverflow.com/a/31629136/5155476. و https://stackoverflow.com/a/42721326/5155476.. وبعد السابق يسمح لك بتحديد الدلائل (وجميع الدلائل الفرعية) لتخطي عند التنقل أثناء تشغيل GDB (حتى تتمكن من تغيير المجموعة كلما أردت)، لكنه يتطلب منك بناء GDB. يسمح هذا الأخير بالوظائف نفسها ولكن تم ضبطه مسبقا قبل تشغيل GDB، ولا يتطلب بناء GDB.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top