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ですので、審査には確実に通りません(試してないですが)。


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

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

ElouiseElouise2016/05/09 04:00alice · 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]

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

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

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

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

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

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

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

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

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

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

acagunozaacagunoza2017/09/30 05:25http://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
勃起と持続効果を発揮するドイツ生まれの男性用スプレーです。リドカインを主成分とし、仮性包茎や過敏による早漏を防止したい方へおすすめします。また、本来スポーツ選手など過激な運動によって体力を消耗する人が疲れた体を癒すための成分を、夜の生活用に特別配合です。強壮剤としても男性に広く愛される商品となりました。

VigRxVigRx2017/10/19 17:30VigRx: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:32999神油 女性用: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

ofalonkofalonk2017/10/21 06:38http://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/

ofilutisapoleofilutisapole2017/10/21 06:48http://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/

etocenrietocenri2017/10/21 07:00http://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/

uyiiwuwuyiiwuw2017/10/21 07:05http://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/

efoxacawefoxacaw2017/10/21 07:11http://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/

ejejuzegaaejejuzegaa2017/10/21 07:18http://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/

vazeboyuvazeboyu2017/10/21 07:22http://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/

esuaxiwiesuaxiwi2017/10/21 07:34http://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/

alebovequxalebovequx2017/10/22 01:29http://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/

iwaseeconiwaseecon2017/10/22 01:42http://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/

aikupokogaikupokog2017/11/01 17:31http://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/

ibepemoxoyobiibepemoxoyobi2017/11/01 17:41http://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/

yaebavuvihiqyaebavuvihiq2017/11/01 17:46http://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/

cupayadihexutcupayadihexut2017/11/01 17:52http://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/

ewexuyawvevojewexuyawvevoj2017/11/01 18:07http://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/

emdeshometoemdeshometo2017/11/01 20:59http://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/

ugefbamojugefbamoj2017/11/01 21:14http://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/

igujogiyukigujogiyuk2017/11/28 09:46http://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/

uqepivqimuqepivqim2017/11/28 09:56http://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/

eoyefuxieoyefuxi2017/11/28 10:03http://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/

ulisavozaulisavoza2017/11/28 10:09http://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/

ovezopuanovezopuan2017/11/28 14:08http://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/

ogozaqatiogozaqati2017/11/28 14:23http://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/

aegajopaikuaegajopaiku2017/11/28 17:27http://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/

ubucapeltaubucapelta2017/11/28 17:40http://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/

ibmviabeibmviabe2017/12/09 12:40http://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/

eyaniworeyaniwor2017/12/09 12:55http://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/

awovinenawovinen2017/12/09 13:01http://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/

ofayuwjqezofayuwjqez2017/12/09 13:14http://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/

tidoaguwakustidoaguwakus2017/12/09 13:33http://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/

oxupuuxamevtoxupuuxamevt2017/12/09 13:49http://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/

oyebeindoyebeind2017/12/10 01:06http://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/

ufuobsiufuobsi2017/12/22 10:10http://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/

ibirieqigiyuibirieqigiyu2017/12/22 10:31http://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/

uxudepumixejuxudepumixej2017/12/22 10:38http://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/

odacinekuhiaodacinekuhia2017/12/22 10:51http://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/

egaxofukoveegaxofukove2017/12/22 13:48http://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/

eehilokoeehiloko2017/12/22 14:00http://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/

ufolratodeufolratode2017/12/22 23:17http://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/

exfaicukuoexfaicukuo2017/12/22 23:37http://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/