- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我成功地使用 cuda-memcheck 获取有关错误内存访问的错误。使用 -g -G 编译 cuda 代码给出了很好的源位置,如下所示:
========= Error: process didn't terminate successfully
========= Invalid __global__ read of size 1
========= at 0x00000710 in /some/path/somefile.cu:117:some_function
========= by thread (0,14,0) in block (1,16,0)
========= Address 0x00abac20 is out of bounds
现在我尝试使用 -l 开关来获取内存泄漏信息。然而,在这里,我只得到地址:
========= CUDA-MEMCHECK
========= Leaked 3630 bytes at 0x007d2800
=========
========= Leaked 14740 bytes at 0x008e0700
...
=========
========= LEAK SUMMARY: 11122140 bytes leaked in 39 allocations
========= ERROR SUMMARY: 0 errors
400 bytes at 0x005d2000
如何从中获取实际代码位置?
最佳答案
为泄漏提供的地址不是代码地址,而是数据位置。遗憾的是,要查看这些位置的分配位置并不容易。
鉴于内存可以在任何地方分配(记住指针可以传递、别名等),检查泄漏(即未释放的已分配内存)的唯一方法是在程序退出时。因此,当您的程序退出时,cuda-memcheck 检查已分配但未释放的内存块,并为您提供内存块的地址,但它无法将其与分配时间联系起来。
相反,最简单的方法是手动检查您的代码以检查所有 cudaMalloc()
调用是否具有匹配的 cudaFree()
调用。然而,这可能是一个相当费力的过程......
关于c++ - cuda-memcheck,如何从地址到源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9615249/
valgrind quickstart page提到: Try to make your program so clean that Memcheck reports no errors. Once
cuda-memcheck 正在报告 Release模式 CUDA 内核的此信息: ========= Error: process didn't terminate successfully ===
我正在使用共享内存运行以下代码: __global__ void computeAddShared(int *in , int *out, int sizeInput){ //not
假设我正在使用一个使用 glibc 的库。当我在通过 Valgrind 运行程序时退出程序时,Valgrind 会检测到各种内存泄漏。我 100% 确定没有任何泄漏与我刚刚编写的几行代码明确相关。有没
我用以下 C 代码引入了内存错误: #include #include int main(int argc, char** argv){ int i; int *a = (int *)malloc
所以在我的程序中,我有一个连续的对象数组。我这样做是因为我想要这些对象中的每一个之间的空间局部性。它们非常小,位于一个非常大的数组中,并按顺序迭代。 因此我这样初始化它们 memoryPool = n
运行我的程序,出现此错误: ==3205== Invalid write of size 8 ==3205== at 0x40167C: push (load.c:75) ==3205==
我正在调试一个链接到商业 API 库(在 Linux 下)的程序。我正在使用 valgrind memcheck,因为我遇到了奇怪的行为,这可能是由于写入超出了分配的内存块所致: valgrind -
我成功地使用 cuda-memcheck 获取有关错误内存访问的错误。使用 -g -G 编译 cuda 代码给出了很好的源位置,如下所示: ========= Error: process didn'
我不认为有一种方法可以像使用 callgrind 那样以编程方式启用/禁用 Valgrind memcheck? (开始/停止检测)。 这是痛苦的,慢得无法使用(如果你想测试的代码自动启动并且你只是让
我试图调试我的 CUDA-C 程序,我发现 cuda-memcheck 可能会有所帮助。我的问题是我无法使用该工具,因为每次运行它时,即使在从互联网上获取的“Hello World”程序上,我也会得到
由于 OpenSSL 使用未初始化的内存,因此对使用 openldap2 的 libldap 的程序进行 Valgrind 是一件苦差事。存在一个 --ignore-fn选项,但仅适用于 Valgri
这是我的代码。 #include #include #include char buf1[100]; char buf2[100]; int main() { char **p = (c
我以前没有使用过 valgrind,但我认为它应该可以检测到一些内存错误。 我的代码: #include unsigned int a[2]; int main() { a[-1] = 21
我正在使用 valgrind 检查我的程序是否在类所需的内存范围内。当我运行 massif 时,我得到一个漂亮的图表,上面显示我的最大内存使用量(堆+堆栈)是 21 KB。当我运行 valgrind
我跑到 cuda-memcheck 调试我的代码,输出如下 ========= Program hit cudaErrorCudartUnloading (error 29) due to "driv
我是编程新手,正在学习 http://c.learncodethehardway.org/book/ex4.html 上的教程它向您展示了如何安装 valgrind。我已经编译了应该显示内存泄漏的示例
我正在使用 Valgrind 工具来了解不同类型的内存泄漏:直接丢失,间接丢失仍然可达并且可能丢失。示例 1: #include #include main() { int *p, i;
我正在从头开始用 C 编写一个计算器(家庭作业)并且在某处遇到内存问题..算法运行完美,但我得到了一组 Valgrind 错误/警告,例如: echo -n "1" | valgrind ./a.ou
我使用 massif、sgcheck 和 memcheck valgrind 的模块来检查 c/c++ 项目。我想知道是否可以让 valgrind 忽略部分代码。当我在我的项目上运行它时,opencv
我是一名优秀的程序员,十分优秀!