macos - 链接时调试符号丢失?

标签 macos debugging gcc valgrind

我正在尝试使用调试符号编译一个程序,以便 valgrind 会给我行号。我发现如果我一次性编译一个简单的测试程序(使用 -g),那么它包含符号。但是,如果我分两次编译(即编译然后链接),那么它不包含调试符号。

这是单次通过情况的编译命令:

g++ -g file.c -o file

并且对于两次传球
g++ -g -c file.c -o file.o
g++ -g file.o -o file

实际程序如下所示,包含一个简单的 Invalid Write
int main(){
    int* x = new int[10];
    x[10]=1;

}

如果我通过一次编译,则 valgrind 给出以下内容(注意最后的行号)
==24114== 40 bytes in 1 blocks are definitely lost in loss record 2 of 9
==24114==    at 0xB823: malloc (vg_replace_malloc.c:266)
==24114==    by 0x5768D: operator new(unsigned long) (in /usr/lib/libstdc++.6.0.9.dylib)
==24114==    by 0x576DA: operator new[](unsigned long) (in /usr/lib/libstdc++.6.0.9.dylib)
==24114==    by 0x100000F09: main (file.c:3)

而如果我分两次编译,我会得到这个(没有行号):
==24135== 40 bytes in 1 blocks are definitely lost in loss record 2 of 9
==24135==    at 0xB823: malloc (vg_replace_malloc.c:266)
==24135==    by 0x5768D: operator new(unsigned long) (in /usr/lib/libstdc++.6.0.9.dylib)
==24135==    by 0x576DA: operator new[](unsigned long) (in /usr/lib/libstdc++.6.0.9.dylib)
==24135==    by 0x100000F09: main (in ./file)

对此的任何见解将不胜感激。我在 OS X 10.7.3 上使用 gcc 版本 4.2.1

最佳答案

最后评论 - 它确实是 OS X 特定的“功能”,与 OS X 链接调试信息的方式有关。 Valgrind 通过命令 --dsymutil=yes 帮助用户规避问题.

您可以在此处阅读更多相关信息:http://valgrind.org/docs/manual/manual-core.html#manual-core.erropts

感谢 Dave Goodell,他在 valgrind 用户论坛上向我发送了解决方案。

关于macos - 链接时调试符号丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9838280/

相关文章:

ruby - 如何解决 "You need to have Ruby and Sass installed and in your PATH for this task to work"警告?

linux - gcc 错误消息瘫痪(代码页或编码问题)

c - 臂组件 memset 更换

c - 这个地址指向哪个函数?

macos - 如何为 theano 启用 MacBook Pro GPU 优化?

c++ - 在 Mac OS X 上构建 Trilinos(科学计算库)时遇到问题

macos - OSX Quicklook 调试

c++ - 如何在 C++ 中调试大量模板代码?

xcode - 通过断点编号 Xcode 识别断点

c++ - 如何找到我的应用程序在无法访问的客户站点上变得无响应的原因