Hatena::Groupiphone-dev

Ni chicha, ni limona - 平均から抜けられない僕

2010-12-31

[NSLog] 今さら聞けないNSLogの話 09:04  [NSLog] 今さら聞けないNSLogの話 - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [NSLog] 今さら聞けないNSLogの話 - Ni chicha, ni limona - 平均から抜けられない僕  [NSLog] 今さら聞けないNSLogの話 - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

今更で本当に恥ずかしいことですが、自戒も込めて記事にしておきます。


NSLogで出力される中で[aaa:bbb]とある部分、これは[プロセスID:スレッドID]を表しています。プロセスIDである点は、NSLogvのマニュアル部分に載っているのですが、では右の値はどこから得ているのでしょう?

実際にGDBで確認してみましょう。実行中のスレッド情報をinfoコマンドで出力してみます。

(gdb) s
2010-12-31 08:01:14.096 MetronomePro[1183:207] hoge

(gdb) info thread
Thread 1 has current state "WAITING"
	Mach port #0x207 (gdb port #0x1403) ← ここ!
-[KSPopoverViewController loadView] (self=0x8e558b0, _cmd=0x7414aa) at /Users/〜/KSPopoverViewController.m:48
	frame 0: 	pthread ID: 0xa0b95540
	system-wide unique thread id: 0x6ce4
	dispatch queue name: "com.apple.main-thread"
	dispatch queue flags: 0x0
	total user time: 120858000
	total system time: 103652000
	scaled cpu usage percentage: 0
	scheduling policy in effect: 0x1
	run state: 0x3 (WAITING)
	flags: 0x0
	number of seconds that thread has slept: 0
	current priority: 47
	max priority: 63
	suspend count: 0.
(gdb)

gdbの出力から、右の番号がMah portのスレッドIDを表していることが分かりますね。ちなみにMach portについての説明は以下サイトで紹介されているPDFを読むと良いでしょう(とても良い内容です)。


  no title


いやあ、今まできちんと理解せずに使っていたので、何ともお恥ずかしい話です・・・。


■(応用編その1)凝ったNSLogにしたい

それだけだと恥さらしするだけで終わりですので、私が使っているNSLog代替のマクロを紹介しておきます。

#define KSLog(fmt, ...) \
	NSLog((@"<%s/%d> " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);

これはNSLogと同じように使え、さらに

  • 現在の関数(見やすいフォーマット)
  • 呼んだ行数

も同時に表示してくれる便利なマクロです。


■(応用編その2)NSLogを自前のログ出力関数とすげ替える方法

もう1つ、NSLogを自前の関数にすげ替えるテクニックを紹介します。まずはプリプロセッサを使う方法です。

// プリプロセッサで強制的に書き換えてしまう
#define NSLog(...) MyLog(__VA_ARGS__)

// 自前のログ出力
void MyLog(NSString *fmt, ...) {
    va_list ap;
    va_start (ap, fmt);

#if 1 // NSLogvを使用する方法
	NSLogv(fmt, ap);

#else // fprintfで出力する方法
    // NSLogと同様に、末尾の改行を入れ込む
    if (![fmt hasSuffix: @"\n"]) {
		fmt = [fmt stringByAppendingString: @"\n"];
	}
    NSString *body = [[NSString alloc] initWithFormat:fmt arguments:ap];
    fprintf(stderr, "MyLog:%s", [body UTF8String]);
    [body release];

#endif

	va_end(ap);
}

void MyUncaughtExceptionHandler(NSException *e) {
    MyLog(@"E:%@", [e reason]);
}

- (id)init {
    // 例外発生時に呼ばれる関数を設定
    NSSetUncaughtExceptionHandler(&MyUncaughtExceptionHandler);
        :
}

いやはや、defineマクロって恐ろしいですね。


そして、さらに荒々しい方法として、AppleのWebObjectsの記事で紹介されているこの方法によって、NSLogをSwizzlingしてしまう方法も紹介します。

// 準備
extern void _NSSetLogCStringFunction(void(*)(const char *, unsigned, BOOL));
static void _MyLogCString(const char *message, unsigned length, BOOL withSyslogBanner) {
   fprintf(stderr, "%s(%d[%s])\n", message, length, withSyslogBanner?"T":"F");
}

- (id)init {
    // NSLogをすげ替え(プライベートAPI!)
    _NSSetLogCStringFunction(_MyLogCString);
        :
}

これをランループを開始する前に呼んでしまえば、ことごとく差し替えられてしまうという、前述のプリプロセッサを使った方法よりも恐ろしい方法です。

ただ、この_NSSetLogCStringFunction()関数は、ほどのドキュメントにもあるとおりプライベートAPIですので、審査には確実に通りません(試してないですが)。


用法を守って、正しくお使いくださいませ。

StormStorm 2016/05/07 18:39 Thank you so much for this artlcie, it saved me time!

ElouiseElouise 2016/05/09 04:00 alice · giovedì, 13 dicembre 2012, 5:14 pmMaroni: Se prendiamo la Lombardia saremo in grado di condizionare qualunque governoTUTTI A VOTARE PER LE PRIMARIE DELLA LOMBARDIA SABATO 15FACCIAMO VEDERE ALLA LEGA I SORCI VEACDFRICIAMO VEDERE I SORCI VERDI ALLA SANITA’ DI COMUNIONE E LIBERAZIONE. SANITA’ L A I C A http://xydbpz.com [url=http://trcqddc.com]trcqddc[/url] [link=http://cnxkuwfs.com]cnxkuwfs[/link]

acufaataniacufaatani 2017/08/26 11:05 http://20mg-cheapesttadalafil.com/ - 20mg-cheapesttadalafil.com.ankor <a href="http://20mg-cheapesttadalafil.com/">20mg-cheapesttadalafil.com.ankor</a> http://20mg-cheapesttadalafil.com/

aguhizumoaguhizumo 2017/08/26 11:18 http://20mg-cheapesttadalafil.com/ - 20mg-cheapesttadalafil.com.ankor <a href="http://20mg-cheapesttadalafil.com/">20mg-cheapesttadalafil.com.ankor</a> http://20mg-cheapesttadalafil.com/

ugeelajaukugeelajauk 2017/08/26 11:41 http://20mg-cheapesttadalafil.com/ - 20mg-cheapesttadalafil.com.ankor <a href="http://20mg-cheapesttadalafil.com/">20mg-cheapesttadalafil.com.ankor</a> http://20mg-cheapesttadalafil.com/

ujesigomawexuujesigomawexu 2017/08/26 14:31 http://20mg-cheapesttadalafil.com/ - 20mg-cheapesttadalafil.com.ankor <a href="http://20mg-cheapesttadalafil.com/">20mg-cheapesttadalafil.com.ankor</a> http://20mg-cheapesttadalafil.com/

avipolofitavipolofit 2017/09/30 04:28 http://20mg-levitraforsale.com/ - 20mg-levitraforsale.com.ankor <a href="http://usbuy-ventolin.com/">usbuy-ventolin.com.ankor</a> http://generic-levitracheapest-price.com/

edafruzaaedafruzaa 2017/09/30 04:52 http://20mg-levitraforsale.com/ - 20mg-levitraforsale.com.ankor <a href="http://usbuy-ventolin.com/">usbuy-ventolin.com.ankor</a> http://generic-levitracheapest-price.com/

olodapognemeolodapogneme 2017/09/30 05:01 http://20mg-levitraforsale.com/ - 20mg-levitraforsale.com.ankor <a href="http://usbuy-ventolin.com/">usbuy-ventolin.com.ankor</a> http://generic-levitracheapest-price.com/

imunokequsexeimunokequsexe 2017/09/30 05:05 http://20mg-levitraforsale.com/ - 20mg-levitraforsale.com.ankor <a href="http://usbuy-ventolin.com/">usbuy-ventolin.com.ankor</a> http://generic-levitracheapest-price.com/

lakobiegodalakobiegoda 2017/09/30 05:11 http://20mg-levitraforsale.com/ - 20mg-levitraforsale.com.ankor <a href="http://usbuy-ventolin.com/">usbuy-ventolin.com.ankor</a> http://generic-levitracheapest-price.com/

pesamamalulifpesamamalulif 2017/09/30 05:14 http://20mg-levitraforsale.com/ - 20mg-levitraforsale.com.ankor <a href="http://usbuy-ventolin.com/">usbuy-ventolin.com.ankor</a> http://generic-levitracheapest-price.com/

acagunozaacagunoza 2017/09/30 05:25 http://20mg-levitraforsale.com/ - 20mg-levitraforsale.com.ankor <a href="http://usbuy-ventolin.com/">usbuy-ventolin.com.ankor</a> http://generic-levitracheapest-price.com/

催情丹催情丹 2017/10/12 17:33 催情丹:http://www.shanghaikanpo.com/view/1459.html
催情丹(男女兼用)は、フランスを中心とする欧州各国で大人気の商品です。体中が熱くなり、全身が性感帯にはやがわり!催情丹(男女兼用)の使用効果には個人差があり、効果を保証するものではございませんので、あらかじめご了承ください。妊娠または授乳中の方、特別な治療を受けている方、または他の医薬品を服用中の方は、ご使用の...        催情丹(男女兼用)の使用効果には個人差があり、効果を保証するものではございませんので、あらかじめご了承ください。妊娠または授乳中の方、特別な治療を受けている方、または他の医薬品を服用中の方は、ご使用の前に、医師または薬剤師にご相談ください。何か違和感が生じましたら、服用を直ちに止め、かかりつけの医師などにご相談下さい。サプリメントはお客さまの自己責任にてお使いいただけますよう、よろしくお願いいたします。

三體牛鞭三體牛鞭 2017/10/12 17:34 勃動力三體牛鞭:http://www.hellokanpo.com/view/santiniubian.html
勃起不能、早漏、性欲減退、やり過ぎ、男女性機能障害、倦怠感、腰や足が怠い痛い、冷え症、夜間尿頻などに効果があります。特に勃起不能、早漏にはよく効きます。

リドスプレーリドスプレー 2017/10/12 17:35 リドスプレー:http://www.kanpoucom.com/product/374.html
勃起と持続効果を発揮するドイツ生まれの男性用スプレーです。リドカインを主成分とし、仮性包茎や過敏による早漏を防止したい方へおすすめします。また、本来スポーツ選手など過激な運動によって体力を消耗する人が疲れた体を癒すための成分を、夜の生活用に特別配合です。強壮剤としても男性に広く愛される商品となりました。

VigRxVigRx 2017/10/19 17:30 VigRx:http://www.shanghaikanpo.com/view/1167.html
超級猛男健力カプセル販売--精力剤:http://www.shanghaikanpo.com/view/1523.html
花痴:http://www.shanghaikanpo.com/view/1363.html

男宝男宝 2017/10/19 17:30 男宝:http://www.hellokanpo.com/view/nanbao.html
D5原液:http://www.hellokanpo.com/view/FLYD5yuan.html
蒼蝿水:http://www.hellokanpo.com/view/FLY-D5.html

街頭覇王街頭覇王 2017/10/19 17:32 999神油 女性用:http://www.kanpoucom.com/product/720.html
中華牛鞭:http://www.kanpoucom.com/product/167.html
中華牛宝:http://www.kanpoucom.com/product/634.html
街頭覇王睾丸素カプセル:http://www.kanpoucom.com/product/694.html

ofalonkofalonk 2017/10/21 06:38 http://levitrageneric-cheapest-price.net/ - levitrageneric-cheapest-price.net.ankor <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

ofilutisapoleofilutisapole 2017/10/21 06:48 http://levitrageneric-cheapest-price.net/ - levitrageneric-cheapest-price.net.ankor <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

etocenrietocenri 2017/10/21 07:00 http://levitrageneric-cheapest-price.net/ - levitrageneric-cheapest-price.net.ankor <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

uyiiwuwuyiiwuw 2017/10/21 07:05 http://levitrageneric-cheapest-price.net/ - levitrageneric-cheapest-price.net.ankor <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

efoxacawefoxacaw 2017/10/21 07:11 http://levitrageneric-cheapest-price.net/ - levitrageneric-cheapest-price.net.ankor <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

ejejuzegaaejejuzegaa 2017/10/21 07:18 http://levitrageneric-cheapest-price.net/ - levitrageneric-cheapest-price.net.ankor <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

vazeboyuvazeboyu 2017/10/21 07:22 http://levitrageneric-cheapest-price.net/ - levitrageneric-cheapest-price.net.ankor <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

esuaxiwiesuaxiwi 2017/10/21 07:34 http://levitrageneric-cheapest-price.net/ - levitrageneric-cheapest-price.net.ankor <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

alebovequxalebovequx 2017/10/22 01:29 http://levitrageneric-cheapest-price.net/ - levitrageneric-cheapest-price.net.ankor <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

iwaseeconiwaseecon 2017/10/22 01:42 http://levitrageneric-cheapest-price.net/ - levitrageneric-cheapest-price.net.ankor <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

aikupokogaikupokog 2017/11/01 17:31 http://levitrageneric-cheapest-price.net/ - levitrageneric-cheapest-price.net.ankor <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

ibepemoxoyobiibepemoxoyobi 2017/11/01 17:41 http://levitrageneric-cheapest-price.net/ - levitrageneric-cheapest-price.net.ankor <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

yaebavuvihiqyaebavuvihiq 2017/11/01 17:46 http://levitrageneric-cheapest-price.net/ - levitrageneric-cheapest-price.net.ankor <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

cupayadihexutcupayadihexut 2017/11/01 17:52 http://levitrageneric-cheapest-price.net/ - levitrageneric-cheapest-price.net.ankor <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

ewexuyawvevojewexuyawvevoj 2017/11/01 18:07 http://levitrageneric-cheapest-price.net/ - levitrageneric-cheapest-price.net.ankor <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

emdeshometoemdeshometo 2017/11/01 20:59 http://levitrageneric-cheapest-price.net/ - levitrageneric-cheapest-price.net.ankor <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

ugefbamojugefbamoj 2017/11/01 21:14 http://levitrageneric-cheapest-price.net/ - levitrageneric-cheapest-price.net.ankor <a href="http://cheapest-priceventolinonline.net/">cheapest-priceventolinonline.net.ankor</a> http://levitra-online-cheap.net/

igujogiyukigujogiyuk 2017/11/28 09:46 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

uqepivqimuqepivqim 2017/11/28 09:56 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

eoyefuxieoyefuxi 2017/11/28 10:03 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

ulisavozaulisavoza 2017/11/28 10:09 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

ovezopuanovezopuan 2017/11/28 14:08 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

ogozaqatiogozaqati 2017/11/28 14:23 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

aegajopaikuaegajopaiku 2017/11/28 17:27 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

ubucapeltaubucapelta 2017/11/28 17:40 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

ibmviabeibmviabe 2017/12/09 12:40 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

eyaniworeyaniwor 2017/12/09 12:55 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

awovinenawovinen 2017/12/09 13:01 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

ofayuwjqezofayuwjqez 2017/12/09 13:14 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

tidoaguwakustidoaguwakus 2017/12/09 13:33 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

oxupuuxamevtoxupuuxamevt 2017/12/09 13:49 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

oyebeindoyebeind 2017/12/10 01:06 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

ufuobsiufuobsi 2017/12/22 10:10 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

ibirieqigiyuibirieqigiyu 2017/12/22 10:31 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

uxudepumixejuxudepumixej 2017/12/22 10:38 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

odacinekuhiaodacinekuhia 2017/12/22 10:51 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

egaxofukoveegaxofukove 2017/12/22 13:48 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

eehilokoeehiloko 2017/12/22 14:00 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

ufolratodeufolratode 2017/12/22 23:17 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

exfaicukuoexfaicukuo 2017/12/22 23:37 http://price-of-levitra-20mg.mobi/ - price-of-levitra-20mg.mobi.ankor <a href="http://buyventolin-online.mobi/">buyventolin-online.mobi.ankor</a> http://buylevitrageneric.mobi/

ゲスト



トラックバック - http://iphone-dev.g.hatena.ne.jp/paella/20101231