<div dir="ltr">Hi all,<div><br></div><div>I'm attempting to follow the platform definition approach that Greg laid out when attempting to attach to a gdbserver running on an Android device.  In particular, Android arm v7a devices (Nexus 10 and Nexus 7).</div>
<div><br></div><div>I went ahead and created a python register definition.  I generated the definition file based on referencing these:</div><div><br></div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px">svn cat </span><a href="http://llvm.org/svn/llvm-project/lldb/trunk/examples/python/x86_64_linux_target_definition.py" target="_blank" style="font-family:arial,sans-serif;font-size:12.727272033691406px">http://llvm.org/svn/llvm-project/lldb/trunk/examples/python/x86_64_linux_target_definition.py</a><br style="font-family:arial,sans-serif;font-size:12.727272033691406px">
<span style="font-family:arial,sans-serif;font-size:12.727272033691406px">svn cat </span><a href="http://llvm.org/svn/llvm-project/lldb/trunk/examples/python/x86_64_target_definition.py" target="_blank" style="font-family:arial,sans-serif;font-size:12.727272033691406px">http://llvm.org/svn/llvm-project/lldb/trunk/examples/python/x86_64_target_definition.py</a><br style="font-family:arial,sans-serif;font-size:12.727272033691406px">
</div><div><br></div><div>and the output from using one of gdb's commands when gdb was attached to the gdbserver:</div><div><br></div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px">(gdb) maint print raw-registers</span><br style="font-family:arial,sans-serif;font-size:12.727272033691406px">
</div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px"><br></span></div><div><br></div><div>Now I'm attempting to do some debugging with lldb.</div><div><br></div><div>I created an app, fired it up on the Android, and attempt to attach to the running process.  Since I can debug this app fine remotely with gdb, I believe the basic pipe should be okay.</div>
<div><br></div><div>Here's what I do on the lldb side.  The Android app to be debugged is running at this point.</div><div><br></div><div>lldb</div><div><br></div><div># set the platform file</div><div><div>(lldb) settings set plugin.process.gdb-remote.target-definition-file /home/tfiala/work/arm-arch/armv7a_linux_target_definition.py</div>
<div><br></div><div># note I tried to use armv7-pc-linux, which said the file didn't match, and there</div><div># doesn't appear to be an armv7a-pc-linux.  Should I be using something else here?</div><div>(lldb) target create --arch arm-pc-linux libs/armeabi-v7a/libnative-activity.so</div>
<div><br></div><div># As above, only arm-pc-linux seemed to accept this file.  The .so file</div><div># is an armv7a-built lib in this case and runs fine on Nexus 7 and 10 devices.</div><div>(lldb) file --arch arm-pc-linux libs/armeabi-v7a/libnative-activity.so</div>
</div><div><br></div><div># Now ready for the connect: the adb redirector to communicate with</div><div># gdbserver is localhost:5039</div><div>(lldb) gdb-remote 5039</div><div><br></div><div><br></div><div>Here's what I get:</div>
<div><div>(lldb) thread list</div><div>Process 8176 stopped</div><div>* thread #1: tid = 8176, , stop reason = signal SIGTRAP</div><div>(lldb) bt</div><div>* thread #1: tid = 8176, , stop reason = signal SIGTRAP</div><div>
  * frame #0: </div></div><div><br></div><div>The app itself is still running on the Android device - at least the main thread is.  So the listing of it as stopped appears to be incorrect.  If I do "(lldb) exit", it will kill the main thread fwiw, but not nuke the process.  I'm not particularly concerned with that piece yet as it might be related to the dual-heritage java/native aspect.</div>
<div><br></div><div>I've got the architecture definition file indicating the triple it provides is arm-*-linux (at least, I think).  I have no idea if the file is working since I haven't (yet) figured out how to get output from the loading process.</div>
<div><br></div><div>I'm attaching my architecture definition file and the maintenance dump in case anybody sees something obviously wrong.</div><div><br></div><div>Some questions:</div><div><br></div><div>* Am I running the right commands in the right order to connect to a gdbserver where I'm specifying the register information explicitly?  Are the target and file commands needed with the architecture file?</div>
<div><br></div><div>* Why is LLDB telling me the armv7a object files are not valid armv7 files?</div><div><br></div><div>* Is the "pc" part of the arm-pc-linux part right, wrong, or a don't care for my scenario?</div>
<div><br></div><div>* Is it the mere fact that I'm attaching remotely good enough for lldb to be using the architecture definition specified with "settings set plugin.process.gdb-remote.target-definition-file ...", or is it keying off of some of the meta data it has (like me specifying the "target create" and "file --arch" commands)?</div>
<div><br></div><div>* How do I debug python loaded via lldb or get feedback from the lldb python support (e.g. if there's a syntax error or something else goofy) when running lldb?</div><div><br></div><div>I assume I have something really basic wrong at this point since the arch definition file specified seems to make no difference on the output vs. what I see when I attach with lldb without specifying the architecture file.</div>
<div><br></div><div>Thanks for any suggestions and for helping fill in my understanding!</div><div><br></div><div>Sincerely,</div><div>Todd Fiala</div></div>