NSight Tegra

对于NSight Tegra来说,其实很简单,一个是编译,一个调试。并且把远程调试都给自动化了。但是做了哪些事情呢。这与我们手工做的效果是一样的。无非是通过代码实现而己。 例如对于设备的管理就是adb 命令,对于设备的属性的得到例如设备名的设置就是直接读取了adb shell getprop的结果,然后这些output 来得到的。

debug

如何起动apk,如何得到apk的信息,以前都是通过androidmanifest 来得到的,现在是直接通过*aapt* aapt dump badging 来得到,这个是 host端直接分析来得到的。

而对于gdbserver的使用机制是这样的。不在依赖于编译的时候把它给弄进去。当然也可以去读一下编译的pipeline来准备加载的自己的东东。例如unreal. 而是在debug时加截的。 并且现在的不在强制需要gdb.setup,因为debugInfo中本身就有代码的路径,当代码中路径找不到的时候,就会提示你让你输出入sourcecode.并且还会强制把project.outputDirectory设备为 solib-search-path 如果在这个位置还有就加载,没有继续执行。默认的情况是与gdbserver放在一起的。

  1. Push gdbserver to /data/local/tmp/ and chmod 777 it.
  2. If it runs/attaches - use it.
  3. Cat-copy gdbserver from /data/local/tmp/ to /data/data/<package>/ and chmod 777 it. 4. If it runs/attaches - use it.
  4. Use /data/data/<package>/lib/gdbserver. If it doesn’t run/attach - display error message.

Tip

“Cat-copy” command is cat <from> | run-as <package> sh -c 'cat > <to>'

General Rrule #. deploy apk use install -r 以及pm clear packagename #. 是不是完全一样是采用签名来验证的。 #. push 文件是根据连接类型来的,如果wifi的话,就不pull一些系统的库。 #. 然后打开gdbserver.

debug Manually

  1. launch apk
  2. pulling files
  3. start gdbserver
  4. start jdb debugger
  5. start gdb debugger
  6. for target #. launch app am start -D -W -n com.nvidia.devtech.hdrdemo/com.nvidia.devtech.NativeHDR.NativeHDR #. get pid by adb shell ps #. gdbserver attach adb shell run-as com.nvidia.devtech.hdrdemo lib/gdberver +debug-pipe --attach <PID> #. forword gdb port adb forward tcp:2020 localfilesystem:/data/data/com.nvidia.devtech.hdrdemo/debug-pipe #. forword jdb port adb forward tcp:4040 jdwp:3923
  7. host
  1. start gdb #. init gdb

    • source the gdb.setup -interpreter-exec console " source ...gdb.setup"
    -gdb-show solib-search-path
    -gdb-set solib-search-path
    -gdb-set can-use-hw-watchpoints 1
    
  2. attach the jdb java -classpath {0} -Duser.home=. com.sun.tools.example.debug.tty.TTY -connect com.sun.jdi.SocketAttach:hostname=localhost,port={1} -sourcepath "{2}" -mi",classPath, port, sourceFilesDirectory

Android NDK 编译流程

gdb setup process

现在的android的也有64与32位之分,所在同步lib时,也像操作系统一直接分为32位与64位。

sync file or path
os type,name remark  
32bit deviceFiles system/bin/app_process;/system/bin/app_process32;/system/bin/linker;/system/lib/lic.so
^ deviceFolders /system/lib/;/system/vendor/libs
64bit deviceFiles /system/bin/app_process64;/system/bin/linker64;/system/lib/lic.so
^ deviceFolders /system/lib64/;/system/vendor/libs64
local lib
路径 说明
%APPDATA%LocalTempAndroid<deviceID>system32 32 bit lib
%APPDATA%LocalTempAndroid<deviceID>system64 64 bit lib

NVIDIA_Nsight_Tegra_Release_2.0.0.14342.exe 之前是把32位与64位放在一起的,而在之后系统就直接把根据操作系统的类型直接分开了。 并且还会保存build.prop与build.prop.version属性。来判断是不要更新。之后的版本则是fingerprint是记录,同时记录自己安装installed_apks.xml

.. include:: libloadorder.log.txt

New gdbserver selection logic:

  1. Push gdbserver to /data/local/tmp/ and chmod 777 it.
  2. If it runs/attaches - use it.
  3. Cat-copy gdbserver from /data/local/tmp/ to /data/data/<package>/ and chmod 777 it.
  4. If it runs/attaches - use it.
  5. Use /data/data/<package>/lib/gdbserver. If it doesn’t run/attach - display error message.

“Cat-copy” command is “cat <from> | run-as <package> sh -c ‘cat > <to>’”.

开起不了gdb就可以这样的方式的查找哪里问题。