【发布时间】:2016-02-01 21:55:11
【问题描述】:
所以我试图在 aarch64(ARM 8) 上运行我的 c++ 应用程序。 ***当使用 GDB 运行时,应用程序运行没有任何问题。但否则它会给我一个分段错误。***我检查了 dmesg,它是
unhandled level 3 permission fault (11) at 0x004ac010, esr 0x8300000f
[241808.064733] pgd = ffffffc0fe270000
[241808.068270] [004ac010] *pgd=00000001615c9003, *pmd=000000016f316003, *pte=02e0000147f42f53
[241808.076813]
[241808.076824] CPU: 2 PID: 12503 Comm: Jumpi Not tainted 3.10.67-g3a5c467 #1
[241808.076832] task: ffffffc0fef9c080 ti: ffffffc0f0fe4000 task.ti: ffffffc0f0fe4000
[241808.076841] PC is at 0x4ac010
[241808.076846] LR is at 0x401cb8
[241808.076852] pc : [<00000000004ac010>] lr : [<0000000000401cb8>] pstate: 20000000
[241808.076857] sp : 0000007fc044b600
[241808.076863] x29: 0000007fc044b680 x28: 0000000000000000
[241808.076873] x27: 0000000000000000 x26: 0000000000000000
[241808.076882] x25: 00000000004186ec x24: 0000000000418634
我尝试在 gdb 中设置禁用随机化,但仍然没有错误。然后我尝试了 valgrind。我收到很多错误消息,说创建了统一值,主要是在 dl_init_paths。但更重要的是,我在内存地址获得了错误的权限生成 SISGEV,当我通过内存时,它似乎在 (env_path_list) 中。 我在调试了几个小时后所处的位置。如果有人对下一步有帮助的建议/想法。 另一个有趣的事实是,当使用交叉编译器编译相同的代码并在此(ARM8)上运行时,它可以正常工作......!!
【问题讨论】:
-
根据这些地址的猜测,您似乎正在尝试执行您的数据部分,它带有未初始化的指针的味道。我的心理预测是,你在某个地方调用了一个已释放对象的虚拟方法。
-
你看核心转储了吗?
标签: gcc gdb arm valgrind arm64