Re: [問題] 如何定位NDK Block issue

看板LinuxDev作者 (程式宅 <囧>)時間6年前 (2018/10/21 09:00), 編輯推噓0(002)
留言2則, 1人參與, 6年前最新討論串2/2 (看更多)
※ 引述《windows2k (程式宅 <囧>)》之銘言: : 推 yvb: 是否有可以 reproduce 的 sample code ? 10/20 22:02 程式碼在 Libuv中 我只列出我需要的程式碼 在 src/unix/linux-core中的 void uv__io_poll(uv_loop_t* loop, int timeout) { nfds = epoll_pwait(loop->backend_fd, events, ARRAY_SIZE(events), timeout, psigset); if (pe->events != 0) { w->cb(loop, w, pe->events); // 這邊已經確定 epoll_wait吐出 POLLIN } } 然後callback長這個樣子 src/unix/stream.c void uv__server_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) { while (uv__stream_fd(stream) != -1) { err = uv__accept(uv__stream_fd(stream)); // 我在底下加Log, 結果沒印出來, 所以懷疑是在uv_accept的地方出錯 } } uv__accept的實作在 src/unix/core.c int uv__accept(int sockfd) { int peerfd; int err; while (1) { static int no_accept4; if (no_accept4) goto skip; peerfd = uv__accept4(sockfd, NULL, NULL, UV__SOCK_NONBLOCK|UV__SOCK_CLOEXEC); skip: peerfd = accept(sockfd, NULL, NULL); // 不管是 accept4或是accpt都會block住 } : → yvb: 以及是否使用 strace 追踪 syscall 的情況了呢? 10/20 22:03 Android應該不能用strace吧.. 不過有一點很奇怪, 我是在執行到一半的時候Wifi關閉, 然後就做出來了 不過看了一下Linux Kernel的Code...應該不會影響才是 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.87.63 ※ 文章網址: https://www.ptt.cc/bbs/LinuxDev/M.1540083603.A.3EF.html

10/23 19:03, 6年前 , 1F
請 google: android strace
10/23 19:03, 1F

10/23 19:03, 6年前 , 2F
另外, kill -3 pid 或 kill -11 pid, 也許就能用 ndk-stack ?
10/23 19:03, 2F
文章代碼(AID): #1Roy-JFl (LinuxDev)
討論串 (同標題文章)
文章代碼(AID): #1Roy-JFl (LinuxDev)