想要了解 dig 是如何運作的,所以下載了 dig source code
查看了一下目前使用的版本
$ dig -v
DiG 9.18.25
把下載後的版本設為 9.18.25
$ cd bind9
$ git checkout v9.18.25
接著根據文件 doc/arm/build.inc.rst
開始編譯,為了要 debug 需要 -g
$ autoreconf -fi
$ CFLAGS="-g" ./configure
$ make
編譯完設定 launch.json
一開始設定 program
路徑是 ${workspaceFolder}/bin/dig/dig
後來發現那是一個 script
需要改成 ${workspaceFolder}/bin/dig/.libs/dig
並根據 script 的提示,加上 DYLD_LIBRARY_PATH
,否則找不到 lib
{
"type": "lldb",
"request": "launch",
"name": "dig",
"program": "${workspaceFolder}/bin/dig/.libs/dig",
"args": [
"www.google.com"
],
"cwd": "${workspaceFolder}",
"env": {
"DYLD_LIBRARY_PATH": "/Users/dennishuang/workspace/code/bind9/lib/isc/.libs:/Users/dennishuang/workspace/code/bind9/lib/dns/.libs:/Users/dennishuang/workspace/code/bind9/lib/isccfg/.libs:/Users/dennishuang/workspace/code/bind9/lib/irs/.libs:/Users/dennishuang/workspace/code/bind9/lib/bind9/.libs:/Users/dennishuang/workspace/code/bind9/lib/ns/.libs:$DYLD_LIBRARY_PATH"
}
}
做完上述設定,在 vscode 執行 debug,執行到 isc_app_ctxrun
會觸發 UNREACHABLE()
,不過已經有找到答案
; <<>> DiG 9.18.25 <<>> www.google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58484
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.google.com. IN A
;; ANSWER SECTION:
www.google.com. 149 IN A 172.217.160.68
;; Query time: 3 msec
;; SERVER: fe80::f01f:c7ff:fe60:d564%27#53(fe80::f01f:c7ff:fe60:d564%27%27) (UDP)
;; WHEN: Wed May 01 17:27:41 CST 2024
;; MSG SIZE rcvd: 59
app.c:236: INSIST(unreachable) failed, back trace
0 libisc-9.18.25.dylib 0x000000010058b724 default_callback + 72
1 libisc-9.18.25.dylib 0x000000010058b690 isc_assertion_failed + 56
2 libisc-9.18.25.dylib 0x000000010058a5dc isc_app_ctxrun + 1560
3 libisc-9.18.25.dylib 0x000000010058a938 isc_app_run + 176
4 dig 0x0000000100007ae8 dig_startup + 88
5 dig 0x0000000100007bf0 main + 72
6 dyld 0x0000000199e820e0 start + 2360
執行的 function ns__client_request
使用 epoll 模型
http://www.cppblog.com/zhangyq/archive/2010/12/20/136419.html