6
這是我的代碼片段。使用new()運算符分配內存時,mudflap會拋出核心轉儲
int main()
{
int *var = new int(6);
cout<<"Hello\n";
delete var;
return 0;
}
當擋泥板編譯爲
$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.
就像一個警告,你明白你的代碼不*創建一個數組,對吧? – BoBTFish 2013-05-10 13:51:01
對於我來說,所有的工作都適用於Red Hat 5.4,gcc 4.7.2 – BoBTFish 2013-05-10 13:59:52
我可以建議在問題中包含回溯嗎?要獲得回溯,使用'gdb'('gdb a.out core')打開核心轉儲,並使用裏面的'bt'命令。 – 2013-05-10 14:33:34