gpt4 book ai didi

java - 在函数调用中,入口日志的数量远少于导出日志的数量。这是为什么?

转载 作者:行者123 更新时间:2023-11-28 08:22:58 24 4
gpt4 key购买 nike

函数 fragment 是这样的:

JNIEXPORT jint JNICALL functionCall() {
// Entrance
printf("Time: %d\tFile: %s\tFunc: %s\tLine: %d\n", clock(), __FILE__, __FUNCTION__, __LINE);

// other codes
...

// Exit
printf("Time: %d\tFile: %s\tFunc: %s\tLine: %d\n", clock(), __FILE__, __FUNCTION__, __LINE);
}

整个项目被编译成xxx.so文件,在一些Android应用程序中被java代码调用。现在我正在调试应用程序,它最终会崩溃。根据日志,我发现入口处打印的日志号只有14条,导出处打印的日志号却有200多条。这怎么会出来?

最佳答案

当 printf 格式参数与相应的参数不正确对齐时,几乎每个实现都会发生不好的事情。例如,如果在预期为 32 位值的情况下给定 64 位值,大多数实现会打印 64 位值的高 32 位。下一个要打印的参数(在您的例子中是 %s/FILE)将从 64 位值的下一个 32 位开始。但是在您的示例中,此数据将被视为指向字符串(又名 c 字符串)的指针。由于值的低 32 位没有任何意义,因此可能会发生坏事。

在这里,printf 可能假设 %d 表示 32 位整数(它的平台相关)。 clock() 返回“clock_t”。可能是 clock_t 大于 32 位,因为它返回时钟滴答。这将触发上述条件。

最好避免所有这些废话并使用 std::cout .

关于java - 在函数调用中,入口日志的数量远少于导出日志的数量。这是为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5137535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com