debugging - ltraceは2つの呼び出しのみを出力します

debugging gdb ltrace

ワープロでltraceを実行してサンプルファイルを開きましたが、驚くことに2つの呼び出ししかありませんでした。

__libc_start_main(0x8048820, 1, 0xbfe08844, 0x8048850, 0x80488b0 <unfinished ...>
_ZN10AP_UnixApp4mainEPKciPPc(0x8048910, 1, 0xbfe08844, 0xb61feff4, 0x8048850) = 0
+++ exited (status 0) +++


ltraceがすべてのライブラリ呼び出しを出力する必要はありませんか?
答え
問題は、ltraceがメインの実行可能ファイル(ここではabiword)から他の共有ライブラリへの呼び出しを傍受するだけで、ある共有ライブラリから別の共有ライブラリへの呼び出しを傍受しないことです。

abiwordの場合、main関数は実際にはあまり機能しません。

(gdb) disas main
Dump of assembler code for function main:
   0x0000000000400a70 <+0>: mov    %rsi,%rdx
   0x0000000000400a73 <+3>: mov    %edi,%esi
   0x0000000000400a75 <+5>: mov    $0x400b6c,%edi
   0x0000000000400a7a <+10>:    jmpq   0x400950 <_ZN10AP_UnixApp4mainEPKciPPc@plt>
End of assembler dump.


ご覧のとおり、これは単にreturn AP_UnixApp::main(argc, "abiword", argv);を実行し、実際のアクティビティはすべてAP_UnixApp::mainを実装するライブラリ(私の場合は/usr/lib/libabiword-2.8.so)で発生します。

Fedoraシステムでは、代わりにfryskを使用してみることができます。特に、これ:

ftrace -sym '*' abiword


以下で始まる(非常に長い)トレースを生成します。

528.528 attached /usr/bin/abiword
528.528 call #libpthread.so.0#_init(0x1, 0x7fffa8ba5bd8, 0x7fffa8ba5be8, 0x7fffa8ba5be8, 0x1f25bc2, 0x7)
528.528  call #libpthread.so.0#__pthread_initialize_minimal(0x1, 0x7fffa8ba5bd8, 0x7fffa8ba5be8, 0x7fffa8ba5be8, 0x1f25bc2, 0x7)
528.528   call #libpthread.so.0#__libc_sigaction(0x20, 0x7fffa8ba5a70, 0x0, 0x0, 0x1f25bc2, 0x7)
528.528   call #libpthread.so.0#__libc_sigaction(0x21, 0x7fffa8ba5a70, 0x0, 0x7f32501f27b0, 0x0, 0x7)
528.528   call #libc.so.6#getrlimit(0x3, 0x7fffa8ba5b10, 0x3f, 0x40, 0x0, 0x7) = 0
528.528   call #libc.so.6#sysconf(0x1e, 0x7fffa8ba5b10, 0x3f, 0x30220e7b17, 0x0, 0x7)
528.528    call #libc.so.6#getpagesize(0x1e, 0x7fffa8ba5b10, 0xfffffffffff51435, 0x30220e7b17, 0x0, 0x7) = 4096
528.528   leave #libc.so.6#sysconf = 4096
528.528   call #libc.so.6#__libc_dl_error_tsd(0x1e, 0x7fffa8ba5b10, 0x800000, 0x2a40, 0x0, 0x7) = 139854069229848
...


Ftraceのドキュメントhere
関連記事

java - ユーザーの作成、許可されない(406)

asp.net - Microsoft Visual Web Developer 2010 Expressでのデバッグ

visual-studio-2010 - Trace.WriteLineが出力を生成しない

debugging - Nemiverでvala / clutterプログラムをデバッグするときにデバッグ情報が欠落する

eclipse - Jarファイル内のファイルをどのようにデバッグできますか

android - C++プロジェクトに変換せずにEclipse AndroidプロジェクトにC++ネイチャーを追加する方法

css - Internet Explorer 6のアンカーリストの水平リストのテキストが2行に折り返される

visual-studio - なぜ各変数に12バイトを割り当てるのですか?

debugging - DbgViewで一部のトレース書き込みが欠落しているのに、トレースがテストランナーで表示される理由

debugging - Xcode 4デバッガーで変数値をリアルタイムで追跡するにはどうすればよいですか?