it-swarm-vi.com

Theo dõi lỗi phân đoạn trong PHP?

Tôi đang tìm kiếm một cách tương đối không đau để theo dõi các lỗi phân đoạn trong PHP (như được báo cáo trong nhật ký lỗi Apache). Đây là thiết lập LAMP của tôi tại thời điểm này:

Linux: OpenSUSE 11.3 x86_64
[.__.] Apache: 2.2.15-3.7
[.__.] MySQL: 5.1.46-2.18
[.__.] PHP: 5.3.2-1.31

Mã trong câu hỏi không phải là của riêng tôi, đó là Gallery2: http://gallery.menalto.com Một kịch bản điển hình là tôi đi đến trang chính của thư viện và không có hình thu nhỏ nào xuất hiện nhưng tôi nhận được một tập hợp các lỗi lỗi phân đoạn mới trong nhật ký lỗi.

Do độ phức tạp tương đối của phần mềm đó, nó không đặc biệt phù hợp với các hình thức gỡ lỗi đơn giản. Tôi muốn có thể bước qua mã và xem chính xác những gì đang xảy ra. "Giải pháp" tôi đã thấy cho đến nay để làm điều này đã khá xa "tương đối không đau".

Tôi đã sử dụng thành công Gallery2 trên máy chủ này (các phiên bản trước của gói phần mềm LAMP) và trên các máy chủ khác, vì vậy tôi cho rằng có lỗi gì đó trong cấu hình hiện tại của tôi, nhưng không thể biết lỗi xảy ra ở đâu, tôi không thể sửa chữa hoặc làm việc xung quanh nó.

3
S. W.

Tôi có thể đề nghị xem http://sourceforge.net/tracker/index.php?func=detail&aid=1692166&group_id=7130&atid=1071http://gallery.menalto.com/ nút/62436 # bình luận-22857 ?

Dường như có những vấn đề phổ biến khi sử dụng Apache_setenv hoặc gzipping URL hai lần (tùy thuộc vào kịch bản - điều này dường như có nhiều khả năng với hình thu nhỏ không xuất hiện):

Tôi tin rằng vấn đề là mod_deflate cố gắng nén dữ liệu lần thứ hai dựa trên URL, dẫn đến sự cố trên một số hệ thống. Nói với nó là không nén các tệp mà chúng tôi đang gửi giúp trong trường hợp này.


Có thể có một lỗi trong PHP. Hãy thử thêm $gallery->setConfig('apacheSetenvBroken', 1); vào config.php của bạn để vô hiệu hóa bằng cách sử dụng hàm Apache_setenv ()

Đánh giá cao đây không phải là câu trả lời cho câu hỏi bạn đang hỏi (ngoài việc sử dụng Zend Framework với các plugin hoặc dòng lệnh php và gdb Tôi không biết cách gỡ lỗi segfaults trong PHP) nhưng nó có thể hữu ích.

2
Metalshark

Để gỡ lỗi PHP segfaults, thông thường bạn sẽ tạo một tệp .php mới (để nó không can thiệp vào mã chính của bạn) như vậy (gọi nó là my_first_debugger.php):

<?php
include('annoying_caller_page_that_crashes.php');
?>

Sau đó chạy gdb php. Nếu gdb không được cài đặt hoặc các nhị phân gdb/php không có trong đường dẫn của bạn, sẽ có lỗi, vì vậy hãy sử dụng YaST2 để cài đặt mọi thứ cần thiết (lấy thư viện phát triển/gỡ lỗi cho php vì chúng thường bao gồm các ký hiệu gỡ lỗi).

Bạn sẽ nhận được đầu ra như:

GNU gdb x.x
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
(gdb) 

Sau đó, chỉ cần thực hiện một run my_first_debugger.php trong dòng lệnh.

Tìm các gói -dev và -dbg nếu có các thông báo như (no debugging symbols found) hoặc bạn có thể không thấy tên của hàm được gọi.

0
Metalshark