【发布时间】:2013-05-05 05:29:02
【问题描述】:
这是我的代码 sn-p。
int main()
{
int *var = new int(6);
cout<<"Hello\n";
delete var;
return 0;
}
当使用 mudflap as 编译时
$export MUDFLAP_OPTIONS="-print-leaks -mode-check"
$g++ test.cpp -fmudflap -lmudflap
$./a.out
Segmentation fault (core dumped)
但是当没有挡泥板选项编译时,它不会抛出核心转储。 我是泥板新手。请告诉我是否以错误的方式使用挡泥板。
仅供参考:
$uname -a
Linux localhost.localdomain 2.6.18-308.4.1.el5 #1 SMP Wed Mar 28 01:54:56 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux
$g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux-gnu/4.7.3/lto-wrapper
Target: x86_64-redhat-linux-gnu
Configured with: /root/rohit/gcc-4.7.3/configure --prefix=/usr/
Thread model: posix
gcc version 4.7.3 (GCC)
bt 充满了核心转储
核心是由`./a.out'生成的。
Program terminated with signal 11, Segmentation fault.
[New process 22176]
#0 0x0000003ca5e075c8 in ?? () from /lib64/libgcc_s.so.1
(gdb) bt ful
#0 0x0000003ca5e075c8 in ?? () from /lib64/libgcc_s.so.1
No symbol table info available.
#1 0x0000003ca5e0882b in _Unwind_Backtrace () from /lib64/libgcc_s.so.1
No symbol table info available.
#2 0x0000003c96ce5eb8 in backtrace () from /lib64/libc.so.6
No symbol table info available.
#3 0x00002b4acf58b417 in __mf_backtrace (symbols=0x6a51db8, guess_pc=0x2b4acf58d351, guess_omit_levels=2)
at /root/rohit/gcc-4.7.3/libmudflap/mf-runtime.c:1981
pc_array = (void **) 0x6a51e00
pc_array_size = 6
remaining_size = <value optimized out>
omitted_size = Unhandled dwarf expression opcode 0x9f
i = <value optimized out>
#4 0x0000000000000002 in ?? ()
No symbol table info available.
#5 0x0000000000000004 in ?? ()
No symbol table info available.
#6 0x0000000000000000 in ?? ()
No symbol table info available.
【问题讨论】:
-
作为一个警告,您确实知道您的代码没有创建一个数组,对吧?
-
Red Hat 5.4、gcc 4.7.2 对我来说一切正常
-
我可以建议在问题中包含回溯吗?要获取回溯,请使用
gdb(gdb a.out core) 打开核心转储,并在其中使用bt命令。 -
@BoBTFish:如果是在复制代码时出现拼写错误,而实际代码实际上创建了一个数组,那么泥瓣就理所当然地barfs。
-
@JanHudec 这是 coredump 的回溯