我正在研究一些相當大的C++應用程序,其中大部分代碼存儲在靜態庫中,以及一些使用該代碼的程序。 我有什麼看起來像一個內存破壞運行時崩潰:調試:我的符號不會被加載到gdb中?
*** Error in `build/bin/myapp': malloc(): memory corruption (fast): 0x00000000021f62a0 ***
我想查一下出現這種情況。 GDB似乎是正確的工具(操作系統:Ubuntu 14.04)。
我的makefiles使用makefile命令行開關處理調試和釋放。
隨着開關打開,-g
標誌被添加,並且.a庫是23.8 MB,而應用程序是519 kB。 沒有,它的1.6 MB和486kB(所以我非常確定那裏的調試符號是)。
我的(部分)CFLAGS,由gcc manual的建議: CFLAGS = -std=c++11 -g -Wall -O0 -fno-inline
我運行GDB:
GDB --args構建/斌/ MYAPP datafile.dat -a -b( ...更多參數)
我的問題是,即使在調試版本,GDB不斷告訴我,它無法找到任何符號:
從build/bin/myapp中讀取符號...(找不到調試符號)...完成。
如果我從GDB中運行它,它崩潰了:
Program received signal SIGABRT, Aborted.
0x00007ffff5298cc9 in __GI_raise ([email protected]=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
而且backtrace
命令確實是符號缺失表明:構架10至18已遺漏的信息,並可能與我代碼:
(gdb) bt
#0 0x00007ffff5298cc9 in __GI_raise ([email protected]=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#1 0x00007ffff529c0d8 in __GI_abort() at abort.c:89
#2 0x00007ffff52d5394 in __libc_message ([email protected]=1, [email protected]=0x7ffff53e3b28 "*** Error in `%s': %s: 0x%s ***\n") at ../sysdeps/posix/libc_fatal.c:175
#3 0x00007ffff52e00f7 in malloc_printerr (action=<optimized out>, str=0x7ffff53e3ec8 "malloc(): memory corruption (fast)", ptr=<optimized out>) at malloc.c:4996
#4 0x00007ffff52e2e04 in _int_malloc (av=0x7ffff5620760 <main_arena>, bytes=36) at malloc.c:3359
#5 0x00007ffff52e47b0 in __GI___libc_malloc (bytes=36) at malloc.c:2891
#6 0x00007ffff5babe68 in operator new(unsigned long)() from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#7 0x00007ffff5c03e69 in std::string::_Rep::_S_create(unsigned long, unsigned long, std::allocator<char> const&)() from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#8 0x000000000045a7a5 in char* std::string::_S_construct<char const*>(char const*, char const*, std::allocator<char> const&, std::forward_iterator_tag)()
#9 0x00007ffff5c05bd6 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)()
from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#10 0x000000000042df7f in ??()
#11 0x000000000042eef6 in ??()
#12 0x0000000000421dab in ??()
#13 0x0000000000422223 in ??()
#14 0x0000000000422cfe in ??()
#15 0x0000000000423393 in ??()
#16 0x0000000000424600 in ??()
#17 0x000000000040fd50 in ??()
#18 0x000000000040566d in ??()
#19 0x00007ffff5283ec5 in __libc_start_main (main=0x4053c0, argc=6, argv=0x7fffffffddf8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>,
stack_end=0x7fffffffdde8) at libc-start.c:287
#20 0x000000000040604f in ??()
我做了檢查一些themanyquestionsabout這個話題,但沒有任何幫助(大多數爲r的引發被遺忘的-g
標誌或添加-s
,剝離符號)。
問題:下一步是什麼可以找出爲什麼/我的崩潰發生在哪裏?
附加信息:
gcc --version
:5.3.0gdb --version
:7.7.1- 代碼依賴:升壓和OpenCV
你是否帶過可執行文件?這將刪除調試信息。 –
看看'make'的輸出,它顯示所有正在執行的所有標誌。建築時是否顯示'-g'標誌?鏈接時不顯示'-s'標誌?或者使用'strip'命令? –
謝謝你們,但是每一個構建步驟都會被記錄到控制檯,而** yes **,它完全沒問題,-g和no -s,我一開始就檢查過(見我的CFLAGS)。 – kebs