简体   繁体   English

如何通过Android NDK r20使用ndk-stack?

[英]How do I use ndk-stack using Android NDK r20?

I am trying to use ndk-stack command provided with the ndk. 我正在尝试使用ndk提供的ndk-stack命令。

Unfortunately when I run it, the script crashes. 不幸的是,当我运行它时,脚本崩溃了。

The command I am running on windows is is... 我在Windows上运行的命令是...

ndk-stack.cmd -sym build/intermediates/cmake/debug/obj/armeabi-v7a -dump stack.txt ndk-stack.cmd -sym build / intermediates / cmake / debug / obj / armeabi-v7a -dump stack.txt

stack.txt file contains the the tombstone from logcat. stack.txt文件包含logcat中的墓碑。

The error I am receiving is.... 我收到的错误是...。

Traceback (most recent call last): File "C:\\Android\\android-ndk-r20\\prebuilt\\windows-x86_64\\bin\\ndk-stack.py", line 134, in main() File "C:\\Android\\android-ndk-r20\\prebuilt\\windows-x86_64\\bin\\ndk-stack.py", line 83, in main proc = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE) File "C:\\Android\\android-ndk-r20\\prebuilt\\windows-x86_64\\lib\\python2.7/subprocess.py", line 711, in init errread, errwrite) File "C:\\Android\\android-ndk-r20\\prebuilt\\windows-x86_64\\lib\\python2.7/subprocess.py", line 948, in _execute_child startupinfo) WindowsError: [Error 2] The system cannot find the file specified [Finished in 0.1s] 追溯(最近一次通话):文件“ C:\\ Android \\ android-ndk-r20 \\ prebuilt \\ windows-x86_64 \\ bin \\ ndk-stack.py”,行134,位于main()文件“ C:\\ Android \\ android-ndk-r20 \\ prebuilt \\ windows-x86_64 \\ bin \\ ndk-stack.py“,第83行,位于主proc = subprocess.Popen(cmd,stdin = subprocess.PIPE,stdout = subprocess.PIPE)文件” C: \\ Android \\ android-ndk-r20 \\ prebuilt \\ windows-x86_64 \\ lib \\ python2.7 / subprocess.py“,第711行, init errread,errwrite)文件“ C:\\ Android \\ android-ndk-r20 \\ prebuilt \\ Windows-x86_64 \\ lib \\ python2.7 / subprocess.py“,行_execute_child startupinfoinfo中的第948行)WindowsError:[错误2]系统找不到指定的文件[以0.1s完成]

cferris fixed this the other day: https://android-review.googlesource.com/c/platform/ndk/+/977970 cferris前几天解决了这个问题: https ://android-review.googlesource.com/c/platform/ndk/+/977970

here's the patch you'll need to apply locally (or wait for NDK r21): 这是您需要在本地应用的补丁(或等待NDK r21):

diff --git a/ndk-stack.py b/ndk-stack.py
index 93aa0297..f1bb4cd6 100755
--- a/ndk-stack.py
+++ b/ndk-stack.py
@@ -32,6 +32,10 @@ def find_llvm_symbolizer():

     Returns: An absolute path to llvm-symbolizer(1)."""

+    llvm_symbolizer = 'llvm-symbolizer'
+    if os.name == 'nt':
+        # Windows has to include the exe or it won't be found.
+        llvm_symbolizer += '.exe'
     # ndk-stack is installed to $NDK/prebuilt/<platform>/bin, so from
     # `~/Downloads/android-ndk-r18/prebuilt/linux-x86_64/bin/ndk-stack`...
     # ...get `/usr/enh/Downloads/android-ndk-r18/`:
@@ -42,14 +46,14 @@ def find_llvm_symbolizer():
     # And from there construct the llvm-symbolizer path.
     llvm_bin = os.path.join(ndk_root, 'toolchains', 'llvm', 'prebuilt', arch,
                             'bin')
-    path = os.path.join(llvm_bin, 'llvm-symbolizer')
+    path = os.path.join(llvm_bin, llvm_symbolizer)
     if os.path.exists(path):
         return path

     # Okay, maybe we're a standalone toolchain? (https://github.com/android-ndk
/ndk/issues/931)
     # In that case, llvm-symbolizer and ndk-stack are conveniently in
     # the same directory...
-    return os.path.abspath(os.path.join(ndk_bin, 'llvm-symbolizer'))
+    return os.path.abspath(os.path.join(ndk_bin, llvm_symbolizer))


 def main():

basically "you need to add .exe to the two places where llvm-symbolizer is mentioned". 基本上,“您需要在提到llvm-symbolizer的两个地方添加.exe”。 (i introduced this bug because i didn't think you needed to explicitly say "blah.exe".) (我引入了此错误,因为我认为您不需要明确地说出“ blah.exe”。)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM