【发布时间】:2022-01-27 07:23:09
【问题描述】:
我有一个使用 JNI 调用 c/cpp 代码(它是 .so 文件)的 java 应用程序。 我正在使用这个 .so 文件中的 API。我要调试.so文件,怎么调试?
我尝试了以下方法:
- 我将 gdb 附加到 xyz.so 并添加断点。
- 运行java代码
但无法命中断点。 你能建议如何调试它。 在断点之后,我无法运行 r 或 c(继续)。
那么在这种情况下我们该如何调试呢?
提前致谢。
【问题讨论】:
我有一个使用 JNI 调用 c/cpp 代码(它是 .so 文件)的 java 应用程序。 我正在使用这个 .so 文件中的 API。我要调试.so文件,怎么调试?
我尝试了以下方法:
但无法命中断点。 你能建议如何调试它。 在断点之后,我无法运行 r 或 c(继续)。
那么在这种情况下我们该如何调试呢?
提前致谢。
【问题讨论】:
当你编译某些东西时,作为输出,你有汇编代码(由计算机运行)和符号(你的源代码和汇编代码)。
为了调试 C/C++ 部分,您必须具有适当的符号,以便能够以与 java 中相同的用户体验放置断点。否则,您只会看到一个巨大的数字序列,而您所做的实际上是逆向工程代码。
因此,您需要默认不发货的符号(您应该询问供应商是否可以提供)。
【讨论】: