<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="http://200yi.com/ff_internal/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://200yi.com/ff_internal/feed.php">
        <title>FAIRYFAR-INTERNAL wiki:Tools:Debug</title>
        <description></description>
        <link>http://200yi.com/ff_internal/</link>
        <image rdf:resource="http://200yi.com/ff_internal/lib/tpl/mnml-blog/images/favicon.ico" />
       <dc:date>2026-05-25T15:20:32+0800</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:GDB%20Documentation&amp;rev=1687008319&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:GDB%20%E4%BB%8E%E8%A3%B8%E5%A5%94%E5%88%B0%E7%A9%BF%E6%88%B4%E6%95%B4%E9%BD%90&amp;rev=1687008319&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:Python%E8%B0%83%E8%AF%95%E6%96%B9%E6%B3%95&amp;rev=1687008319&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:ThreadSanitizer%E4%BD%BF%E7%94%A8%E4%B8%AD%E7%9A%84%E9%97%AE%E9%A2%98&amp;rev=1694019604&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:forkstat%E7%9B%91%E6%8E%A7%E8%BF%9B%E7%A8%8B%E5%88%9B%E5%BB%BA%E9%80%80%E5%87%BA%E4%BA%8B%E4%BB%B6&amp;rev=1687008319&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%20Ctrl%2BC%E9%80%80%E5%87%BA%E8%A2%AB%E8%B0%83%E8%AF%95%E8%BF%9B%E7%A8%8B%E9%97%AE%E9%A2%98&amp;rev=1687008319&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4&amp;rev=1687008319&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%E7%9A%84Python%E6%8E%A5%E5%8F%A3&amp;rev=1687008319&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%E7%9A%84ignore-errors%E5%91%BD%E4%BB%A4&amp;rev=1687008319&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%E5%A4%9A%E8%BF%9B%E7%A8%8B%E8%B0%83%E8%AF%95&amp;rev=1687008319&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%E5%90%AF%E7%94%A8%E5%91%BD%E4%BB%A4%E5%8E%86%E5%8F%B2%E5%8A%9F%E8%83%BD&amp;rev=1687008319&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%E6%9D%A1%E4%BB%B6%E6%96%AD%E7%82%B9&amp;rev=1687008319&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%E6%BA%90%E4%BB%A3%E7%A0%81%E6%9F%A5%E6%89%BE%E8%B7%AF%E5%BE%84&amp;rev=1687008319&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:strace%E4%BD%BF%E7%94%A8&amp;rev=1687008319&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:valgrind%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8&amp;rev=1687008319&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://200yi.com/ff_internal/lib/tpl/mnml-blog/images/favicon.ico">
        <title>FAIRYFAR-INTERNAL</title>
        <link>http://200yi.com/ff_internal/</link>
        <url>http://200yi.com/ff_internal/lib/tpl/mnml-blog/images/favicon.ico</url>
    </image>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:GDB%20Documentation&amp;rev=1687008319&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:19+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Tools:Debug:GDB Documentation</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:GDB%20Documentation&amp;rev=1687008319&amp;do=diff</link>
        <description>点击下载阅读：[下载]



	* GDB Documentation</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:GDB%20%E4%BB%8E%E8%A3%B8%E5%A5%94%E5%88%B0%E7%A9%BF%E6%88%B4%E6%95%B4%E9%BD%90&amp;rev=1687008319&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:19+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Tools:Debug:GDB 从裸奔到穿戴整齐</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:GDB%20%E4%BB%8E%E8%A3%B8%E5%A5%94%E5%88%B0%E7%A9%BF%E6%88%B4%E6%95%B4%E9%BD%90&amp;rev=1687008319&amp;do=diff</link>
        <description>转自：http://www.skywind.me/blog/archives/2036

无数次被问道：你在终端下怎么调试更高效？或者怎么在 Vim 里调试？好吧，今天统一回答下，我从来不在 vim 里调试，因为它还不成熟。那除了命令行 GDB 裸奔以外，终端下还有没有更高效的方法？能够让我事半功倍？</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:Python%E8%B0%83%E8%AF%95%E6%96%B9%E6%B3%95&amp;rev=1687008319&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:19+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Tools:Debug:Python调试方法</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:Python%E8%B0%83%E8%AF%95%E6%96%B9%E6%B3%95&amp;rev=1687008319&amp;do=diff</link>
        <description>一、两种Python Debug方法

1. import pdb

本方法需要修改python脚本，不建议使用。


import pdb
x = &quot;ff&quot;
pdb.set_trace()
y = &quot;yz&quot;


增加了“import pdb”和“pdb.settrace() ”行，当运行到pdb.settrace()时，pdb将中断，进入debug模式。</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:ThreadSanitizer%E4%BD%BF%E7%94%A8%E4%B8%AD%E7%9A%84%E9%97%AE%E9%A2%98&amp;rev=1694019604&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-07T01:00:04+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Tools:Debug:ThreadSanitizer使用中的问题</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:ThreadSanitizer%E4%BD%BF%E7%94%A8%E4%B8%AD%E7%9A%84%E9%97%AE%E9%A2%98&amp;rev=1694019604&amp;do=diff</link>
        <description>ThreadSanitizer（TSan）主要用于测试data races（数据竞争）。

概要

	* 使用TSan测试时，默认情况下，性能损失很大。
	* 每发现一个data race，TSan需要写log，TSan内部使用ReportRace函数输出log。参考：</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:forkstat%E7%9B%91%E6%8E%A7%E8%BF%9B%E7%A8%8B%E5%88%9B%E5%BB%BA%E9%80%80%E5%87%BA%E4%BA%8B%E4%BB%B6&amp;rev=1687008319&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:19+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Tools:Debug:forkstat监控进程创建退出事件</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:forkstat%E7%9B%91%E6%8E%A7%E8%BF%9B%E7%A8%8B%E5%88%9B%E5%BB%BA%E9%80%80%E5%87%BA%E4%BA%8B%E4%BB%B6&amp;rev=1687008319&amp;do=diff</link>
        <description>forkstat 是用于探测进程 fork/exec/exit 事件的工具

下载

https://launchpad.net/ubuntu/xenial/+package/forkstat

安装


tar xf forkstat_0.01.13.orig.tar.gz 
cd forkstat-0.01.13/
make
sudo make install


使用


sudo forkstat -e fork


参考

	* http://manpages.ubuntu.com/manpages/xenial/man8/forkstat.8.html
	* https://www.jesusninoc.com/06/26/forkstat/
	* https://stackoverflow.com/questions/26852228/detect-new-process-creation-instantly-in-linux</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%20Ctrl%2BC%E9%80%80%E5%87%BA%E8%A2%AB%E8%B0%83%E8%AF%95%E8%BF%9B%E7%A8%8B%E9%97%AE%E9%A2%98&amp;rev=1687008319&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:19+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Tools:Debug:gdb Ctrl+C退出被调试进程问题</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%20Ctrl%2BC%E9%80%80%E5%87%BA%E8%A2%AB%E8%B0%83%E8%AF%95%E8%BF%9B%E7%A8%8B%E9%97%AE%E9%A2%98&amp;rev=1687008319&amp;do=diff</link>
        <description>一、问题

gdb调试Linux应用程序进程时，可以使用Ctrl+C快捷键中断gdb，以便交互式输入用户gdb命令。

但是，如果应用程序使用sigwait来处理SIGINT信号，那么，以上操作将失效。被调试的应用程序拦截了</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4&amp;rev=1687008319&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:19+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Tools:Debug:gdb常用命令</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4&amp;rev=1687008319&amp;do=diff</link>
        <description>加载core


gdb oSan core.XXXX


调试带命令行参数程序


gdb --args ./prog arg1 arg2


使用源代码对照调试窗口

在有源代码的环境下，在gdb调试状态，使用ctrl + X,A可以切换到源代码对照调试窗口。
[gdb]

此时会分上下屏显示源代码和命令窗口，使用以下命令可以将设置当前键盘操作窗口：_____</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%E7%9A%84Python%E6%8E%A5%E5%8F%A3&amp;rev=1687008319&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:19+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Tools:Debug:gdb的Python接口</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%E7%9A%84Python%E6%8E%A5%E5%8F%A3&amp;rev=1687008319&amp;do=diff</link>
        <description>参考

	* Basic Python
	* Convenience-Vars
	* Command Files</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%E7%9A%84ignore-errors%E5%91%BD%E4%BB%A4&amp;rev=1687008319&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:19+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Tools:Debug:gdb的ignore-errors命令</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%E7%9A%84ignore-errors%E5%91%BD%E4%BB%A4&amp;rev=1687008319&amp;do=diff</link>
        <description>正文

ignore-errors不是gdb的内置命令，可以使用下面的Python扩展为gdb添加该命令：


class IgnoreErrorsCommand (gdb.Command):
    &quot;&quot;&quot;Execute a single command, ignoring all errors.
Only one-line commands are supported.
This is primarily useful in scripts.&quot;&quot;&quot;

    def __init__ (self):
        super (IgnoreErrorsCommand, self).__init__ (&quot;ignore-errors&quot;,
                                                    gdb.COMMAND_OBSCURE,
                                                    # FIXME...
                                        …</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%E5%A4%9A%E8%BF%9B%E7%A8%8B%E8%B0%83%E8%AF%95&amp;rev=1687008319&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:19+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Tools:Debug:gdb多进程调试</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%E5%A4%9A%E8%BF%9B%E7%A8%8B%E8%B0%83%E8%AF%95&amp;rev=1687008319&amp;do=diff</link>
        <description>调试

follow-fork-mode

在2.5.60版Linux内核及以后，gdb对使用fork/vfork创建子进程的程序提供了follow-fork-mode选项来支持多进程调试。

follow-fork-mode语法：


set follow-fork-mode [parent|child]


	* parent：fork之后继续调试父进程，子进程不受影响。</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%E5%90%AF%E7%94%A8%E5%91%BD%E4%BB%A4%E5%8E%86%E5%8F%B2%E5%8A%9F%E8%83%BD&amp;rev=1687008319&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:19+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Tools:Debug:gdb启用命令历史功能</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%E5%90%AF%E7%94%A8%E5%91%BD%E4%BB%A4%E5%8E%86%E5%8F%B2%E5%8A%9F%E8%83%BD&amp;rev=1687008319&amp;do=diff</link>
        <description>gdb启用history

修改用户home目录下的.gdbinit文件：


[yz@bogon ~]$ vim ~/.gdbinit
set history filename ~/.gdb_history
set history save on
set history size 2000
set history remove-duplicates 1


注：

	* ~/.gdbinit文件在gdb启动时会自动读取。</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%E6%9D%A1%E4%BB%B6%E6%96%AD%E7%82%B9&amp;rev=1687008319&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:19+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Tools:Debug:gdb条件断点</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%E6%9D%A1%E4%BB%B6%E6%96%AD%E7%82%B9&amp;rev=1687008319&amp;do=diff</link>
        <description>一、条件断点

break if

普通条件断点：


(gdb) break ... if cond


例如，当x&gt;100时，src/main.c源码123行中断：


(gdb) b src/main.c:123 if x&gt;100


watch

语法：


(gdb) watch cond


例如，当变量x发生变化时中断：</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%E6%BA%90%E4%BB%A3%E7%A0%81%E6%9F%A5%E6%89%BE%E8%B7%AF%E5%BE%84&amp;rev=1687008319&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:19+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Tools:Debug:gdb源代码查找路径</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:gdb%E6%BA%90%E4%BB%A3%E7%A0%81%E6%9F%A5%E6%89%BE%E8%B7%AF%E5%BE%84&amp;rev=1687008319&amp;do=diff</link>
        <description>摘自：https://www.cnblogs.com/rickyk/p/4184860.html

在gdb程序的时候，有时候会发现源代码文件找不到，对于那些带调试信息的系统库或者第三方库，很多时候当你真正想gdb去追他源代码的时候你会发现gdb根本找不到这些源代码路径。这个时候有两种选择：</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:strace%E4%BD%BF%E7%94%A8&amp;rev=1687008319&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:19+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Tools:Debug:strace使用</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:strace%E4%BD%BF%E7%94%A8&amp;rev=1687008319&amp;do=diff</link>
        <description>-f：需要跟踪fork出来的进程。

-F：需要跟踪vfork出来的进程。

-o：跟踪结果输出到指定文件。

-ff：常与-o一起使用，不同进程（子进程）产生的系统调用输出到file.PID文件。

-r：打印每个系统调用的相对时间。

-t：输出的每一行前加上时间信息，-tt精确到微秒的绝对时间。-ttt打印相对时间。

-v：强制输出所有系统调用，默认设置一些频繁的系统调用不会被输出。

-s：指定每行输出长度，默认32。文件名不受此限制。

-c：统计每种系统调用所执行时间、调用次数、出错次数。

-e：只记录指定的系统系统调用。

-T：打印每条系统调用的时长，对于查找时间消耗大调用很有用。

-p：附加跟踪指定PID进程。

-x：非ascii字符串使用十六进制显示。

-xx：所有字符串使用十六进制显示。…</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:valgrind%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8&amp;rev=1687008319&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:19+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Tools:Debug:valgrind工具使用</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Tools:Debug:valgrind%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8&amp;rev=1687008319&amp;do=diff</link>
        <description>使用valgrind检查一般应用程序内存泄露


valgrind –tool=memcheck –leak-check=yes  应用程序名


使用valgrind检查mysqld内存泄露

编译选项增加：
--disable-gperftools

如果需要进行代码覆盖：
--enable-profiling</description>
    </item>
</rdf:RDF>
