yoshioka-rogu
2016年2月17日 17時06分
お世話になっております。吉岡と申します。
Armadillo420でプログラムが異常終了する原因を調べているのですが原因がわからず困っております。
環境 Armadillo420 atmark-dist-20140415 linux-2.6.26-at19
printfを入れて確認してみたのですが
最後に出力されているのはsystem または popen関数(pcloseは確認)を呼んだ後に終了していると思われます。
system、popen関数で行っている内容としては
ping -c 3 (IP)、 route、 pppd等
を行っていますが
pingコマンドで終了するのが大半(使用頻度が最も多いせいなのか?)
過去のトピックでcoreファイルを作成するデバック方法があったので確認してみたのですが
$ arm-linux-gnueabi-gdb datamail -c core.2642 GNU gdb 6.8-debian Copyright (C) 2008 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "--host=i486-linux-gnu --target=arm-linux-gnueabi"... warning: exec file is newer than core file. Reading symbols from /usr/arm-linux-gnueabi/lib/libpthread.so.0...done. Loaded symbols for /usr/arm-linux-gnueabi/lib/libpthread.so.0 Reading symbols from /usr/arm-linux-gnueabi/lib/libc.so.6...done. Loaded symbols for /usr/arm-linux-gnueabi/lib/libc.so.6 Reading symbols from /usr/arm-linux-gnueabi/lib/ld-linux.so.3...done. Loaded symbols for /usr/arm-linux-gnueabi/lib/ld-linux.so.3 Reading symbols from /usr/arm-linux-gnueabi/lib/libnss_files.so.2...done. Loaded symbols for /usr/arm-linux-gnueabi/lib/libnss_files.so.2 Reading symbols from /usr/arm-linux-gnueabi/lib/libnss_dns.so.2...done. Loaded symbols for /usr/arm-linux-gnueabi/lib/libnss_dns.so.2 Reading symbols from /usr/arm-linux-gnueabi/lib/libresolv.so.2...done. Loaded symbols for /usr/arm-linux-gnueabi/lib/libresolv.so.2 Core was generated by `datamail -d -c -a -p'. Program terminated with signal 11, Segmentation fault. [New process 2665] [New process 2666] [New process 2664] [New process 2663] [New process 2662] [New process 2661] [New process 2660] [New process 2642] #0 0x00000078 in ?? () (gdb)
お判りになる方がいらっしゃればご教授お願いします。
コメント
yoshioka-rogu
コメントありがとうございます。
> "(gdb)"というプロンプトが出ている状態で、
> "bt"(backtrace)コマンドの実行結果を添付してもらえますでしょうか?
btコマンドの実行結果
Core was generated by `datamail -d -c -a -p'. Program terminated with signal 11, Segmentation fault. [New process 2665] [New process 2666] [New process 2664] [New process 2663] [New process 2662] [New process 2661] [New process 2660] [New process 2642] #0 0x00000078 in ?? () (gdb) bt #0 0x00000078 in ?? () #1 0x00000078 in ?? () Backtrace stopped: previous frame identical to this frame (corrupt stack?) (gdb) frame 0 #0 0x00000078 in ?? () (gdb) frame 1 #1 0x00000078 in ?? () (gdb) info registers r0 0x56c41811 1455691793 r1 0x1 1 r2 0x0 0 r3 0x56c41811 1455691793 r4 0x4396b4d8 1133950168 r5 0x4396b490 1133950096 r6 0x40041000 1074008064 r7 0x78 120 r8 0x4002bfa8 1073921960 r9 0x0 0 r10 0x3d0f00 4001536 r11 0x4396b490 1133950096 r12 0x432ec 275180 sp *value not available* lr 0x78 120 pc 0x78 0x78 fps 0x0 0 cpsr 0x60000010 1610612752 (gdb) info sharedlibrary From To Syms Read Shared Object Library 0x40029c90 0x40037398 Yes /usr/arm-linux-gnueabi/lib/libpthread.so.0 0x40058b70 0x4013f760 Yes /usr/arm-linux-gnueabi/lib/libc.so.6 0x400007c0 0x40018bbc Yes /usr/arm-linux-gnueabi/lib/ld-linux.so.3 0x44196818 0x4419d318 Yes /usr/arm-linux-gnueabi/lib/libnss_files.so.2 0x441a7acc 0x441a9b08 Yes /usr/arm-linux-gnueabi/lib/libnss_dns.so.2 0x441b4f80 0x441bf550 Yes /usr/arm-linux-gnueabi/lib/libresolv.so.2 (gdb)
と表示されます。
不要かもしれませんがGDBをサイトで調べて
(gdb) info registers
(gdb) info sharedlibrary
の情報も表示してみました
翻訳サイトで(corrupt stack?) (壊れてスタック?)
スタックが壊れた(Stack Overflow?)という事なのでしょうか?
> GDBでのSegmentation faultのデバッグについては、以下のような記事もありますが、
> 参考になりますでしょうか。
> http://d.hatena.ne.jp/JiaLu/20120113/1330396897
参考にしてみます、ありがとうございます。
> なお、差し支えなければ、現象を再現させられる最小限のソースコードを添付していただけると、
> より適切なアドバイスが可能かと思います。
現在複数のthreadが複雑に動いている状態で
現象できる最小限のソースにするには時間がかかると思われますが
関係のないthreadを停止して確認していきたいと思います。
at_yashi
yoshioka-rogu
at_yashi
yoshioka-rogu
コメント、ありがとうございます。
> シンボルは -g
があれば問題ありません。-O0
は関係ないはずです。
> ビルドのログを見せてもらえますか?
現在-O0
が追加になっています。
atmark@atde3:~/atmark-dist-20140415/user/MOBILE-908W002$ make arm-linux-gnueabi-gcc -c -g -O0 -Dlinux -D__linux__ -Dunix -DEMBED -Wall -fno-common -o main.o main.c (途中省略) arm-linux-gnueabi-gcc -c -g -O0 -Dlinux -D__linux__ -Dunix -DEMBED -Wall -fno-common -o strsplit.o strsplit.c arm-linux-gnueabi-gcc -L../../../atmark-dist-20140415/lib -L/usr/arm-linux-gnueabi/lib -lpthread -o datamail main.o tool.o ttyUFunc.o mailFunc.o pppFunc.o tcpServer.o tcpClient.o mntFunc.o dirFunc.o timeFunc.o msgBox.o ttyLine.o strsplit.o -lc -lgcc atmark@atde3:~/atmark-dist-20140415/user/MOBILE-908W002$
以上、よろしくお願いいたします。
at_yashi
yoshioka-rogu
コメントありがとうございます。
> ビルドした直後のファイルを Armadilloに持っていくと、関数名が表示されませんか?
VMwareでビルドしたものをUSBメモリーを使用しArmadilloにコピーして試験しております
できたCoreファイルもUSBメモリーでVMwareにコピーしてGDBを行っております。
再現性のある最小限のソースにしながらの試験ですが
本日の異常停止ではcoreファイルも作成されませんでした。
シリアルログでは
「I NKF Convert(20160220-135635.body)」
で停止していたのでEnterキーを押すと
「Segmentation fault」が表示された。
ulimitの設定がされていないのかと思ったが
unlimitedとなっていた
I Erase Body-File(20160220-135627.body)[original]. I Erase Body-File(20160220-135627.body)[base64]. I M30STEP[35] M30CODE[0]. I name[20160220-135635.body]. I check Body File[OK]. I M30STEP[32] M30CODE[0]. I NKF Convert(20160220-135635.body) [1] + Segmentation fault datamail -d -c -a -p [root@armadillo420-0 (ttymxc1) ~]# ulimit -a time(seconds) unlimited file(blocks) unlimited data(kbytes) unlimited stack(kbytes) 8192 coredump(blocks) unlimited memory(kbytes) unlimited locked memory(kbytes) 32 process 512 nofiles 1024 vmemory(kbytes) unlimited locks unlimited [root@armadillo420-0 (ttymxc1) ~]# ps PID Uid VmSize Stat Command 1 root 588 S init 2 root SW< [kthreadd] 3 root SW< [ksoftirqd/0] 4 root SW< [events/0] 5 root SW< [khelper] 6 root SW< [kblockd/0] 7 root SW< [ksuspend_usbd] 8 root SW< [khubd] 9 root SW< [kmmcd] 10 root SW [pdflush] 12 root SW< [kswapd0] 13 root SW< [aio/0] 14 root SW< [mtdblockd] 18 root SW [pdflush] 28 root SW< [mmcqd] 167 root 388 S < udevd --daemon 372 root 480 S syslogd -L 405 root 360 S klogd 1281 www-data 1148 S lighttpd -f /etc/lighttpd.conf 1328 avahi 1448 S avahi-daemon: running [armadillo420-0.local] 1395 root 928 S -ash 17919 root 800 S pppd 17938 root 752 R ps [root@armadillo420-0 (ttymxc1) ~]# ls -la drwxr-xr-x 2 root root 1024 Feb 19 13:42 ./ drwxr-xr-x 19 root root 1024 Jan 1 1970 ../ [root@armadillo420-0 (ttymxc1) ~]#
という状態でした
> dist は、 romfsにする場合にバイナリサイズを小さくするために、 stripしてしまいます。
> dist で romfs を作成している場合は、 CONFIG_VENDOR_AUTO_STRIPPERを外してください。
distしたものでは試験は行っていませんが、参考までにお聞きします。
CONFIG_VENDOR_AUTO_STRIPPERを外すというのは
/dist/vendors/AtmarkTechno/Armadillo-420/config.vendor内の
CONFIG_VENDOR_AUTO_STRIPPER=n
とするということでしょうか?
at_yashi
> CONFIG_VENDOR_AUTO_STRIPPERを外すというのは
> /dist/vendors/AtmarkTechno/Armadillo-420/config.vendor内の
> CONFIG_VENDOR_AUTO_STRIPPER=n
> とするということでしょうか?
make menuconfig
の方が良いと思います。
http://goo.gl/81qpBF
at_yuma.arakawa
2016年2月17日 19時00分
> Core was generated by `datamail -d -c -a -p'.
> Program terminated with signal 11, Segmentation fault.
> [New process 2665]
> [New process 2666]
> [New process 2664]
> [New process 2663]
> [New process 2662]
> [New process 2661]
> [New process 2660]
> [New process 2642]
> #0 0x00000078 in ?? ()
> (gdb)
GDBがcoreファイルを読み込み、デバッグの準備ができた段階であり、
有益な情報をまだ得られていません。
"(gdb)"というプロンプトが出ている状態で、
"bt"(backtrace)コマンドの実行結果を添付してもらえますでしょうか?
GDBでのSegmentation faultのデバッグについては、以下のような記事もありますが、
参考になりますでしょうか。
http://d.hatena.ne.jp/JiaLu/20120113/1330396897
なお、差し支えなければ、現象を再現させられる最小限のソースコードを添付していただけると、
より適切なアドバイスが可能かと思います。