小编mrt*_*dog的帖子

Emacs lisp; 如何从任何类型的变量创建一个字符串?

像错误调用的函数显示的错误消息,例如:

(message (file-attributes "."))
Run Code Online (Sandbox Code Playgroud)

产生消息:

"eval: Wrong type argument: stringp, ("/home14/tjones" 1 0 0 (20415 35598) (20211 19255) (20211 19255) 14 "lrwxrwxrwx" t ...)"
Run Code Online (Sandbox Code Playgroud)

你如何故意做这种类型的翻译,例如:

(message (thing-to-string (file-attributes ".")))
Run Code Online (Sandbox Code Playgroud)

发消息如下:

("/home14/tjones" 1 0 0 (20415 35598) (20211 19255) (20211 19255) 14 "lrwxrwxrwx" t ...)
Run Code Online (Sandbox Code Playgroud)

这仅用于调试/信息.我假设有消息正在做的方式,但这是否暴露给我们的用户?

elisp

5
推荐指数
2
解决办法
1794
查看次数

是否可以通过systemtap探针停止进程,以便可以附加gdb?

我们有一个多进程应用程序,调试特定的子进程很困难.由于进程之间的消息传递超时,我们没有时间将gdb附加到目标子进程,所以我想知道是否可以通过systemtap探测器停止进程?

我认为应该需要一个简单的探测,例如:

probe process("exeName").mark("STOP_HERE")
{
    force_sig(SIGSTOP, current);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,上面没有编译......任何想法?


我不是系统专家,所以这可能不是最好的解决方案,但这是我对任何感兴趣的人的粗略解决方案:

#!/bin/stap -g

global gdbRunning = 0;

probe process(@1).mark(@2)
{
    raise(%{ SIGSTOP %});

    gdbCmd = sprintf("cgdb -- -q -ex 'thread find %d' %s %d", tid(), @1, pid());

    if (gdbRunning == 0)
    {
        gdbRunning = 1;
        printf("STOP PID %d TID %d [%s]\n", pid(), tid(), gdbCmd);
        system(gdbCmd);
    }
    else
    {
        printf("STOP PID %d TID %d\n", pid(), tid());
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ linux gdb signals systemtap

5
推荐指数
1
解决办法
549
查看次数

标签 统计

c++ ×1

elisp ×1

gdb ×1

linux ×1

signals ×1

systemtap ×1