I get the impression that if the function at the top of the list references "glib" or "gobject", you have Bad Issues(TM) with libraries that usually shouldn't go wrong.
Você tem a impressão errada, se você quer dizer que isso indica que a falha provavelmente está nessas bibliotecas. Isso não significa isso; É mais provável que seja aí que um erro anterior finalmente explodiu. Por natureza, C não possui muitas salvaguardas de tempo de execução, então você pode facilmente passar argumentos que compilarão, mas não serão validados (a menos que você faça você mesmo). Exemplo simples:
int main (void) {
char whoops[3] = { 'a', 'b', 'c' };
if (strcmp(whoops, "abcdef")) puts(whoops);
Passa uma string não terminada para várias funções de string diferentes. Isso não compilará nenhum problema e provavelmente será executado corretamente porque a memória violação será muito pequena, mas poderia seg falha em strcmp()
ou puts()
. Isso não significa que a implementação de strcmp()
está com bugs; o erro está claramente ali em main()
.
Funções como aquelas que não podem logicamente determinar se um argumento passado está apropriadamente terminado (isto é o que eu quis dizer verificações de tempo de execução do WRT e C "por natureza" sem elas). Não há muito sentido em estipular que o compilador deve verificar, porque na maioria das vezes os dados não serão codificados dessa forma.
As coisas no meio de um backtrace não necessariamente desempenham um papel, embora isso possa acontecer. Geralmente, o lugar para começar a procurar é a entrada last ; é aí que o problema foi rastreado para
. Mas o bug pode estar em qualquer lugar. Muitas vezes, a comparação de um backtrace aos erros relatados por um verificador de memes como valgrind
pode ajudar a restringir as coisas. WRT seus exemplos, pode haver muito a peneirar embora; por último eu verifiquei valgrind e gtk não eram companheiros felizes.
I was thinking of compiling a new version of glib2 (and co.), then statically linking these programs against it.
Você poderia, embora eu não veja nenhum motivo para acreditar que algo funcionará melhor por causa disso. Está agarrando palhas. Você não pode realmente depurar o problema sozinho, o que é compreensível, então você considera o que você pode experimentar por desespero.
O mais provável é que você esteja perdendo muito tempo e se frustrando.
I'm 99.99% confident the issues I'm looking at are some kind of glitch-out with glib2.
Tenho 99% de confiança de que você é excessivamente confiante.
Embora novamente o bug possa estar em qualquer lugar, como regra geral, considere as partes mais amplamente testadas os culpados menos prováveis. Neste caso, o glib é bastante onipresente, enquanto o irssi e o NetSurf são relativamente obscuros.
A melhor coisa a fazer é provavelmente enviar um relatório de bug. Backtraces são geralmente muito apreciados lá. Comece com o irssi e o NetSurf; se você for direto para o simplório, eles dirão, razoavelmente, que não há razão para acreditar que é problema deles, a menos que você possa demonstrar (o que tudo isso não faz). Se, por outro lado, o povo irssi determinar que o está em bom estado, provavelmente eles vão querer prosseguir com isso.