كيف يمكنك بدء تشغيل البرنامج مرة أخرى في gdb مع 'الهدف البعيد'?

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

  •  09-06-2019
  •  | 
  •  

سؤال

عندما كنت تفعل المعتاد gdb الدورة على ملف قابل للتنفيذ على نفس الكمبيوتر ، يمكنك إعطاء الأمر "تشغيل" وأنه سيتم بدء تشغيل البرنامج مرة أخرى.

عندما كنت تشغل gdb على نظام مضمن مع الأوامر الهدف localhost:3210', كيف يمكنك بدء تشغيل البرنامج مرة أخرى دون إنهاء وإعادة تشغيل الخاص بك gdb ؟

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

نصائح أخرى

للأسف لا أعرف طريقة تشغيل التطبيق و لا تزال تحافظ على الدورة الخاصة بك.الحل هو وضع جهاز الكمبيوتر مرة أخرى إلى نقطة الدخول من البرنامج الخاص بك.يمكنك القيام بذلك إما عن طريق الدعوة:

jump وظيفة

أو

set $pc=عنوان.

إذا كنت munged الحجج main قد تحتاج مجموعة منهم مرة أخرى.

تحرير:

وهناك زوجين من المحاذير مع الأسلوب أعلاه يمكن أن يسبب مشاكل.

  • إذا كنت في برنامج متعدد الخيوط القفز الرئيسي سوف تقفز الترابط الحالي الرئيسية ، كل المواضيع الأخرى لا تزال قائمة.إذا كان مؤشر الترابط الحالي عقد قفل...ثم لديك بعض المشاكل.
  • تسرب الذاكرة ، إذا كنت تدفق البرنامج يخصص بعض الأشياء أثناء التهيئة ثم انك تسربت مجموعة من الذاكرة مع القفز.
  • فتح الملفات لا تزال مفتوحة.إذا كنت mmap بعض الملفات أو خطاب الدعوة من المرجح أن تفشل.

وذلك باستخدام القفزة ليست نفس الشيء مثل إعادة تشغيل البرنامج.

ويفترض أن تقوم بتشغيل gdbserver على جزءا لا يتجزأ من النظام.

يمكنك أن تطلب إلى إعادة تشغيل البرنامج الخاص بك بدلا من الخروج مع الهدف الممتد البعيد

"القفز _start" هي الطريقة المعتادة.

بالنسبة لي الطريقة الموضحة في 21.2 عينة GDB الدورة بدء التشغيل يعمل كبيرة.عندما كنت أدخل monitor reset halt في وقت لاحق في "(gdb)" موجه الهدف الأجهزة هو إعادة تعيين ثم إعادة تشغيل التطبيق مع c (= تواصل).

على load الأمر يمكن حذفها بين أشواط لأن هناك حاجة إلى فلاش البرنامج مرة أخرى و مرة أخرى.

خطوة بخطوة الإجراءات

جهاز التحكم عن بعد:

# pwd contains cross-compiled ./myexec
gdbserver --multi :1234

المحلية:

# pwd also contains the same cross-compiled ./myexec
gdb -ex 'target extended-remote 192.168.0.1:1234' \
    -ex 'set remote exec-file ./myexec' \
    --args ./myexec arg1 arg2
(gdb) r
[Inferior 1 (process 1234) exited normally]
(gdb) r
[Inferior 1 (process 1235) exited normally]
(gdb) monitor exit

اختبار في أوبونتو 14.04.

فمن الممكن أيضا أن تمر CLI الحجج البرنامج:

gdbserver --multi :1234 ./myexec arg1 arg2

و ./myexec جزء يزيل الحاجة إلى set remote exec-file ./myexec, ولكن هذا بعد مضايقات:

تمرير متغيرات البيئة و تغيير دليل العمل دون إعادة تشغيل: كيفية تعديل متغيرات البيئة و دليل العمل من gdbserver --متعددة دون إعادة تشغيل ؟

إذا كنت تقوم بتشغيل العادية gdb يمكنك كتابة 'تشغيل' اختصار 'r' و جدب يسألك إذا كنت ترغب في تشغيل البرنامج

على EFM32 سعيد أبو بريص أي من هذه الاقتراحات سوف يعمل بالنسبة لي, حتى هنا هو ما تعلمته من الوثائق على دمج GDB في الكسوف البيئة.

(gdb) mon reset 0
(gdb) continue
(gdb) continue

هذا يضعني في الدولة التي كنت أتوقع عندما ضرب الضبط من IDE.

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