Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Android ndk r20使用ndk堆栈?_Android_Python_C++_Android Ndk_Android Sdk 2.3 - Fatal编程技术网

如何使用Android ndk r20使用ndk堆栈?

如何使用Android ndk r20使用ndk堆栈?,android,python,c++,android-ndk,android-sdk-2.3,Android,Python,C++,Android Ndk,Android Sdk 2.3,我正在尝试使用ndk提供的ndk stack命令 不幸的是,当我运行它时,脚本崩溃了 我在windows上运行的命令是 ndk-stack.cmd-sym build/intermediates/cmake/debug/obj/armeabi-v7a-dump stack.txt stack.txt文件包含来自logcat的墓碑 我收到的错误是 回溯最近的调用上次:文件 C:\Android\Android-ndk-r20\prebuild\windows-x86\u 64\bin\ndk-st

我正在尝试使用ndk提供的ndk stack命令

不幸的是,当我运行它时,脚本崩溃了

我在windows上运行的命令是

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

stack.txt文件包含来自logcat的墓碑

我收到的错误是

回溯最近的调用上次:文件 C:\Android\Android-ndk-r20\prebuild\windows-x86\u 64\bin\ndk-stack.py, 第134行,在 主文件C:\Android\Android-ndk-r20\prebuild\windows-x86\u 64\bin\ndk-stack.py, 第83行,主 proc=subprocess.Popencmd,stdin=subprocess.PIPE,stdout=subprocess.PIPE文件 C:\Android\Android-ndk-r20\prebuild\windows-x86\u 64\lib\python2.7/subprocess.py, 第711行,在init中 errread,errwrite文件C:\Android\Android-ndk-r20\prebuild\windows-x86\u 64\lib\python2.7/subprocess.py, 第948行,在_execute_child中 startupinfo WindowsError:[错误2]系统找不到指定的文件[在0.1s内完成]


cferris在前几天修复了此问题:

以下是您需要在本地应用或等待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():


基本上,您需要将.exe添加到提到llvm符号器的两个位置。我引入这个bug是因为我认为您不需要显式地说blah.exe。

cferris前几天修复了这个问题:

以下是您需要在本地应用或等待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():


基本上,您需要将.exe添加到提到llvm符号器的两个位置。我之所以引入这个bug,是因为我认为您不需要显式地说blah.exe。

这很有效。但现在它只为一个堆栈帧深度提供结果,而墓碑列出了许多堆栈帧。不过,我想这是一个独立的问题,超出了这个特定问题的范围。我无法在Windows上使用修补程序。它说错误:第6行的修补程序已损坏,但手动应用更改确实有帮助。很抱歉,花了这么长时间,但NDK r21 beta 1现在已发布,顺便说一句:成功了。但现在它只为一个堆栈帧深度提供结果,而墓碑列出了许多堆栈帧。我想这是一个单独的问题,超出了这个特定问题的范围。我无法在Windows上使用修补程序。它说错误:第6行的修补程序已损坏,但手动应用更改确实有帮助。抱歉,花了这么长时间,但NDK r21 beta 1现在已发布,顺便说一句: