にゃごすwiki

DS開発/2009-3-15

  iDeaSでデバッグメッセージ

DSは2画面あるのでデバッグメッセージの表示に困ることは少ないけど、両方の画面を使うアプリだと、面倒なことになってくるでしょう。iDeasでconsole表示ができそうなので、デバッグメッセージの表示を試してみた。
デバッグメッセージの出力先にお困りの方は使ってみてください。


ソースはこんな感じ。バージョン1.0.3.0用です。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>

void iDeasMessage(char * str, ... )
{
  int siz = 1023;
  char *buf;
  va_list args;
  buf = malloc( siz + 1 );
  memset(buf, 0, siz+1 );
  va_start(args,str);
  vsnprintf(buf,siz,str,args);
  va_end(args);

  asm volatile( 
    "  mov  r0,%0      @ r0 = buf \r\n"
    "  swi  #0xFC000   @ swi      \r\n"
  : :"r"(buf) :"r0"
  );
  free(buf);
}

void iDeasBreak()
{
  asm volatile( 
   "  swi  #0xFD000    @ swi      \r\n"
  );
}

ソースくらいつけてくれても罰当たらないんじゃねーのかと。用意できないやつに必要ないってことなのか。と勝手に闘志を燃やしてみる。アセンブラはかなり適当なので、突っ込み大歓迎です。

関数の説明って必要無いとは思うけど一応。

  • iDeasMessageはprintf相当の関数で、consoleに表示されます。
  • iDeasBreakはその位置で処理を停止してデバッガを開きます。

ちなみにconsoleってどこなのって聞かれていやな気分になりそうなので書いておきますが、デバッガの下のダンプにconsoleタブがあります。

デバッガを表示した状態でないとログは出力されないみたいです。デバッガを開くのが面倒なおいらは、main関数の直後にiDeasBreak();を入れてます。起動時に必ず止まるのでちょっとうざいのでどっちがいいとはいえないけど。

とりあえず表示はされるんだけど、なんかの拍子に表示されないことがあるので、いまいち信頼できないんだよなぁ。
(限定できなかったけど、大量に表示するとまずいのかも?)

2009/06/12修正:iDeasMessageでメッセージの解放を忘れてました。ごめんなさい。