Recent

Author Topic: [LAMW] Debug Apk From IDE  (Read 5148 times)

rsu333

  • Full Member
  • ***
  • Posts: 110
Re: [LAMW] Debug Apk From IDE
« Reply #15 on: April 18, 2021, 08:25:29 am »
This is also good , example video ,But I suggest to upgrade it by LAMW manager.

jluixjurado

  • New Member
  • *
  • Posts: 21
Re: [LAMW] Debug Apk From IDE
« Reply #16 on: September 27, 2022, 08:37:11 pm »
Hi there!

I'm trying to debug from IDE but with not luck so far.

First of all, I'm using the ndk bundled with last version of LAMW (updated)

In that version, the gdb is in C:\lamw_manager\LAMW\sdk\ndk-bundle\prebuilt\windows-x86_64\bin\gdb.exe

I've followed the steps in LAMW_DebugApkFromIDE.txt to the 14th with success.

The Messages Window says:

     Listening on port 2021
     Remote debugging from host 127.0.0.1, port 57975 <--???
     Attached; pid = 20562

BUT, the app is frozen in my (real) device and, when setting breakpoints in any code line, the ? symbols appears (like not really connected)

I'm using Windows 10 btw.

Any idea would be greatly appreciated!

jluixjurado

  • New Member
  • *
  • Posts: 21
Re: [LAMW] Debug Apk From IDE
« Reply #17 on: September 28, 2022, 08:48:44 am »
Ok, I've downloaded the android-ndk-r10e package and it's working! Superb!

iwizard

  • New member
  • *
  • Posts: 8
Re: [LAMW] Debug Apk From IDE
« Reply #18 on: February 12, 2024, 02:52:24 pm »
Does anyone use the latest version of lamw and newer NDK versions such as 19c and above? Did the experiment debug function succeed in the end?

I use the latest lamw version, tried 19c (32bit_win), 20b (32bit_win), 21e (32bit_win/64win_win) all failed, basically in the last step of attaching the process, you can attach the process pop-up window and you can select the current program to be debugged, but then it will be stuck, unable F9
« Last Edit: February 12, 2024, 02:58:29 pm by iwizard »

iwizard

  • New member
  • *
  • Posts: 8
Re: [LAMW] Debug Apk From IDE
« Reply #19 on: February 14, 2024, 09:46:31 am »
After a few days of trying, I think that the gdb program provided by ndk is incompatible with the relevant method implementation in TGDBMIDebugger in lazarus, search for alternatives on the Internet, and find the "GDB 7.4.1 for Android with NEON support" provided by the https://gnutoolchains.com/android/ website, use gdb, GDBserver replaces the program with the same name in ndk R19C (this GDB7.4.1 only supports ARM platform) and can be smoothly debugged on Android real machines! ;)
« Last Edit: February 14, 2024, 09:50:11 am by iwizard »

maxerist

  • New Member
  • *
  • Posts: 20
Re: [LAMW] Debug Apk From IDE
« Reply #20 on: March 11, 2024, 02:07:58 pm »
... and find the "GDB 7.4.1 for Android with NEON support" provided by the https://gnutoolchains.com/android/ website, use gdb, GDBserver replaces the program with the same name in ndk R19C (this GDB7.4.1 only supports ARM platform) and can be smoothly debugged on Android real machines! ;)

Many thanks for the info. I postponed the debug setup in my case until the moment it became essential to do. Side note: LAMW is a great tool, but when going advanced many small tasks/obstacles turns the development into a minefield :) Step-by-step debugging makes it much less painful.

More details for those who finds it still scary. I didn't believe but it worked.
  • My initial setup used NDK r19c - x86_64, I downloaded 32-bit version, copied to an alternative folder (ndk32) and changed the setting "Path to Android NDK" to this one and LAMW automatically detected NDK Prebuild setting.
  • The gnutoolchains instructions were slightly different. There's no arm-linux-androideabi-gdb.exe in the r19c "toolchains\arm-linux-androideabi-4.9\prebuilt\windows\bin" folder so I simply copied. The target folder for gdbserver copy operation is "prebuilt\android-arm\gdbserver"
  • Then one just more or less should follow the instructions about enabling debugging from https://github.com/jmpessoa/lazandroidmodulewizard/blob/master/docs/LAMW_DebugApkFromIDE.txt. The path to the gdb is where the new executable is placed (arm-linux-androideabi-gdb.exe). Also no need for IDE recompilation as the note said, it probably was needed when the feature was introduced. The modern LAMW is already debug-friendly

This simple steps allowed step-by-step debugging on an external tablet. This particular working example was tested on Windows 7, Lazarus 2.2.2, Fpc 3.2.2 cross-compiled with FPCUPdeluxe for hardware floating point (VFPv3), LAMW 0.8.6 and an external android tablet. Happy debugging :)

maxerist

  • New Member
  • *
  • Posts: 20
Re: [LAMW] Debug Apk From IDE
« Reply #21 on: March 13, 2024, 12:11:28 pm »
It looks like if one wants to debug several projects while keeping the same Android session running on the device, there  might be obstacles to this. In my case I tried to switch from a current app I'm extending to an existing demo (com.example.appdemo1). After launching the first one once, the second one refused to debug with with the error "Fatal: [Exception] Failed: Cannot kill last gdbserver PID=..."

What the following inquiry showed is
  • LAMW debugger installs gdbserver  (implicitly probably) together with the primary apk.
  • This process  (gdbserver) keeps running after the program finishes. Both the main program and apk are listed as running from the same "user", for example u0_a254. This info is available with [adb shell ps -A] command
  • When a new install/run is launched, the script from "lazandroidmodulewizard-master\ide_tools\apkbuild.pas" (TApkBuilder.KillLastGdbServer) tries to kill the gdbserver if it is found in (probably ps ) output. It does this with "run-as" having the package name of the main app. This routine always works while I'm at the same project (the same package name)
  • But if I switch to another program and try to run/debug it, obviously the script will try to kill the running gdbserver instance as another package and fails. The user in this case is different, for example u0_a252, but it is irrelevant since Android itself assigns new users to new installations, but for us it's important because gdbserver comes together with the package as one "user"

So in order to debug a couple of android apps one has the following choices
  • Restart the android device everytime it is necessary to switch the app for debugging
  • Use the equivalent adb commands (run-as, kill) for killing gdbserver manually before switching to another app.

Please let me know whether some other options or fixes are available.

Thanks



 

TinyPortal © 2005-2018