Valgrind不显示行号

时间:2022-11-27 20:56:45

I'm trying to find out where I made invalid writes to a piece of memory using Valgrind. It tells there is such an issue, also in what function, but not in what line. Although the function is quite small, I'd like to have the line-number shown in Valgrind. I've seen this on some outputs of Valgrind, but currently they are not shown, and I wonder why.

我试图找出使用Valgrind对一块内存进行无效写入的位置。它告诉我们存在这样一个问题,也就是说什么功能,但不是在哪一行。虽然功能非常小,但我想在Valgrind中显示行号。我在Valgrind的一些输出上看过这个,但目前它们没有显示,我想知道为什么。

The output is the following:

输出如下:

niklas@emerald:~/Arbeitsfläche/spyr/bin/Debug$ valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./spyr
[...]
==4404== Invalid write of size 4
==4404==    at 0x8048849: sp_ParticleBuffer_init (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr)
==4404==    by 0x8048BFC: sp_ParticleSystem_createParticle (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr)
==4404==    by 0x8048691: main (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr)
==4404==  Address 0x422a0a0 is 4 bytes after a block of size 4 alloc'd
==4404==    at 0x402BE68: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==4404==    by 0x8048BC1: sp_ParticleSystem_createParticle (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr)
==4404==    by 0x8048691: main (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr)
==4404== 
==4404== Invalid write of size 4
==4404==    at 0x8048865: sp_ParticleBuffer_init (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr)
==4404==    by 0x8048BFC: sp_ParticleSystem_createParticle (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr)
==4404==    by 0x8048691: main (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr)
==4404==  Address 0x422a09c is 0 bytes after a block of size 4 alloc'd
==4404==    at 0x402BE68: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==4404==    by 0x8048BC1: sp_ParticleSystem_createParticle (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr)
==4404==    by 0x8048691: main (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr)
[...]

I saw outputs where the line number is shown after a double-colon behind the file-name. I.e. /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr:23 or similar.

我看到了输出,其中行号在文件名后面的双冒号后显示。即/ home / niklas /Arbeitsfläche/ spyr / bin / Debug / spyr:23或类似。

How can I enable this?

我怎样才能启用它?

FYI, this is the sp_ParticleBuffer_init function.

仅供参考,这是sp_ParticleBuffer_init函数。

int sp_ParticleBuffer_init(sp_ParticleBuffer* buffer, sp_Uint32 buffer_size, int init_zero) {
    size_t size   = sizeof(sp_Particle) * buffer_size;
    buffer->next  = null;
    buffer->array = (sp_Particle*) malloc(size);
    buffer->alive_count = 0;

    if (!buffer->array) return SPYR_ALLOCFAILED;
    if (init_zero) memset((void*) buffer->array, 0, size);
    return SPYR_NOERR;
}

1 个解决方案

#1


13  

You need to include debug information in your binaries. Pass the -g flag if you're using gcc.

您需要在二进制文件中包含调试信息。如果您正在使用gcc,请传递-g标志。

#1


13  

You need to include debug information in your binaries. Pass the -g flag if you're using gcc.

您需要在二进制文件中包含调试信息。如果您正在使用gcc,请传递-g标志。