- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我已经成功地为 PPC85xx 架构交叉编译了 valgrid。我有以下文件
./coregrind/valgrind
./coregrind/vgpreload_core-ppc32-linux.so
./memcheck/memcheck-ppc32-linux
./memcheck/vgpreload_memcheck-ppc32-linux.so
./default.supp
我确实将这些文件放在目标文件夹的 /home/valg11
文件夹中,并将库导出为
export VALGRIND_LIB=/home/valg11
我正在运行 valgrind 并收到此错误。
[root@85xx valg11]# ./valgrind -v /home/val
==988== Memcheck, a memory error detector
==988== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==988== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==988== Command: /home/val
==988==
--988-- Valgrind options:
--988-- -v
--988-- Contents of /proc/version:
--988-- Linux version 2.6.32 (somya@somya-HP-Pro-3330-MT) (gcc version 4.2.2) #230 Mon Oct 12 14:02:51 IST 2015
--988--
--988-- Arch and hwcaps: PPC32, BigEndian, ppc32-int-flt-FX-GX
--988-- Page sizes: currently 4096, max supported 65536
--988-- Valgrind library directory: /home/valg11
--988-- Reading syms from /lib/ld-2.8.so
--988-- Reading syms from /home/val
--988-- Reading syms from /home/valg11/memcheck-ppc32-linux
--988-- object doesn't have a dynamic symbol table
--988-- Scheduler: using generic scheduler lock implementation.
--988-- Reading suppressions file: /home/valg11/default.supp
==988== embedded gdbserver: reading from /tmp/vgdb-pipe-from-vgdb-to-988-by-root-on-???
==988== embedded gdbserver: writing to /tmp/vgdb-pipe-to-vgdb-from-988-by-root-on-???
==988== embedded gdbserver: shared mem /tmp/vgdb-pipe-shared-mem-vgdb-988-by-root-on-???
==988==
==988== TO CONTROL THIS PROCESS USING vgdb (which you probably
==988== don't want to do, unless you know exactly what you're doing,
==988== or are doing some strange experiment):
==988== /home/valg11/../../bin/vgdb --pid=988 ...command...
==988==
==988== TO DEBUG THIS PROCESS USING GDB: start GDB like this
==988== /path/to/gdb /home/val
==988== and then give GDB the following command
==988== target remote | /home/valg11/../../bin/vgdb --pid=988
==988== --pid is optional if only one valgrind process is running
==988==
==988== error 22 Invalid argument
==988== error VG_(am_shared_mmap_file_float_valgrind) /tmp/vgdb-pipe-shared-mem-vgdb-988-by-root-on-???
正如某处所建议的那样,我确实在没有 vgdb 的情况下运行了 valgrind,但是 valgrind 没有检测到内存泄漏并给出了非法指令错误。
[root@85xx valg11]# ./valgrind -v --vgdb=no /home/val
==995== Memcheck, a memory error detector
==995== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==995== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==995== Command: /home/val
==995==
--995-- Valgrind options:
--995-- -v
--995-- --vgdb=no
--995-- Contents of /proc/version:
--995-- Linux version 2.6.32 (somya@somya-HP-Pro-3330-MT) (gcc version 4.2.2) #230 Mon Oct 12 14:02:51 IST 2015
--995--
--995-- Arch and hwcaps: PPC32, BigEndian, ppc32-int-flt-FX-GX
--995-- Page sizes: currently 4096, max supported 65536
--995-- Valgrind library directory: /home/valg11
--995-- Reading syms from /lib/ld-2.8.so
--995-- Reading syms from /home/val
--995-- Reading syms from /home/valg11/memcheck-ppc32-linux
--995-- object doesn't have a dynamic symbol table
--995-- Scheduler: using generic scheduler lock implementation.
--995-- Reading suppressions file: /home/valg11/default.supp
disInstr(ppc): unhandled instruction: 0x10E40301
primary 4(0x4), secondary 769(0x301)
==995== valgrind: Unrecognised instruction at address 0x4018ff0.
==995== at 0x4018FF0: memcpy (in /lib/ld-2.8.so)
==995== by 0x40021C3: _dl_start_final (in /lib/ld-2.8.so)
==995== by 0x4015F8B: _start (in /lib/ld-2.8.so)
==995== Your program just tried to execute an instruction that Valgrind
==995== did not recognise. There are two possible reasons for this.
==995== 1. Your program has a bug and erroneously jumped to a non-code
==995== location. If you are running Memcheck and you just saw a
==995== warning about a bad jump, it's probably your program's fault.
==995== 2. The instruction is legitimate but Valgrind doesn't handle it,
==995== i.e. it's Valgrind's fault. If you think this is the case or
==995== you are not sure, please let us know and we'll try to fix it.
==995== Either way, Valgrind will now raise a SIGILL signal which will
==995== probably kill your program.
==995==
==995== Process terminating with default action of signal 4 (SIGILL)
==995== Illegal opcode at address 0x4018FF0
==995== at 0x4018FF0: memcpy (in /lib/ld-2.8.so)
==995== by 0x40021C3: _dl_start_final (in /lib/ld-2.8.so)
==995== by 0x4015F8B: _start (in /lib/ld-2.8.so)
==995==
==995== HEAP SUMMARY:
==995== in use at exit: 0 bytes in 0 blocks
==995== total heap usage: 0 allocs, 0 frees, 0 bytes allocated
==995==
==995== All heap blocks were freed -- no leaks are possible
==995==
==995== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 4 from 2)
--995--
--995-- used_suppression: 4 dl-hack1 /home/valg11/default.supp:1205
==995==
==995== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 4 from 2)
Illegal instruction
我不知道问题出在哪里,有人在 powerpc 架构上运行过 valgrind 吗?我应该遵循什么程序?
最佳答案
很可能是它记录的第二个原因:
The instruction is legitimate but Valgrind doesn't handle it, i.e. it's Valgrind's fault. If you think this is the case or you are not sure, please let us know and we'll try to fix it.
您的可执行文件似乎是使用您正在使用的 valgrind 版本不完全支持的目标指令集编译的。假设您从最新的来源构建了 valgrind,解决您的问题的最简单方法可能是使用目标 ISA 的更严格(通常是旧版本)版本重新编译您的可执行文件。如果您提供完整的编译器版本和命令行信息,我们也许能够帮助您弄清楚如何做到这一点。
关于linux - 为 powerpc 运行 valgrind 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36685906/
我希望 valgrind 在发现第一个错误时停止并退出。 请勿推荐 --vgdb-error=1 :它不会退出 valgrind。您必须连接 gdb 并从那里终止。 --db-attach : 在最近
有人可以快速解释 Valgrind 的工作原理吗?一个例子:它如何知道内存何时被分配和释放? 最佳答案 Valgrind 基本上在“沙箱”中运行您的应用程序。在此沙箱中运行时,它能够插入自己的指令来进
我有一个因 SIGSEGV 而崩溃的应用程序。 --20183-- VALGRIND INTERNAL ERROR: Valgrind received a signal 11 (SIGSEGV) -
我有一个因 SIGSEGV 而崩溃的应用程序。 --20183-- VALGRIND INTERNAL ERROR: Valgrind received a signal 11 (SIGSEGV) -
我想使用 valgrind 检查长时间运行的进程是否存在内存泄漏。我怀疑我所追求的内存泄漏可能仅在执行几个小时后才会发生。我可以在 valgrind 下运行应用程序并获取 valgrind 日志,但这
我想用 valgrind 检查一个长时间运行的进程是否有内存泄漏。我怀疑我所追求的内存泄漏可能仅在执行数小时后才会发生。我可以在 valgrind 下运行应用程序并获得 valgrind 日志,但这样
如何在不通过 valgrind 命令选项启动它的情况下对每个 Process 实例执行 valgrind memcheck。 有没有办法将监控选项保存在进程中,而不是每次都使用 valgrind 命令
我使用了“--trace-children=yes”选项,我还使用了“--trace-children-skip=patt1,patt2,...”选项(过滤掉噪音过程)。但它对我来说仍然很慢,我的多进
我从 Valgrind 得到以下日志: MPK ==5263== 4 bytes in 1 blocks are still reachable in loss record 1 of 84 ==52
如何在 Valgrind 抑制文件中添加注释? 我需要为一个大型项目维护一个 Valgrind 抑制文件。我们从我们链接到的工具中过滤无法修复的错误。随着工具的新版本发布,此文件可能需要随着时间的推移
我有一个大程序要运行。使用 valgrind 需要几个小时才能运行。我听说有一些东西可以让我们为程序中的特定函数调用 valgrind。其余程序将正常执行(没有 valgrind env)。 任何人都
我可以用 valgrind 检测整数溢出缺陷吗?里面的哪个工具可以做到这一点? 最佳答案 Valgrind 没有可以检测整数溢出的工具。 您可能会使用 gcc 选项捕获这些错误: -ftrapv Th
我有一个简单的程序: int main(void) { const char sname[]="xxx"; sem_t *pSemaphor; if ((pSemaphor = sem_o
如何让 Valgrind 准确显示错误发生的位置?我编译了我的程序(通过 PuTTy 在 Windows 机器上通过 Linux 终端)添加了 -g 调试选项。 当我运行 Valgrind 时,我得到
或者最好是全部,而不仅仅是我的代码?我的程序使用 Gtk、Loudmouth 和其他一些东西,而这两个(以及它们背后的一些,libgcrypto、libssl)本身导致了如此多的错误,以至于我无法检测
我想尝试使用 valgrind 进行一些堆损坏检测。通过以下腐败“单元测试”: #include #include #include int main() { char * c = (ch
我看过类似的问题here ,但我的问题是我没有编辑 default.supp 文件的权限。例如,Valgrind 中是否有任何忽略所有抑制文件的命令行选项? 最佳答案 在 Valgrind 3.10.
我在一个运行无限循环的程序上使用 valgrind。 由于memcheck在程序结束后显示内存泄漏,但由于我的程序有无限循环,它永远不会结束。 那么有什么方法可以强制从 valgrind 时不时地转储
我一直在尝试使用 valgrind 查找一些可疑的内存错误。 在被分析的程序甚至到达我希望分析的点之前,它会因为对 mmap 的调用开始失败而退出。当它不在 valgrind 下时,这些调用会成功。
由于 OpenSSL 使用未初始化的内存,因此对使用 openldap2 的 libldap 的程序进行 Valgrind 是一件苦差事。存在一个 --ignore-fn选项,但仅适用于 Valgri
我是一名优秀的程序员,十分优秀!