【问题标题】:How to set an expression as a watchpoint in LLDB?如何在 LLDB 中将表达式设置为观察点?
【发布时间】:2020-12-23 11:01:32
【问题描述】:

这是一个程序:

int main(int argc, char **argv) {
    int *arr = NULL;
    arr = malloc(2 * sizeof(*arr));
    arr[0] = 1;
    arr[1] = 2;
    return 0; // break is here
} 

我想在休息时检查arr 的内容。这是我通常的做法:

$ lldb main
(lldb) break set -l 266
(lldb) run
Process 9093 launched: '..../main' (x86_64)
Process 9093 stopped
* thread #1, name = 'main', stop reason = breakpoint 1.1
    frame #0: 0x0000555555555314 main`main(argc=1, argv=0x00007fffffffe018) at main.c:266
   263      arr = malloc(2 * sizeof(*arr));
   264      arr[0] = 1;
   265      arr[1] = 2;
-> 266      return 0;
   267  } 
(lldb) x/d -c 2 arr
0x555555757260: 1
0x555555757264: 2
(lldb) p *(int(*)[2])arr
(int [2]) $9 = ([0] = 1, [1] = 2)

一切都很好 - 内容按预期打印,但问题是我希望 LLDB 在我执行步进时为我执行此操作。那么如何设置观察点(通过watch set var ...watch set expr ...)在每个step 上自动打印这些值?

【问题讨论】:

    标签: debugging lldb


    【解决方案1】:

    我想你想在这里使用stop-hook

    target stop-hook add -o 'p *(int(*)[2])arr'
    

    如果您在target stop-hook add 之后按回车,则可以在每次停止时输入多个命令。当您在某些源文件、函数、某些 solib 等中停止时,此命令采用 许多 选项来运行,它非常灵活。

    【讨论】:

    • 完美。谢谢
    猜你喜欢
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 2011-03-29
    • 2019-06-04
    • 2011-11-15
    相关资源
    最近更新 更多