<?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:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
>

<channel>
	<title>EMSTONE Bebop &#187; Strace</title>
	<atom:link href="http://bebop.emstone.com/tags/strace/feed/" rel="self" type="application/rss+xml" />
	<link>http://bebop.emstone.com</link>
	<description>엠스톤 개발팀 블로그</description>
	<lastBuildDate>Sun, 29 Jan 2012 05:25:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/kr/</creativeCommons:license>
		<item>
		<title>임베디드 시스템에서 strace 디버깅</title>
		<link>http://bebop.emstone.com/2008/12/15/debug-with-strace-in-embedded-system/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=debug-with-strace-in-embedded-system</link>
		<comments>http://bebop.emstone.com/2008/12/15/debug-with-strace-in-embedded-system/#comments</comments>
		<pubDate>Mon, 15 Dec 2008 07:23:20 +0000</pubDate>
		<dc:creator>lethean</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Debug]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Strace]]></category>

		<guid isPermaLink="false">http://bebop.emstone.com/?p=125</guid>
		<description><![CDATA[ARM 계열 임베디드 장비와 같이 제한된 크기의 메모리를 이용하는 장비에서는 일반 PC 에서 처럼 다양한 디버깅 툴을 이용하기가 어렵습니다.  원격 디버거 등 임베디드 용 툴은 존재하지만, 설정 자체가 복잡하여 실제 실무에서 활용하지는 못하고 있습니다.  그래서 원격 디버깅은 논외로 하겠습니다. core &#8230; <a href="http://bebop.emstone.com/2008/12/15/debug-with-strace-in-embedded-system/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>ARM 계열 임베디드 장비와 같이 제한된 크기의 메모리를 이용하는 장비에서는 일반 PC 에서 처럼 다양한 디버깅 툴을 이용하기가 어렵습니다.  원격 디버거 등 임베디드 용 툴은 존재하지만, 설정 자체가 복잡하여 실제 실무에서 활용하지는 못하고 있습니다.  그래서 원격 디버깅은 논외로 하겠습니다.</p>
<p>core 파일과 gdb 사용은 메모리(flash/ram)가 많은 시스템에서는 사용가능하지만, 그 크기를 무시할 수 없고 라이브러리 의존성도 약간 가지고 있습니다.  실제로 Sentry24NT 에는  dev 모드일 경우  루트파일 시스템에 추가 할수 있지만, 실제 배포하는 루트파일 시스템에는 추가 되어있지 않습니다. 하지만 메모리 침범이나 스택 overflow 등의 데이터에 대한 디버깅이 필요한 경우 gdb는 유용하게 쓰이는 툴입니다.</p>
<p>위의 경우가 아닌 코드 흐름상의 디버깅만에 필요하다면 strace 를 이용하면 유용합니다.</p>
<p>strace는 시스템 콜을 추적해 주는 툴입니다.  라이브러리 의존성이 적고, 크기가 작아 NT 장비에서는 기본으로 추가 되어 있습니다. 제 경우는 이 도구를 이용하여  아래와 같은 디버깅을 수행합니다.</p>
<ul>
<li>mutex  locking</li>
<li>시스템 block 위치 추적</li>
<li>cpu 점유율이 상대적으로 높은 원인 파악</li>
<li>시스템 콜의 파리미터와 리턴값 확인</li>
<li>파일 입출력등 IO에 관련된 부분 확인</li>
</ul>
<p>실제 오동작하는 장비에서 strace 정보 만으로도 많은 프로그램의 상태를 확인할 수 있어 빠른 디버깅과 문제 파악에 도움이 됩니다.</p>
<p>사용방법은 간단하여 &#8220;strace 프로그래 이름&#8221;, &#8220;strace -p 프로세스 번호&#8221;  를 이용하면 호출된 시스템 콜 정보를 확인할 수 있습니다.</p>
<ul>
<li>-c : 반복횟수, 지정횟수 이후 strace 프로그램 종료</li>
<li>-d : 디버그 모드</li>
<li>-i : 명령어 실행 주소를 보여줌</li>
<li>-T : 시스템 콜 수행 시간을 보여줌</li>
<li>-0 : 메시지 저장 파일을 지정함</li>
</ul>
<p>Man Page 에는 더 많은 옵션이 있으나  개인적으로 주로 사용하는 옵션을 정리합니다.</p>
<p>strace 명령어 실행시</p>
<pre>open ("/etc/nettrans.conf", O_RDONLY|O_LARGEFILE) = 3</pre>
<p>와 같이 파리미터와 리턴값을 보여 줍니다.</p>
<pre>open ("/etc/nettrans.conf", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)</pre>
<p>처럼 시스템콜 리턴값으로 에러를 확인하는 용도로 사용가능합니다.</p>
<p>mutex 를 이용하는 경우 lock이 두번 호출되는 이중락 부분과 unlock 되지 않고 계속 기다리는 상태등을 확인 할 수 있습니다.</p>
<p>프로세스가 살아 있는 상태에서 확인이 가능하므로 개인적으로 프로그램의 상태를 확인하는 제일 먼저 수행해 보는 툴로서 NT 디버깅에 많은 도움이 되는 툴입니다.</p>
]]></content:encoded>
			<wfw:commentRss>http://bebop.emstone.com/2008/12/15/debug-with-strace-in-embedded-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/kr/</creativeCommons:license>
	</item>
	</channel>
</rss>

