
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>デバッガ | monolog</title>
	<atom:link href="https://blog.monora.me/tag/%E3%83%87%E3%83%90%E3%83%83%E3%82%AC/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.monora.me</link>
	<description>monora log #=&#62; ものろーぐ</description>
	<lastBuildDate>Sun, 24 May 2020 18:52:31 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.1</generator>
<site xmlns="com-wordpress:feed-additions:1">21279848</site>	<item>
		<title>lldbの使い方備忘録</title>
		<link>https://blog.monora.me/2014/09/lldb%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e5%82%99%e5%bf%98%e9%8c%b2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=lldb%25e3%2581%25ae%25e4%25bd%25bf%25e3%2581%2584%25e6%2596%25b9%25e5%2582%2599%25e5%25bf%2598%25e9%258c%25b2</link>
		
		<dc:creator><![CDATA[きょんたん]]></dc:creator>
		<pubDate>Sun, 28 Sep 2014 06:41:49 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[lldb]]></category>
		<category><![CDATA[デバッガ]]></category>
		<guid isPermaLink="false">http://blog.monora.me/?p=507</guid>

					<description><![CDATA[<p>メモリ管理周りで色々ハマってたのだけど、普通にデバッガを使えばよかった。 Mac OSX だと、gdb より lldb を使う方が環境的に整ってて楽っぽい。LLVMさまさまだ。 LLDBの使い方（チュートリアル日本語訳） [&#8230;]</p>
The post <a href="https://blog.monora.me/2014/09/lldb%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e5%82%99%e5%bf%98%e9%8c%b2/">lldbの使い方備忘録</a> first appeared on <a href="https://blog.monora.me">monolog</a>.]]></description>
										<content:encoded><![CDATA[<p>メモリ管理周りで色々ハマってたのだけど、普通にデバッガを使えばよかった。<br />
Mac OSX だと、gdb より lldb を使う方が環境的に整ってて楽っぽい。LLVMさまさまだ。</p>
<blockquote><p><a href="http://cont0f.net/2014-04-lldb-tutorial-ja/" target="_blank" rel="noopener noreferrer">LLDBの使い方（チュートリアル日本語訳） | こん</a></p></blockquote>
<p>とりあえずここを読めばいいと思います。</p>
<p>以下は、上を読みながら実際にどのようにして作業を行ったかという流れのメモ。</p>
<p><span id="more-507"></span></p>
<p>まず、コンパイル時に -g オプションをつけてコンパイルすること<br />
(これによって変数名や関数名のようなデバッグ情報が埋め込まれる)</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shell" data-enlighter-linenumbers="false">$ pgrep a.out</pre>
<p>なんかでプロセスのpidを取得して、</p>
<p>&nbsp;</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shell" data-enlighter-linenumbers="false">$ lldb -p [pid]</pre>
<p>で対象プロセスにアタッチ</p>
<p>&nbsp;</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shell" data-enlighter-linenumbers="false">(lldb) breakpoint set -n malloc_error_break</pre>
<p>とすると、mallocにまつわるエラーにブレークポイントがセットできる<br />
(その他のブレークポイント等は元記事を参照)</p>
<p>これを叩いた時に、メインプロセスの実行が止まったら</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shell" data-enlighter-linenumbers="false">(lldb) c</pre>
<p>で再開出来る。(c は continue の省略コマンド)<br />
で、実行すると、ブレークポイントで自動的に lldb がスタックトレースを吐いて止めてくれる。</p>
<p>&nbsp;</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shell" data-enlighter-linenumbers="false">(lldb) bt</pre>
<p>でスタックトレースが表示できる (bt = thread backtrace)</p>
<p>&nbsp;</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shell" data-enlighter-linenumbers="false">(lldb) frame select [n]</pre>
<p>で、n番目のフレームに移動出来る (btで表示した #n にあたるもの)</p>
<p>&nbsp;</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shell" data-enlighter-linenumbers="false">(lldb) frame variable</pre>
<p>とすると、そのフレームから見える変数が表示できる。</p>
<p>&nbsp;</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shell" data-enlighter-linenumbers="false">(lldb) p [variable]</pre>
<p>とかすると、 valiable の値が表示できる。<br />
また、*, &amp;, -&gt;, [] みたいな演算子も使用可能</p>
<p>&nbsp;</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shell" data-enlighter-linenumbers="true">(lldb) expr (int)printf("hoge")</pre>
<p>みたいにすると、 printf(&#8220;hoge&#8221;) の返り値を取得できる。<br />
ただし、返り値のキャストが必須のよう<br />
(普通にhogeと表示出来るらしいけれど、こちらの環境では上手くいかなかった)</p>The post <a href="https://blog.monora.me/2014/09/lldb%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e5%82%99%e5%bf%98%e9%8c%b2/">lldbの使い方備忘録</a> first appeared on <a href="https://blog.monora.me">monolog</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">507</post-id>	</item>
	</channel>
</rss>
