#gdb
Вопрос:
Я последовательно получаю обратную дорожку gdb, показанную ниже. Будет ли это указывать на неудачу в выполнении malloc( ) ? Если это так, я также разрешаю «free-m» запускать в Linux-коробке, и я, похоже, не могу найти несоответствие. xsd__anyType-это типовое значение soap_dom_element
(gdb) bt
#0 0x0000007f9af24090 in raise () from /tmp/../lib/libc.so.6
#1 0x0000007f9af12894 in abort () from /tmp/../lib/libc.so.6
#2 0x0000007f9af5c950 in ?? () from /tmp/../lib/libc.so.6
#3 0x0000007f9af62d64 in ?? () from /tmp/../lib/libc.so.6
#4 0x0000007f9af66158 in ?? () from /tmp/../lib/libc.so.6
#5 0x0000007f9af67550 in malloc () from /tmp/../lib/libc.so.6
#6 0x0000007f9b8b909c in soap_malloc () from /opt/ad/lib/libjci_gsoap.so
#7 0x0000007f9b8d4d40 in ?? () from /opt/ad/lib/libjci_gsoap.so
#8 0x0000007f9b8d5834 in soap_in_xsd__anyType(soap*, char const*, soap_dom_element*, char const*) () from /opt/ad/lib/libjci_gsoap.so
#9 0x0000007f9b8d5874 in soap_in_xsd__anyType(soap*, char const*, soap_dom_element*, char const*) () from /opt/ad/lib/libjci_gsoap.so
#10 0x0000007f9b8d5874 in soap_in_xsd__anyType(soap*, char const*, soap_dom_element*, char const*) () from /opt/ad/lib/libjci_gsoap.so
#11 0x0000007f9b8d5874 in soap_in_xsd__anyType(soap*, char const*, soap_dom_element*, char const*) () from /opt/ad/lib/libjci_gsoap.so
#12 0x0000007f9b8d6fe4 in operator>>(std::istreamamp;, soap_dom_elementamp;) () from /opt/ad/lib/libjci_gsoap.so
#13 0x0000000000507274 in tev::Events::getSubscriptionReference[abi:cxx11](char const*) const (this=this@entry=0x7f99eb25b0,
msgBuf=0x7f99ec0218 "POST /onvif/event_service HTTP/1.0rnContent-Type: application/soap xml; charset=utf-8rnHost: 192.168.184.35rnContent-Length: 1438rnAccept-Encoding: gzip, deflaternX-Forwarded-For: ::ffff:192.168.185.1"...) at /home/jbloomrp/sandboxes/acvs-illustra-global/toolchain/arm/linaro-aarch64-2018.08-gcc8.2/work/amb_cv22_evk/arm/release/linaro-aarch64-2018.08-gcc8.2/aarch64-linux-gnu/include/c /8.2.1/bits/unique_ptr.h:342
Если malloc потерпит неудачу, то я должен увидеть, что он движется по спирали к 0, что, похоже, не так.
Swap: 0 0 0
total used free shared buff/cache available
Mem: 1983 995 703 147 285 826
Swap: 0 0 0
total used free shared buff/cache available
Mem: 1983 1038 659 147 285 782
Swap: 0 0 0
Даже на самом низком уровне я мог видеть, что свободный мем все еще составлял 659.
Комментарии:
1. Недостаточно контекста, но распределители в целом иногда могут обнаруживать, когда память повреждена (использование после освобождения, переполнение границ и т. Д.), И вполне возможно, что это то, что здесь прерывается.
2. Вы не получаете никакого сообщения об ошибке? (Наиболее распространенной причиной
malloc
проблем является то, что в какой-то более ранний момент времени внутренние данные диспетчера памяти были повреждены. Конечная причина может быть далека от симптомов и для ее определения может потребоваться много времени.)3.
malloc
произойдет прерывание из-за повреждения кучи, отсутствие свободной памяти просто вернет нулевой указатель4. Я бы рекомендовал вам перестроить вашу программу с дополнительными флагами сборки:
-g --fsanitize=address
затем, когда появится сообщение об ошибке, скопируйте журналы вставки, а затем просто задайте новый вопрос SO.5. Вы анализируете
core
дамп с другой машины?