Blackberry Passport
如何透過GDB Debug Native App
參考資訊:
1. Remote_debugging_on_Blackberry_devices
main.c
#include <stdio.h> int main(int argc, char** argv) { printf("This is a testing for Blackberry 10\n"); return 0; }
bar-descriptor.xml
<?xml version="1.0" encoding="utf-8" standalone="no"?> <qnx xmlns="http://www.qnx.com/schemas/application/1.0"> <id>com.Steward.main</id> <name>main</name> <filename>main</filename> <versionNumber>1.0.0</versionNumber> <buildId>1</buildId> <description>Testing for Blackberry 10</description> <author>Steward</author> <authorId>gYAAgGE4qaHzBnzEAu8JKe4G1OI</authorId> <asset path="main" entry="true" type="Qnx/Elf">main</asset> </qnx>
1. 編譯檔案
$ source ~/bbndk/bbndk-*.sh $ ntoarmv7-gcc -g -o main main.c $ blackberry-nativepackager -package main.bar bar-descriptor.xml -devMode -debugToken ${HOME}/.rim/debugtoken_q30.bar
2. 透過Chrome安裝main.bar到手機上
3. 建立ssh連線
$ ssh-keygen -b 4096 -f ~/.ssh/id_rsa_4096 $ blackberry-connect xxx.xxx.xxx.xxx -password xxx -sshPublicKey ~/.ssh/id_rsa_4096.pub Info: Connecting to target xxx.xxx.xxx.xxx:4455 Info: Authenticating with target xxx.xxx.xxx.xxx:4455 Info: Encryption parameters verified Info: Authenticating with target credentials. Info: Successfully authenticated with target credentials. Info: Sending ssh key to target xxx.xxx.xxx.xxx:4455 Info: ssh key successfully transferred. Info: Successfully connected. This application must remain running in order to use debug tools. Exiting the application will terminate this connection.
4. 開啟另一個Terminal視窗並且Deploy main.bar(result的結果就是PID)
$ blackberry-deploy -debugNative -device xxx.xxx.xxx.xxx -password xxx -launchApp main.bar Info: Sending request: LAUNCH Info: Action: Launch Info: Debug native: on Info: Launching com.Steward.main.testDev_teward_main13c0fbb4... result::15708394 Info: done
5. Debug main.bar
$ ntoarm-gdb GNU gdb (GDB) 7.5 qnx (rev. 863) Copyright (C) 2012 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-unknown-nto-qnx8.0.0". (gdb) target qnx xxx.xxx.xxx.xxx:8000 Remote debugging using xxx.xxx.xxx.xxx:8000 MsgNak received - resending Remote target is little-endian (gdb) attach 15708394 Attaching to pid 15708394 [New pid 15708394 tid 1] warning: Shared object "/usr/lib/ldqnx.so.2" could not be validated and will be ignored. warning: Could not load shared library symbols for /usr/lib/ldqnx.so.2. Do you need "set solib-search-path" or "set sysroot"? warning: Host file /usr/lib/ldqnx.so.2 does not match target file <?> 0x017e3918 in ?? () (gdb) file main A program is being debugged already. Are you sure you want to change the file? (y or n) y Reading symbols from /home/steward/Downloads/main...done. (gdb) set solib-search-path $BBNDK/target_10_3_1_995/qnx6/armle-v7/lib/:$BBNDK/target_10_3_1_995/qnx6/armle-v7/usr/lib warning: Shared object "/usr/lib/ldqnx.so.2" could not be validated and will be ignored. warning: Shared object "/usr/lib/ldqnx.so.2" could not be validated and will be ignored. warning: Could not load shared library symbols for /usr/lib/ldqnx.so.2. Do you need "set solib-search-path" or "set sysroot"? warning: Host file /usr/lib/ldqnx.so.2 does not match target file <?> Cannot access memory at address 0x0 (gdb) b main Cannot access memory at address 0x0 Breakpoint 1 at 0x10c6786e: file main.c, line 5. (gdb) c Continuing. Breakpoint 1, main (argc=1, argv=0x106061c4) at main.c:5 5 printf("This is a testing for Blackberry 10\n"); (gdb) quit
使用者也可以透過SSH登入並直接到Appdata目錄執行,如下所示:
$ pwd /accounts/1000/appdata/com.Steward.main.testDev_teward_main13c0fbb4/app/native $ ./main This is a testing for Blackberry 10
P.S. 如果該App不是在目前登入的電腦上製作的話,基本上,使用者是沒有權限進入該App資料夾執行的!