2019年12月12日木曜日

デバッガによるミドルウェア再起動について

こんにちは、


組み込み系Linux アプリをデバッグしている時、


ブレークポイントからpassステップ(ステップオーバというものもあります。)すると、


突然アプリ先頭(main())から始まるような動きになりました。


何かやらかしたか?


考えられた事は以下でした。


  1. ウォッチドッグによって再起動

  2. メモリ破壊により再起動

  3. その他。何か


“1.””2.”を調査しようと、main()文の先頭で無限ループさせるようにしてみました。


以下のようなイメージです。

main()

{

    printf("(main.c %d) \n", __LINE__);

    while(1);

}


期待していたのは、printf(“”)に記載していた内容が多量に出てくることです。

実際には1回だけでてきました。


あれっ、と思いデバッガでwhile(1);をパスステップを何度かやってみました。


すると、main()の先頭から始まりました。


ターミナル上に、何やら文字が


“BUG: soft lockup - CPU#0 stuck for 28s! “


調べてみたところ、


“CONFIG_LOCKUP_DETECTOR=n”にすればよいとのことです。


検索系コマンドで何処で定義しているのかを調べてみます。


“$ sudo grep -ir CONFIG_LOCKUP_DETECTOR .”


組み込み用linuxだと、カーネルディレクトリのトップに”.config”ファイルがあり、

そこに記載されているようです。


上記の記述に変更することにより、パスステップしても本現象にならなくなりました。

0 件のコメント:

コメントを投稿