1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Android向けに作成したGoogle Test実行ファイルをLLDBでデバッグする

Last updated at Posted at 2023-04-09

概要

前回作成したAndroid向けテスト実行ファイルを、LLDBでデバッグする方法をまとめました。

LLDBを使ったデバッグ方法

lldb-serverを端末にコピー

lldb-serverを実行する端末にコピーします。
lldb-serverはndkディレクトリ内にあります。aarch64は端末のアーキテクチャにより適宜変更します。

$ cd ~/Library/Android/sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/darwin-x86_64/lib64/clang/12.0.8/lib/linux
$ adb push aarch64/lldb-server /data/local/tmp
$ adb shell chmod a+x /data/local/tmp/lldb-server

lldb-serverを実行

実行する端末でlldb-serverを起動します。

$ adb shell
emulator_arm64:/ $ cd /data/local/tmp/
emulator_arm64:/ $ ./lldb-server platform --listen *:1234

lldbで接続する

PCでlldbを起動し、lldb-serverを起動した端末に接続します。
接続先は適宜変えます。以下はローカルで起動しているエミュレータに接続しています。

$ lldb
(lldb) platform select remote-android
  Platform: remote-android
 Connected: no
(lldb) platform connect connect://localhost:1234
  Platform: remote-android
    Triple: aarch64-unknown-linux-android
OS Version: 30 (5.4.86-android11-2-00040-g29b2beadc627-ab7157994)
  Hostname: localhost
 Connected: yes
WorkingDir: /
    Kernel: #1 SMP PREEMPT Fri Feb 19 11:59:46 UTC 2021

デバッグ付き起動

端末と繋がったので、後は通常通りlldbを使ってデバッグします。
fileコマンドで実行ファイルを指定して、ブレークポイントを設定して起動してみました。

(lldb) file native-lib-tests
(lldb) br set --file ndk_library.cpp --line 5
(lldb) r
[==========] Running 2 tests from 1 test suite.
[----------] Global test environment set-up.
[----------] 2 tests from ExampleTest
[ RUN      ] ExampleTest.BasicAssertion
[       OK ] ExampleTest.BasicAssertion (0 ms)
[ RUN      ] ExampleTest.NDKLibTest
Process 9372 stopped
* thread #1, name = 'native-lib-test', stop reason = breakpoint 1.1
    frame #0: 0x00000055555e67a4 native-lib-tests`ndk_lib_add(a=2, b=2) at ndk_library.cpp:5:12
   2   	
   3   	int ndk_lib_add(int a, int b)
   4   	{
-> 5   	    return a + b;
   6   	}
Target 0: (native-lib-tests) stopped.
(lldb) c
Process 9372 resuming
[       OK ] ExampleTest.NDKLibTest (408592 ms)
[----------] 2 tests from ExampleTest (408593 ms total)

[----------] Global test environment tear-down
[==========] 2 tests from 1 test suite ran. (408593 ms total)
[  PASSED  ] 2 tests.
Process 9372 exited with status = 0 (0x00000000)

まとめ

これでデバッグしながらテストを書けるようになったと思います。
実はfileロード時にwarningが出ていて、これは後で調べることにします。。

(lldb) file native-lib-tests
warning: (aarch64) /Users/user-name/.lldb/module_cache/remote-android/.cache/E35B2B34-1204-B8F8-73FF-A936612E05F6/libm.so No LZMA support found for reading .gnu_debugdata section
warning: (aarch64) /Users/user-name/.lldb/module_cache/remote-android/.cache/0EF8B9FD-3BA8-4892-8093-21B735317A50/libdl.so No LZMA support found for reading .gnu_debugdata section
warning: (aarch64) /Users/user-nam,e/.lldb/module_cache/remote-android/.cache/859DF8A8-F625-B037-0BF4-6C208FBA5842/ld-android.so No LZMA support found for reading .gnu_debugdata section
Current executable set to '/Users/user-name/git-projects/ndk_lib_test/ndk_lib_test_app/app/.cxx/Debug/output/native-lib-tests' (aarch64).

参考元

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?