C / C ++调试器不适用于Android Studio 3.0.1

时间:2018-03-07 09:51:42

标签: android-studio-3.0 android-debug

双重调试(C / C ++和Java)在Android Studio 2.3.3中正常工作 minSdkVersion:22 targetSdkVersion / compileSdkVersion:26

当我更新到 Android Studio 3.0.1 时, Java调试器正常,但 C / C ++调试器不起作用。我在 Java和C / C ++调试器之间单独测试,以找出哪个调试器不起作用。

Android Studio 3.0.1上的问题是 C / C ++调试器不起作用。发生了这样的错误:

  

无法回复握手数据包   com.jetbrains.cidr.execution.debugger.backend.lldb.LLDBDriverException:   无法回复握手数据包   com.jetbrains.cidr.execution.debugger.backend.lldb.LLDBDriver $ ThrowIfNotValid.throwIfNeeded(LLDBDriver.java:143)     在   com.android.tools.ndk.run.lldb.AndroidLLDBDriver.connectPlatform(AndroidLLDBDriver.java:308)     在   com.android.tools.ndk.run.lldb.AndroidLLDBDriver.loadForLaunch(AndroidLLDBDriver.java:158)     在   com.android.tools.ndk.run.lldb.AndroidLLDBDriver.loadForAttach(AndroidLLDBDriver.java:199)     在   com.android.tools.ndk.run.AndroidNativeAppDebugProcess.prepareTarget(AndroidNativeAppDebugProcess.java:98)     在   com.android.tools.ndk.run.AndroidNativeDebugProcess.doStart(AndroidNativeDebugProcess.java:113)     在   com.jetbrains.cidr.execution.debugger.CidrDebugProcess $ 3.run(CidrDebugProcess.java:307)     在   com.jetbrains.cidr.execution.debugger.CidrDebugProcess $ MyCommandProcessor.consume(CidrDebugProcess.java:724)     在   com.jetbrains.cidr.execution.debugger.CidrDebugProcess $ MyCommandProcessor.consume(CidrDebugProcess.java:714)     在   com.intellij.util.concurrency.QueueProcessor.lambda为$ null $ 0(QueueProcessor.java:106)     在   com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:223)     在   com.intellij.util.concurrency.QueueProcessor.lambda $ wrappingProcessor $ 1(QueueProcessor.java:106)     在   com.intellij.util.concurrency.QueueProcessor.lambda为$ null $ 2(QueueProcessor.java:203)     在   com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:223)     在   com.intellij.util.concurrency.QueueProcessor.lambda $ startProcessing $ 3(QueueProcessor.java:203)     在   com.intellij.openapi.application.impl.ApplicationImpl $ 2.run(ApplicationImpl.java:334)     在   java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511)     在java.util.concurrent.FutureTask.run(FutureTask.java:266)at   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)     在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:617)     在java.lang.Thread.run(Thread.java:745)

如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

Android Studio 3.1也存在双重调试问题。尝试使用不同的Emulator SDK级别。我无法使用SDK 16仿真器进行双重调试。它只适用于我使用SDK 24模拟器。

答案 1 :(得分:0)

我使用了AVD Pixel 2 XL API 22-x86-Google API(可以植根),并遇到了相同的问题“未能获得对握手数据包的答复”,并显示了日志:

Launching 'setMeasurement() (1)' on Pixel 2 XL API 22 - x86 - Google API 
Running tests

$ adb shell am instrument -w -r   -e debug true -e \
    class 'com.my.package.MyClassTest#setMeasurement' \
    com.my.package.test/androidx.test.runner.AndroidJUnitRunner

Waiting for application to come online: com.my.package | com.my.package.test
...
Waiting for application to come online: com.my.package | com.my.package.test

Connecting to com.my.package.test
Now Launching Native Debug Session

$ adb shell cat /data/local/tmp/lldb-server \
    | sh -c 'cat > /data/data/com.my.package/lldb/bin/lldb-server
    \ && chmod 700 /data/data/com.my.package/lldb/bin/lldb-server'

$ adb shell cat /data/local/tmp/start_lldb_server.sh \
    | sh -c 'cat > /data/data/com.my.package/lldb/bin/start_lldb_server.sh \
    && chmod 700 /data/data/com.my.package/lldb/bin/start_lldb_server.sh'

Starting LLDB server:
failed to get reply to handshake packet

所以我试图重复命令(adb shell +本地运行的命令)-最后两个adb shell命令失败。检查电话文件目录结构,我发现:

  1. 在用于设置ldb-server的adb命令中,目标路径错误,它是“ /data/data/com.my.package”,APK位于/data/app/com.my.package-2(后缀) -2可能是动态创建的)
  2. 文件夹... / lldb / bin /也不存在
  3. 由于未在模拟器上复制/设置文件夹和文件,因此adb命令显然失败。这带来了我提交的另一个问题:"Android Studio C++ Debugger startup silently ignores phone LLDB setup critical issues"

对我有用的解决方法是在设置之前创建(错误?)目标文件夹:

adb shell
mkdir -p /data/data/com.my.package/lldb/bin

该问题报告为Android Studio C++ Debugger uses wrong paths on phone in LLDB setup procedure causing: failed to get reply to handshake packet

答案 2 :(得分:0)

简单的卸载和安装对我有帮助。

adb uninstall com.your.package