c++ - Valgrind 调试结果不显示发生错误的行数

标签 c++ c debugging valgrind

这是Valgrind调试结果:

 valgrind --leak-check=yes --track-origins=yes  ./ns-server 
==43648== Memcheck, a memory error detector
==43648== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==43648== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info
==43648== Command: ./ns-server
==43648== 
--43648-- ./ns-server:
--43648-- dSYM directory is missing; consider using --dsymutil=yes
111111111111222222222222first get nextlen 564
nextlen is 564
i am here decry
==43648== Thread 2:
==43648== Invalid read of size 1
==43648==    at 0x6C49: strlen (vg_replace_strmem.c:427)
==43648==    by 0x100133F4F: StringBuffer::setString(char const*) (in     ./ns-server)
==43648==    by 0x100158B2F: XString::setFromAnsi(char const*) (in ./ns-server)
==43648==    by 0x100024476: CkRsa::DecryptStringENC(char const*, bool, CkString&) (in ./ns-server)
==43648==    by 0x10002452A: CkRsa::decryptStringENC(char const*, bool) (in ./ns-server)
==43648==    by 0x10001222A: My_RSA::MyDecryption(char*) (in ./ns-server)
==43648==    by 0x1000013FA: Server::Register(char*, int, char*) (in ./ns-server)
==43648==    by 0x100001114: Server::Evaluate_MSG(void*) (in ./ns-server)
==43648==    by 0x409898: _pthread_body (in /usr/lib/system/libsystem_pthread.dylib)
==43648==    by 0x409729: _pthread_start (in /usr/lib/system/libsystem_pthread.dylib)
==43648==    by 0x40DFC8: thread_start (in /usr/lib/system/libsystem_pthread.dylib)
==43648==  Address 0x100476730 is 0 bytes after a block of size 128 alloc'd
==43648==    at 0x47E1: malloc (vg_replace_malloc.c:300)
==43648==    by 0x100001334: Server::Register(char*, int, char*) (in ./ns-server)
==43648==    by 0x100001114: Server::Evaluate_MSG(void*) (in ./ns-server)
==43648==    by 0x409898: _pthread_body (in /usr/lib/system/libsystem_pthread.dylib)
==43648==    by 0x409729: _pthread_start (in /usr/lib/system/libsystem_pthread.dylib)
==43648==    by 0x40DFC8: thread_start (in /usr/lib/system/libsystem_pthread.dylib)
==43648== 

这个结果只是告诉我错误发生在哪个文件中,但没有告诉我它的行号,它的确切位置。我的文件包含数千行代码,我如何设置 Valgrind 的选项,以便我可以获得错误发生的确切行数?

我的生成文件:

LIBS = libStatic/libchilkat_i386.a libStatic/libchilkat_x86_64.a -lpthread
GPP = g++
TARGET = -o ns-server
CPP = main.cpp Server.cpp TCPConnect.cpp RSAsample.cpp

all:
    $(GPP) $(TARGET) $(CPP) $(LIBS)
clean:
    rm ns-server

最佳答案

如果二进制文件中没有调试符号,valgrind 将无法显示文件名和行号信息。要将调试信息放入二进制文件中,您需要在编译语句中使用 gcc 添加 -g 选项。

网上请引用valgrind manual了解更多详情。

关于c++ - Valgrind 调试结果不显示发生错误的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28667403/

相关文章:

python - 如何使用静态变量、自定义 getter 和 setter 扩展 SWIG 中的结构?

c++ - 是否保证 linux/freebsd 中的套接字描述符将具有几乎连续的或可比较的数字?

c - 如何确定我是否过度括号?

xcode - 如何使用 xcode 评估 LLVM 调试器中的 block ?

c++ - 现代双重引用

c++ - 从套接字转换(解析)谷歌 Protocol Buffer 流

linux - 为什么此代码会导致核心转储?

windows - 跟踪在 VB.net 应用程序中调用的外部 .EXE 的参数

android - 在客户端设备上登录 android 应用程序

c++ - Atmel Studio 7 如何编译和调试 Arduino 代码?