LINUX.ORG.RU

lldb выдает ассемблерный листинг

 ,


0

2

Господа, доброй ночи. Пытаюсь подружиться с lldb, но он всё противится.

В частности собрал llvm + lldb + clang версии 3.4. Отладчик запускается если ему указать где найти liblldb.so. А вот дальше при выполнении шага выплёвывает ассемблерный код.

mkam@localhost /var/tmp/portage/llvm $ ~/opt/clang-3.4.2-release/bin/clang++ -g main.cpp
mkam@localhost /var/tmp/portage/llvm $ ~/opt/clang-3.4.2-release/bin/lldb ./a.out 
Current executable set to './a.out' (x86_64).
(lldb) list
   4   	{
   5   	    std::cout << "Fuck off, World" << std::endl;
   6   	
   7   	    return 0;
   8   	}
(lldb) process launch --stop-at-entry 
Process 9907 launched: './a.out' (x86_64)
Process 9907 launching
Process 9907 stopped
* thread #1: tid = 9907, 0x00007fa430b69400, name = 'a.out', stop reason = trace
    frame #0: 0x00007fa430b69400
-> 0x7fa430b69400:  movq   %rsp, %rdi
   0x7fa430b69403:  callq  0x7fa430b6c9e0
   0x7fa430b69408:  movq   %rax, %r12
   0x7fa430b6940b:  movl   0x21f8c7(%rip), %eax
(lldb) thread step-over 
Process 9907 stopped
* thread #1: tid = 9907, 0x00007fa430b69403, name = 'a.out', stop reason = instruction step over
    frame #0: 0x00007fa430b69403
-> 0x7fa430b69403:  callq  0x7fa430b6c9e0
   0x7fa430b69408:  movq   %rax, %r12
   0x7fa430b6940b:  movl   0x21f8c7(%rip), %eax
   0x7fa430b69411:  popq   %rdx

Взываю к вашей помощи. Подскажите, пожалуйста, как получить поведение аналогичное при использовании gdb - вывод строки на языке исходника. Спасибо.


Ответ на: комментарий от LongLiveUbuntu

Да, немного не ту первую строку скопипастил. Поправил. gdb этот же бинарник за исключением пары ворнингов, нормально исполняет.

mkam@localhost /var/tmp/portage/llvm $ gdb ./a.out 
GNU gdb (Gentoo 7.6.2 p1) 7.6.2
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-pc-linux-gnu".
For bug reporting instructions, please see:
<http://bugs.gentoo.org/>...
Reading symbols from /var/tmp/portage/llvm/a.out...done.
(gdb) start
Temporary breakpoint 1 at 0x40094f: file main.cpp, line 5.
Starting program: /var/tmp/portage/llvm/./a.out 
warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7ffff7ffa000
warning: Could not load shared library symbols for linux-vdso.so.1.
Do you need "set solib-search-path" or "set sysroot"?

Temporary breakpoint 1, main () at main.cpp:5
5	    std::cout << "Fuck off, World" << std::endl;
(gdb) 

mkam ()
Ответ на: комментарий от proud_anon

В точку. Посыпаю голову пеплом. Я почему-то, совсем не обосновано, ожидал поведение аналогичное gdb'шному start.

mkam@localhost /var/tmp/portage/llvm $ ~/opt/clang-3.4.2-release/bin/lldb a.out 
Current executable set to 'a.out' (x86_64).
(lldb) process launch --stop-at-entry 
Process 21840 launched: '/var/tmp/portage/llvm/a.out' (x86_64)
Process 21840 launching
Process 21840 stopped
* thread #1: tid = 21840, 0x00007f2618881400, name = 'a.out', stop reason = trace
    frame #0: 0x00007f2618881400
-> 0x7f2618881400:  movq   %rsp, %rdi
   0x7f2618881403:  callq  0x7f26188849e0
   0x7f2618881408:  movq   %rax, %r12
   0x7f261888140b:  movl   0x21f8c7(%rip), %eax
(lldb) breakpoint set -n main
Breakpoint 1: where = a.out`main + 31 at main.cpp:5, address = 0x000000000040094f
(lldb) thread continue 
Resuming thread 0x5550 in process 21840
Process 21840 resuming
Process 21840 stopped
* thread #1: tid = 21840, 0x000000000040094f a.out`main + 31 at main.cpp:5, name = 'a.out', stop reason = breakpoint 1.1
    frame #0: 0x000000000040094f a.out`main + 31 at main.cpp:5
   2   	
   3   	int main()
   4   	{
-> 5   	    std::cout << "Fuck off, World" << std::endl;
   6   	
   7   	    return 0;
   8   	}

mkam ()

А lldb уже готов хоть как то заменить gdb? Сам никогда lldb не пользовался, но и вразумительных отзывов не смог найти.

andreyu ★★★★★ ()
Ответ на: комментарий от anonymous

Для плюсов он давно уже gdb уделывает.

А можно подробнее, чем он уделывает? Использовать буду его как stand alone отладчик в терминале.

andreyu ★★★★★ ()
Ответ на: комментарий от andreyu

Яблочники его дефолтом в XCode сделали, на сколько мне известно. Я его сейчас планирую пользовать сугубо для отладки clang. Мне интересно насколько легче можно отлаживать код на крестах, пользуя биндинг к питону и доступ к библиотекам clang для написания расширений к lldb.

Пример расширения http://llvm.org/svn/llvm-project/cfe/trunk/utils/ClangDataFormat.py

На сколько он готов судить не берусь. В выходные посижу за ним. Может и сложится какое впечатление.

mkam ()
Ответ на: комментарий от mkam

Яблочники его дефолтом в XCode сделали, на сколько мне известно.

Знаю, пользуюсь Xcode как мордой к lldb. Меня интересует он как stand alone в терминале.

andreyu ★★★★★ ()
Ответ на: комментарий от anonymous

Понимает любые плюсовые выражения. Легко пишутся расширения на питоне.

Вот в Xcode это чудо ужасно глючит. Может показать, а может и не показать значение мембера. Может показать муть. Возможно, это плохая его интеграция в Xcode виновата. Уже вышло много поколение Xcode с поддержкой lldb, но отладчик как был говном, так говном и остался.

andreyu ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.