خطأ الإدخال/الإخراج GDB عن بُعد التصحيح إلى Android

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

  •  21-09-2019
  •  | 
  •  

سؤال

أحاول تصحيح تطبيق Android الذي يدعو الكود الأصلي للقيام ببعض عرض GL. الكود الأصلي هو رمز موجود أحاول التنفيذ (وأنا لا أعرف ذلك جيدًا). لقد حصلت على الكود الحالي لتجميع وربط وتثبيت بشكل صحيح ، ولدي بعض الوظائف الأصلية التي تتصل بهذا الرمز الذي يتم استدعاؤه بشكل صحيح من رمز Java الخاص بي. أحصل على segfault أحاول تعقبها ، ووجود بعض المشكلات في الحصول على GDB لتعيين نقطة توقف في البرنامج. هذا على Windows XP مع Cygwin - وربما يجب أن أذكر أنني ما زلت أتعلم GDB.

لقد بدأت مع الإرشادات في http://honeypod.blogspot.com/2008/01/debug-niative-application-for-droid.html; ؛ إليك ما أفعله حاليًا.

ابدأ التطبيق في المحاكي.

في موجه CMD:

> adb forward tcp:1234 tcp:1234
> adb shell
# gdbserver localhost:1234 --attach 2120
gdbserver localhost:1234 --attach 2120
Attached; pid = 2120
Listening on port 1234

في قذيفة Cygwin:

arm-eabi-4.2.1/bin/arm-eabi-gdb.exe out/apps/app-android/libDM.so
GNU gdb 6.6
Copyright (C) 2006 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 "--host=i686-pc-cygwin --target=arm-elf-linux"...
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
warning: shared library handler failed to enable breakpoint
0xafe0da04 in AppRefCounted::unref () at ../../stlport/stl/_iosfwd.h:39
39      class basic_ostream;
Current language:  auto; currently c++
(gdb) b Java_com_app_AppRenderer_onCreate
Breakpoint 1 at 0xafff1b1a: file apps/app-android/../../../app-Android/jni/DMJNI/DMInterface.cpp, line 75.
(gdb) c
Continuing.
Warning:
Cannot insert breakpoint 1.
Error accessing memory address 0xafff1b1a: Input/Output error.

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

أي أفكار ما يحدث؟

شكرًا

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

المحلول

بشكل أساسي ، في هذه المرحلة مع NDK 1.6 ، وجدت أنه لا يوجد دعم لهذا النوع من التصحيح بشكل صارم مع NDK. ومع ذلك ، إذا كنت تستخدم PDK (مجموعة تطوير المنصات) ، فيمكنك القيام بهذا النوع من التصحيح مع الكود الأصلي. لم نجرب PDK ، لأن إنشاء ملف خريطة يعمل بشكل جيد بما يكفي بالنسبة لنا (انظر هذا السؤال جدا) ، ولكن إذا ذهبت إلى هذا الطريق ، تحقق مجموعة NDK Google لمزيد من التفاصيل.

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