Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

库里面有退出程序的指令 #916

Open
hujiongqazqq opened this issue Mar 8, 2025 · 28 comments
Open

库里面有退出程序的指令 #916

hujiongqazqq opened this issue Mar 8, 2025 · 28 comments

Comments

@hujiongqazqq
Copy link

ylt库里调用了exit和abort,会导致程序莫名其妙消失。

@qicosmos
Copy link
Collaborator

是哪个子库呢?

@hujiongqazqq
Copy link
Author

用vscode打开 搜索一下
terminate(
exit(
abort(
还有没有其他的不清楚 老是莫名其妙退出

@qicosmos
Copy link
Collaborator

你用了rpc库,还是http库或者其它什么库?

@hujiongqazqq
Copy link
Author

我用了http client库 还有io
coro_http::coro_http_client client(coro_io::get_global_executor(1));

@qicosmos
Copy link
Collaborator

有测试代码吗?

@hujiongqazqq
Copy link
Author

就http请求,跟ws请求。
有的时候几个小时软件就消失了,有的时候好多天。
网络环境可能不是特别好

@poor-circle
Copy link
Collaborator

目前程序会主动退出只有两种情况

  1. 打印CRITICAL日志
  2. http server 作为静态文件服务器启动时,文件路径有误。

@poor-circle
Copy link
Collaborator

有没有可能是程序crash或者抛出异常没有捕获?

@qicosmos
Copy link
Collaborator

coro_http_client 代码里没有exit和abort的

@qicosmos
Copy link
Collaborator

是不是没有处理client请求的结果,比如发生网络错误的时候是否做了错误处理?

@poor-circle
Copy link
Collaborator

目前程序会主动退出只有两种情况

  1. 打印CRITICAL日志
  2. http server 作为静态文件服务器启动时,文件路径有误。

静态文件服务器路径有误这个我觉得可以改成抛异常。CRITICAL日志库本身不会打印,除非你主动调用了。如果这两种情况都不符合,我觉得大概率不是程序主动退出,而是你的程序crash了或者抛异常没捕获。

@qicosmos
Copy link
Collaborator

目前程序会主动退出只有两种情况

  1. 打印CRITICAL日志
  2. http server 作为静态文件服务器启动时,文件路径有误。

静态文件服务器路径有误这个我觉得可以改成抛异常。CRITICAL日志库本身不会打印,除非你主动调用了。如果这两种情况都不符合,我觉得大概率不是程序主动退出,而是你的程序crash了或者抛异常没捕获。

他只是用了client,没用到server

@hujiongqazqq
Copy link
Author

哦我还用了json解析的 会不会是这个问题

@qicosmos
Copy link
Collaborator

json 里面有个float解析那里可能会abort,你的json字段有浮点型吗?

@hujiongqazqq
Copy link
Author

没有 主要类型全是文本

@qicosmos
Copy link
Collaborator

那基本上可以排除是库的问题了,应该是你代码逻辑的问题,最好有复现的测试代码。

@qicosmos
Copy link
Collaborator

json解析那里catch一下,json会抛异常的。

@hujiongqazqq
Copy link
Author

我自己的代码出错会生成一个dmp文件,但是莫名其妙消失的时候没有生成。我感觉是io的问题
coro_http::coro_http_client client(coro_io::get_global_executor(1));
这里不传入coro_io::get_global_executor(1)在多线程环境下会直接崩溃

@hujiongqazqq
Copy link
Author

我现在测试的,在ws连接的情况下直接断开网络会触发io错误

@poor-circle
Copy link
Collaborator

我自己的代码出错会生成一个dmp文件,但是莫名其妙消失的时候没有生成。我感觉是io的问题 coro_http::coro_http_client client(coro_io::get_global_executor(1)); 这里不传入coro_io::get_global_executor(1)在多线程环境下会直接崩溃

这样的话后台只有一个io线程。确实避免了一些多线程错误。

@poor-circle
Copy link
Collaborator

poor-circle commented Mar 13, 2025

我建议你去掉coro_io::get_global_executor(1),挂个thread saniziter跑下你的代码。估计是data race导致的

@qicosmos
Copy link
Collaborator

忽然想起来,你用的ylt是什么版本,有一个版本的client有个内存bug,你可以更新到最新的ylt版本再测一下。

@hujiongqazqq
Copy link
Author

好的,我等会试试。

@qicosmos
Copy link
Collaborator

不过那个bug和outbuf相关,你如果没有使用把请求结果保存到预先分配内存的功能是不会触发bug的。

@hujiongqazqq
Copy link
Author

我现在连着ws的情况下断开网络就会触发io错误导致崩溃。

@qicosmos
Copy link
Collaborator

有测试代码吗?堆栈有吗?

@hujiongqazqq
Copy link
Author

Image
好像是因为多线程访问https的网址,导致触发这个。
测试的话多线程同时访问https的网站就行了。

@qicosmos
Copy link
Collaborator

qicosmos commented Apr 3, 2025

http client 请求不是线程安全的,多线程去调用会有问题的。如果希望并发调用可以使用client pool

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants