こんにちは、
組み込み系Linux アプリをデバッグしている時、
ブレークポイントからpassステップ(ステップオーバというものもあります。)すると、
突然アプリ先頭(main())から始まるような動きになりました。
何かやらかしたか?
考えられた事は以下でした。
ウォッチドッグによって再起動
メモリ破壊により再起動
その他。何か
“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 件のコメント:
コメントを投稿