LoginSignup
0

More than 5 years have passed since last update.

Android NDKのデバッグでAndroid studioが固まる(tgkill)、クラッシュ 

Posted at

ほぼ土日しか触らないということもあってこつこつと気負わず続けてきたのですが、なんとか最低限動くようになってきたマイアプリ。

だけどうまく動いてたと思ったら何かAndroid Studioのデバッガの調子が悪いというか、ブレークポイントまわりでステップを進めているとAndroidStudioが固まってしまうようになった。

なんだよ~昔のVCかよ~と思いつつも改善しないことには先に進めないのでいろいろ考えてみてると、ある箇所に思い至った。それは、グローバル領域でヒープメモリ確保するという行儀の悪いコード。このnewの中のコンストラクタでステップインアウトしてるとIDEが固まるのだった。テンポよくステップを進めると固まらなかったり?したのだが、tgkillエラーで止まったり止まらなかったり。

...
//大域でメモリ確保
CPlayer* _pPlayer = new CPlayer();

CPlayerIf* GetPlayer()
{
    return _pPlayer;
}

いろいろ試して効果なかったのだが、ここのメモリ確保をアプリのエントリポイント(ActivityのonCreate)の中から呼ぶようにすると一発解決。

CPlayer* _pPlayer = NULL;

CPlayerIf* GetPlayer()
{
    if(NULL==_pPlayer)
        _pPlayer = new CPlayer();
    return _pPlayer;
}

グローバルで書いたスタック領域がどういう順番で処理されるのかというのは把握しづらいところではあるけれども、その処理の中でヒープ領域を確保する、というのはあまり良くなかったのでしょう。まあこんなことする下手っぴはなかなかいないでしょうが、備忘を兼ねて登録しました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0